ref: 982eb8edc41b8aff44c0181f533290f802f9d376
parent: 8ea545cd68e5cf321fe47c9ad73207f2fbd117dd
author: spiricom <jeff@snyderphonics.com>
date: Wed Mar 25 21:23:38 EDT 2020
added tSlide, atodb, and dbtoa
binary files a/.DS_Store b/.DS_Store differ
--- a/LEAF/Inc/leaf-analysis.h
+++ b/LEAF/Inc/leaf-analysis.h
@@ -21,6 +21,14 @@
#include "leaf-filters.h"
#include "leaf-envelopes.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
/* Envelope Follower */
--- a/LEAF/Inc/leaf-delay.h
+++ b/LEAF/Inc/leaf-delay.h
@@ -18,6 +18,14 @@
#include "leaf-math.h"
#include "leaf-mempool.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
/* Non-interpolating delay, reimplemented from STK (Cook and Scavone). */
--- a/LEAF/Inc/leaf-distortion.h
+++ b/LEAF/Inc/leaf-distortion.h
@@ -19,6 +19,14 @@
#include "leaf-mempool.h"
#include "leaf-math.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
typedef struct _tSampleReducer
@@ -136,6 +144,7 @@
void tCrusher_setSamplingRatio (tCrusher* const, float ratio);
//==============================================================================
+
#ifdef __cplusplus
}
--- a/LEAF/Inc/leaf-dynamics.h
+++ b/LEAF/Inc/leaf-dynamics.h
@@ -21,6 +21,14 @@
#include "leaf-mempool.h"
#include "leaf-analysis.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
@@ -80,6 +88,30 @@
//==============================================================================
+
+ //Threshold with hysteresis (like Max/MSP thresh~ object)
+
+ typedef struct _tThreshold {
+ float highThresh, lowThresh;
+ int currentValue;
+
+ } _tThreshold;
+
+ typedef _tThreshold* tThreshold;
+
+ void tThreshold_init (tThreshold* const, float low, float high);
+ void tThreshold_free (tThreshold* const);
+ void tThreshold_initToPool (tThreshold* const, float low, float high, tMempool* const);
+ void tThreshold_freeFromPool(tThreshold* const, tMempool* const);
+
+ int tThreshold_tick (tThreshold* const, float input);
+ void tThreshold_setLow (tThreshold* const, float low);
+ void tThreshold_setHigh (tThreshold* const, float high);
+
+
+
+ //////======================================================================
+
#ifdef __cplusplus
}
#endif
--- a/LEAF/Inc/leaf-effects.h
+++ b/LEAF/Inc/leaf-effects.h
@@ -21,6 +21,14 @@
#include "leaf-analysis.h"
#include "leaf-envelopes.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
/* tTalkbox */
--- a/LEAF/Inc/leaf-electrical.h
+++ b/LEAF/Inc/leaf-electrical.h
@@ -18,6 +18,14 @@
#include "leaf-math.h"
#include "leaf-mempool.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
typedef enum WDFComponentType
--- a/LEAF/Inc/leaf-envelopes.h
+++ b/LEAF/Inc/leaf-envelopes.h
@@ -24,6 +24,14 @@
#include "leaf-analysis.h"
#include "leaf-envelopes.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
/* Attack-Decay envelope */
@@ -154,6 +162,26 @@
void tRamp_setVal (tRamp* const, float val);
+
+ //Slide (based on Max/MSP's slide~)
+ typedef struct _tSlide {
+ float prevOut;
+ float currentOut;
+ float prevIn;
+ float invUpSlide;
+ float invDownSlide;
+
+ } _tSlide;
+
+ typedef _tSlide* tSlide;
+
+ void tSlide_init (tSlide* const, float upSlide, float downSlide);
+ void tSlide_free (tSlide* const);
+ void tSlide_initToPool (tSlide* const, float upSlide, float downSlide, tMempool* const);
+ void tSlide_freeFromPool (tSlide* const, tMempool* const);
+
+ float tSlide_tick (tSlide* const, float in);
+
#ifdef __cplusplus
}
#endif
--- a/LEAF/Inc/leaf-filters.h
+++ b/LEAF/Inc/leaf-filters.h
@@ -20,6 +20,14 @@
#include "leaf-delay.h"
#include "leaf-tables.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
/* tAllpass: Schroeder allpass. Comb-filter with feedforward and feedback. */
@@ -344,10 +352,31 @@
void tFIR_freeFromPool (tFIR* const, tMempool* const);
float tFIR_tick (tFIR* const, float input);
- void tFIR_coeffs (tFIR* const, float in);
+
//==============================================================================
+
+ typedef struct _tMedianFilter
+ {
+ float* val;
+ int* age;
+ int m;
+ int size;
+ int middlePosition;
+ int last;
+ int pos;
+ } _tMedianFilter;
+
+ typedef _tMedianFilter* tMedianFilter;
+
+ void tMedianFilter_init (tMedianFilter* const, int size);
+ void tMedianFilter_free (tMedianFilter* const);
+ void tMedianFilter_initToPool (tMedianFilter* const, int size, tMempool* const);
+ void tMedianFilter_freeFromPool (tMedianFilter* const, tMempool* const);
+
+ float tMedianFilter_tick (tMedianFilter* const, float input);
+
#ifdef __cplusplus
}
#endif
--- a/LEAF/Inc/leaf-global.h
+++ b/LEAF/Inc/leaf-global.h
@@ -15,17 +15,29 @@
extern "C" {
#endif
- typedef struct _LEAF
+#include "leaf-mempool.h"
+
+ /*!
+ * @ingroup leaf
+ * @brief The struct of the global LEAF instance `leaf`. Contains global variables and settings.
+ */
+ struct LEAF
{
- float sampleRate;
- float invSampleRate;
- int blockSize;
- float twoPiTimesInvSampleRate;
- float (*random)(void);
- int clearOnAllocation;
- } LEAF;
+ ///@{
+ float sampleRate; //!< The current audio sample rate. Set with LEAF_setSampleRate().
+ float invSampleRate; //!< The inverse of the current sample rate.
+ int blockSize; //!< The audio block size.
+ float twoPiTimesInvSampleRate; //!< Two-pi times the inverse of the current sample rate.
+ float (*random)(void); //!< A pointer to the random() function provided on initialization.
+ int clearOnAllocation; //!< A flag that determines whether memory allocated from the LEAF memory pool will be cleared.
+ tMempool mempool; //!< The default LEAF mempool object.
+ _tMempool _mempool;
+ size_t header_size; //!< The size in bytes of memory region headers within mempools.
+ ///@}
+ };
+ typedef struct LEAF LEAF;
- extern LEAF leaf; // The global instance of LEAF.
+ extern LEAF leaf;
//==============================================================================
@@ -36,4 +48,5 @@
#endif // LEAF_GLOBAL_H_INCLUDED
//==============================================================================
+
--- a/LEAF/Inc/leaf-instruments.h
+++ b/LEAF/Inc/leaf-instruments.h
@@ -21,6 +21,14 @@
#include "leaf-filters.h"
#include "leaf-envelopes.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
// 808 Cowbell
--- a/LEAF/Inc/leaf-math.h
+++ b/LEAF/Inc/leaf-math.h
@@ -167,6 +167,9 @@
float dbtorms(float f);
+ float atodb(float a);
+
+ float dbtoa(float db);
//==============================================================================
#ifdef __cplusplus
--- a/LEAF/Inc/leaf-mempool.h
+++ b/LEAF/Inc/leaf-mempool.h
@@ -54,8 +54,11 @@
//#define size_t unsigned long
- /**
- * memory pool structure
+ /*!
+ * @defgroup tmempool tMempool
+ * @ingroup mempool
+ * An object that can contain an additional mempool for the allocation of LEAF objects.
+ * @{
*/
// node of free list
@@ -66,28 +69,75 @@
size_t size;
} mpool_node_t;
- typedef struct mpool_t {
+ typedef struct _tMempool
+ {
void* mpool; // start of the mpool
size_t usize; // used size of the pool
size_t msize; // max size of the pool
mpool_node_t* head; // first node of memory pool free list
- } mpool_t;
+ } _tMempool;
+
+ typedef _tMempool* tMempool;
- void mpool_create (char* memory, size_t size, mpool_t* pool);
+ //! Initialize a tMempool for a given memory location and size to the default LEAF mempool.
+ /*!
+ @param pool A pointer to the tMempool to be initialized.
+ @param memory A pointer to the chunk of memory to be used as a mempool.
+ @param size The size of the chunk of memory to be used as a mempool.
+ */
+ void tMempool_init (tMempool* const pool, char* memory, size_t size);
+
+
+ //! Free a tMempool from the default LEAF mempool.
+ /*!
+ @param pool A pointer to the tMempool to be freed.
+ */
+ void tMempool_free (tMempool* const pool);
+
+
+ //! Initialize a tMempool for a given memory location and size to a specified mempool.
+ /*!
+ @param pool A pointer to the tMempool to be initialized.
+ @param memory A pointer to the chunk of memory to be used as a mempool.
+ @param size The size of the chuck of memory to be used as a mempool.
+ @param poolTo A pointer to the tMempool to which a tMempool should be initialized.
+ */
+ void tMempool_initToPool (tMempool* const pool, char* memory, size_t size, tMempool* const poolTo);
+
+
+ //! Free a tMempool from a specified mempool.
+ /*!
+ @param pool A pointer to the tMempool to be freed from the default LEAF mempool.
+ @param poolFrom A pointer to the tMempool from which a tMempool should be freed.
+ */
+ void tMempool_freeFromPool (tMempool* const pool, tMempool* const poolFrom);
+
+ /*! @} */
+
+ //==============================================================================
- void* mpool_alloc(size_t size, mpool_t* pool);
- void* mpool_calloc(size_t asize, mpool_t* pool);
-
- void mpool_free(void* ptr, mpool_t* pool);
+ // typedef struct mpool_t {
+ // void* mpool; // start of the mpool
+ // size_t usize; // used size of the pool
+ // size_t msize; // max size of the pool
+ // mpool_node_t* head; // first node of memory pool free list
+ // } mpool_t;
- size_t mpool_get_size(mpool_t* pool);
- size_t mpool_get_used(mpool_t* pool);
+ void mpool_create (char* memory, size_t size, _tMempool* pool);
+ void* mpool_alloc(size_t size, _tMempool* pool);
+ void* mpool_calloc(size_t asize, _tMempool* pool);
+
+ void mpool_free(void* ptr, _tMempool* pool);
+
+ size_t mpool_get_size(_tMempool* pool);
+ size_t mpool_get_used(_tMempool* pool);
+
void leaf_pool_init(char* memory, size_t size);
void* leaf_alloc(size_t size);
void* leaf_calloc(size_t size);
-
+
void leaf_free(void* ptr);
size_t leaf_pool_get_size(void);
@@ -96,24 +146,6 @@
void* leaf_pool_get_pool(void);
void leaf_mempool_overrun(void);
-
- // User object for creating additional mempools
-
- typedef struct _tMempool
- {
- mpool_t pool;
- } _tMempool;
-
- typedef _tMempool* tMempool;
-
- void tMempool_init (tMempool* const, char* memory, size_t size);
- void tMempool_free (tMempool* const);
- void tMempool_initToPool (tMempool* const, char* memory, size_t size, tMempool* const);
- void tMempool_freeFromPool (tMempool* const, tMempool* const);
-
- //==============================================================================
-
- extern tMempool leaf_mempool;
#ifdef __cplusplus
}
--- a/LEAF/Inc/leaf-midi.h
+++ b/LEAF/Inc/leaf-midi.h
@@ -20,10 +20,25 @@
#include "leaf-math.h"
#include "leaf-envelopes.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+ /*!
+ * @defgroup tstack tStack
+ * @ingroup midi
+ * @brief A basic stack of integers with a fixed max size of 128, used by tPoly to keep track of MIDI notes.
+ * @{
+ */
+
// STACK implementation (fixed size)
#define STACK_SIZE 128
typedef struct _tStack
@@ -38,22 +53,121 @@
typedef _tStack* tStack;
- void tStack_init (tStack* const);
- void tStack_free (tStack* const);
- void tStack_initToPool (tStack* const, tMempool* const);
- void tStack_freeFromPool (tStack* const, tMempool* const);
+ //! Initialize a tStack to the default LEAF mempool.
+ /*!
+ @param stack A pointer to the tStack to be initialized.
+ */
+ void tStack_init (tStack* const stack);
- void tStack_setCapacity (tStack* const, uint16_t cap);
- int tStack_addIfNotAlreadyThere (tStack* const, uint16_t item);
- void tStack_add (tStack* const, uint16_t item);
- int tStack_remove (tStack* const, uint16_t item);
- void tStack_clear (tStack* const);
- int tStack_first (tStack* const);
- int tStack_getSize (tStack* const);
- int tStack_contains (tStack* const, uint16_t item);
- int tStack_next (tStack* const);
- int tStack_get (tStack* const, int which);
+ //! Free a tStack from the default LEAF mempool.
+ /*!
+ @param stack A pointer to the tStack to be freed.
+ */
+ void tStack_free (tStack* const stack);
+
+
+ //! Initialize a tStack to a specified mempool.
+ /*!
+ @param stack A pointer to the tStack to be initialized.
+ @param pool A pointer to the tMempool to which the tStack should be initialized.
+ */
+ void tStack_initToPool (tStack* const stack, tMempool* const pool);
+
+
+ //! Free a tStack from a specified mempool.
+ /*!
+ @param stack A pointer to the tStack to be freed.
+ @param pool A pointer to the tMempool from which the tStack should be freed.
+ */
+ void tStack_freeFromPool (tStack* const stack, tMempool* const pool);
+
+ //! Set the capacity of the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @param cap The new capacity.
+ */
+ void tStack_setCapacity (tStack* const stack, uint16_t cap);
+
+
+ //! Add a value to the stack only if that value is not already in the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @param item The value to be added.
+ */
+ int tStack_addIfNotAlreadyThere (tStack* const stack, uint16_t item);
+
+
+ //! Add a value to the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @param item The value to be added.
+ */
+ void tStack_add (tStack* const stack, uint16_t item);
+
+
+ //! Remove a single instance of a value from the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @param item The value to be removed.
+ */
+ int tStack_remove (tStack* const stack, uint16_t item);
+
+
+ //! Clear the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ */
+ void tStack_clear (tStack* const stack);
+
+
+ //! Get the first value in the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @return The first value in the stack.
+ */
+ int tStack_first (tStack* const stack);
+
+
+ //! Get the current size of the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @return The current size of the stack.
+ */
+ int tStack_getSize (tStack* const stack);
+
+ //! Check if the stack contains a value, and if it does, get the index of that value.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @param item The value to check against the stack.
+ @return The index of the value or -1 if the stack does not contain the value.
+ */
+ int tStack_contains (tStack* const stack, uint16_t item);
+
+ //! Get the next value in the stack, starting from the earliest added values.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @return The next value in the stack or -1 if there are no values in the stack.
+ */
+ int tStack_next (tStack* const stack);
+
+ //! Get the value at a given index of the stack.
+ /*!
+ @param stack A pointer to the relevant tStack.
+ @param index The index of the stack from which to get a value.
+ @return The value at the given index.
+ */
+ int tStack_get (tStack* const stack, int index);
+
+ /*! @} */
+
+ /*!
+ * @defgroup tpoly tPoly
+ * @ingroup midi
+ * @brief An object for polyphonic handling.
+ * @{
+ */
+
/* tPoly */
typedef struct _tPoly
{
@@ -93,32 +207,159 @@
typedef _tPoly* tPoly;
/* MPoly*/
- void tPoly_init (tPoly* const, int maxNumVoices);
- void tPoly_free (tPoly* const);
- void tPoly_initToPool (tPoly* const, int maxNumVoices, tMempool* const);
- void tPoly_freeFromPool (tPoly* const, tMempool* const);
+ //! Initialize a tPoly to the default LEAF mempool.
+ /*!
+ @param poly A pointer to the tPoly to be initialized.
+ @param maxNumVoices The maximum number of voices this tPoly can handle at once.
+ */
+ void tPoly_init (tPoly* const poly, int maxNumVoices);
- //ADDING A NOTE
- int tPoly_noteOn (tPoly* const, int note, uint8_t vel);
- int tPoly_noteOff (tPoly* const, uint8_t note);
- void tPoly_orderedAddToStack (tPoly* const, uint8_t noteVal);
- void tPoly_setNumVoices (tPoly* const, uint8_t numVoices);
- void tPoly_setPitchBend (tPoly* const, float pitchBend);
- void tPoly_setPitchGlideActive (tPoly* const, oBool isActive);
- void tPoly_setPitchGlideTime (tPoly* const, float t);
- void tPoly_setBendGlideTime (tPoly* const polyh, float t);
- void tPoly_setBendSamplesPerTick (tPoly* const polyh, float t);
- void tPoly_tickPitch (tPoly* const);
- void tPoly_tickPitchGlide (tPoly* const);
- void tPoly_tickPitchBend (tPoly* const);
+ //! Free a tPoly from the default LEAF mempool.
+ /*!
+ @param poly A pointer to the tPoly to be freed.
+ */
+ void tPoly_free (tPoly* const poly);
- int tPoly_getNumVoices (tPoly* const);
- int tPoly_getNumActiveVoices (tPoly* const);
- float tPoly_getPitch (tPoly* const, uint8_t voice);
- int tPoly_getKey (tPoly* const, uint8_t voice);
- int tPoly_getVelocity (tPoly* const, uint8_t voice);
- int tPoly_isOn (tPoly* const, uint8_t voice);
+
+ //! Initialize a tPoly to a specified mempool.
+ /*!
+ @param poly A pointer to the tPoly to be initialized.
+ @param pool A pointer to the tMempool to which the tPoly should be initialized.
+ */
+ void tPoly_initToPool (tPoly* const poly, int maxNumVoices, tMempool* const pool);
+
+
+ //! Free a tPoly from a specified mempool.
+ /*!
+ @param poly A pointer to the tPoly to be freed.
+ @param pool A pointer to the tMempool from which the tPoly should be freed.
+ */
+ void tPoly_freeFromPool (tPoly* const poly, tMempool* const pool);
+
+ //! Add a note with a given velocity to the poly handler.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param note The MIDI note number to add.
+ @param vel The MIDI velocity of the note to add.
+ @return The voice that will play the note.
+ */
+ int tPoly_noteOn (tPoly* const poly, int note, uint8_t vel);
+
+
+ //! Remove a note from the poly handler.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param note The MIDI note number to remove.
+ @return The voice that was playing the removed note.
+ */
+ int tPoly_noteOff (tPoly* const poly, uint8_t note);
+
+ void tPoly_orderedAddToStack (tPoly* const poly, uint8_t note);
+
+
+ //! Set the number of voices available to play notes.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param numVoices The new number of available voices. Cannot be greater than the max number voices given in tPoly_init().
+ */
+ void tPoly_setNumVoices (tPoly* const poly, uint8_t numVoices);
+
+ //! Set whether pitch glide over note changes in voices is active.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param isActive Whether pitch glide should be active or not.
+ */
+ void tPoly_setPitchGlideActive (tPoly* const poly, oBool isActive);
+
+ //! Set how long pitch glide over note changes in voices takes.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param t The time to glide in milliseconds.
+ */
+ void tPoly_setPitchGlideTime (tPoly* const poly, float t);
+
+ //! Set the amount of pitch bend
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param pitchBend The new amount of pitch bend.
+ */
+ void tPoly_setPitchBend (tPoly* const poly, float pitchBend);
+ void tPoly_setBendGlideTime (tPoly* const poly, float t);
+ void tPoly_setBendSamplesPerTick (tPoly* const poly, float t);
+
+
+ //! Execute all tick-rate changes in the poly handler's pitch, including glide and bend.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ */
+ void tPoly_tickPitch (tPoly* const poly);
+
+
+ //! Execute the tick-rate change of the poly handler's pitch glide.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ */
+ void tPoly_tickPitchGlide (tPoly* const poly);
+
+
+ //! Execute the tick-rate change of the poly handler's pitch bend.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ */
+ void tPoly_tickPitchBend (tPoly* const poly);
+
+
+ //! Get the current number of voices available to play notes.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @return The current number of voices available to play notes.
+ */
+ int tPoly_getNumVoices (tPoly* const poly);
+
+ //! Get the number of voices currently playing notes.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @return The number of voices currently playing notes.
+ */
+ int tPoly_getNumActiveVoices (tPoly* const poly);
+
+ //! Get the current pitch of a given voice.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param voice The voice to get the pitch of.
+ @return The current pitch of the given voice as a fractional MIDI note number.
+ */
+ float tPoly_getPitch (tPoly* const poly, uint8_t voice);
+
+
+ //! Get the current MIDI note number of a given voice.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param voice The voice to get the MIDI note number of.
+ @return The MIDI note number of the given voice.
+ */
+ int tPoly_getKey (tPoly* const poly, uint8_t voice);
+
+
+ //! Get the current MIDI velocity of a given voice.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param voice The voice to get the MIDI velocity of.
+ @return The current MIDI velocity of the given voice.
+ */
+ int tPoly_getVelocity (tPoly* const poly, uint8_t voice);
+
+
+ //! Get the current play state of a given voice.
+ /*!
+ @param poly A pointer to the relevant tPoly.
+ @param voice The voice to get the state of.
+ @return The current play state of the given voice.
+ */
+ int tPoly_isOn (tPoly* const poly, uint8_t voice);
+
+ /*! @} */
//==============================================================================
--- a/LEAF/Inc/leaf-oscillators.h
+++ b/LEAF/Inc/leaf-oscillators.h
@@ -15,29 +15,82 @@
#include "leaf-math.h"
#include "leaf-mempool.h"
+#include "leaf-tables.h"
#include "leaf-filters.h"
+ /*!
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
- /* tCycle: Cycle/Sine waveform. Wavetable synthesis.*/
typedef struct _tCycle
{
// Underlying phasor
float phase;
float inc,freq;
-
} _tCycle;
typedef _tCycle* tCycle;
- void tCycle_init (tCycle* const);
- void tCycle_free (tCycle* const);
- void tCycle_initToPool (tCycle* const, tMempool* const);
- void tCycle_freeFromPool (tCycle* const, tMempool* const);
+ /*!
+ * @defgroup tcycle tCycle
+ * @ingroup oscillators
+ * @brief A cycle/sine waveform oscillator. Uses wavetable synthesis.
+ * @{
+ */
- float tCycle_tick (tCycle* const);
- int tCycle_setFreq (tCycle* const, float freq);
+ //! Initialize a tCycle to the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tCycle to be initialized.
+ */
+ void tCycle_init (tCycle* const osc);
+
+ //! Free a tCycle from the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tCycle to be freed.
+ */
+ void tCycle_free (tCycle* const osc);
+
+
+ //! Initialize a tCycle to a specified mempool.
+ /*!
+ @param osc A pointer to the tCycle to be initialized.
+ @param pool A pointer to the tMempool to which the tCycle should be initialized.
+ */
+ void tCycle_initToPool (tCycle* const osc, tMempool* const pool);
+
+
+ //! Free a tCycle from a specified mempool.
+ /*!
+ @param osc A pointer to the tCycle to be freed.
+ @param pool A pointer to the tMempool from which the tCycle should be freed.
+ */
+ void tCycle_freeFromPool (tCycle* const osc, tMempool* const pool);
+
+
+ //! Tick a tCycle oscillator.
+ /*!
+ @param osc A pointer to the relevant tCycle.
+ @return The ticked sample as a float from -1 to 1.
+ */
+ float tCycle_tick (tCycle* const osc);
+
+
+ //! Set the frequency of a tCycle oscillator.
+ /*!
+ @param osc A pointer to the relevant tCycle.
+ @param freq The frequency to set the oscillator to.
+ */
+ void tCycle_setFreq (tCycle* const osc, float freq);
+
+ /*! @} */
+
+
//==============================================================================
/* tTriangle: Anti-aliased Triangle waveform using wavetable interpolation. Wavetables constructed from sine components. */
@@ -46,19 +99,66 @@
// Underlying phasor
float phase;
float inc,freq;
-
+ TableName oct;
+ float w;
} _tTriangle;
typedef _tTriangle* tTriangle;
- void tTriangle_init (tTriangle* const);
- void tTriangle_free (tTriangle* const);
- void tTriangle_initToPool (tTriangle* const, tMempool* const);
- void tTriangle_freeFromPool (tTriangle* const, tMempool* const);
+ /*!
+ * @defgroup ttriangle tTriangle
+ * @ingroup oscillators
+ * @brief An anti-aliased triangle waveform oscillator. Uses wavetable synthesis.
+ * @{
+ */
- float tTriangle_tick (tTriangle* const);
- int tTriangle_setFreq (tTriangle* const, float freq);
+ //! Initialize a tTriangle to the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tTriangle to be initialized.
+ */
+ void tTriangle_init (tTriangle* const osc);
+
+ //! Free a tTriangle from the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tTriangle to be freed.
+ */
+ void tTriangle_free (tTriangle* const osc);
+
+
+ //! Initialize a tTriangle to a specified mempool.
+ /*!
+ @param osc A pointer to the tTriangle to be initialized.
+ @param pool A pointer to the tMempool to which the tTriangle should be initialized.
+ */
+ void tTriangle_initToPool (tTriangle* const osc, tMempool* const pool);
+
+
+ //! Free a tTriangle from a specified mempool.
+ /*!
+ @param osc A pointer to the tTriangle to be freed.
+ @param pool A pointer to the tMempool from which the tTriangle should be freed.
+ */
+ void tTriangle_freeFromPool (tTriangle* const osc, tMempool* const pool);
+
+
+ //! Tick a tTriangle oscillator.
+ /*!
+ @param osc A pointer to the relevant tTriangle.
+ @return The ticked sample as a float from -1 to 1.
+ */
+ float tTriangle_tick (tTriangle* const osc);
+
+
+ //! Set the frequency of a tTriangle oscillator.
+ /*!
+ @param osc A pointer to the relevant tTriangle.
+ @param freq The frequency to set the oscillator to.
+ */
+ void tTriangle_setFreq (tTriangle* const osc, float freq);
+
+ /*! @} */
+
//==============================================================================
/* tSquare: Anti-aliased Square waveform using wavetable interpolation. Wavetables constructed from sine components. */
@@ -67,19 +167,66 @@
// Underlying phasor
float phase;
float inc,freq;
-
+ TableName oct;
+ float w;
} _tSquare;
typedef _tSquare* tSquare;
- void tSquare_init (tSquare* const);
- void tSquare_free (tSquare* const);
- void tSquare_initToPool (tSquare* const, tMempool* const);
- void tSquare_freeFromPool(tSquare* const, tMempool* const);
+ /*!
+ * @defgroup tsquare tSquare
+ * @ingroup oscillators
+ * @brief An anti-aliased square waveform oscillator. Uses wavetable synthesis.
+ * @{
+ */
- float tSquare_tick (tSquare* const);
- int tSquare_setFreq (tSquare* const, float freq);
+ //! Initialize a tSquare to the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tSquare to be initialized.
+ */
+ void tSquare_init (tSquare* const osc);
+
+ //! Free a tSquare from the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tSquare to be freed.
+ */
+ void tSquare_free (tSquare* const osc);
+
+
+ //! Initialize a tSquare to a specified mempool.
+ /*!
+ @param osc A pointer to the tSquare to be initialized.
+ @param pool A pointer to the tMempool to which the tSquare should be initialized.
+ */
+ void tSquare_initToPool (tSquare* const osc, tMempool* const);
+
+
+ //! Free a tSquare from a specified mempool.
+ /*!
+ @param osc A pointer to the tSquare to be freed.
+ @param pool A pointer to the tMempool from which the tSquare should be freed.
+ */
+ void tSquare_freeFromPool(tSquare* const osc, tMempool* const);
+
+
+ //! Tick a tSquare oscillator.
+ /*!
+ @param osc A pointer to the relevant tSquare.
+ @return The ticked sample as a float from -1 to 1.
+ */
+ float tSquare_tick (tSquare* const osc);
+
+
+ //! Set the frequency of a tSquare oscillator.
+ /*!
+ @param osc A pointer to the relevant tSquare.
+ @param freq The frequency to set the oscillator to.
+ */
+ void tSquare_setFreq (tSquare* const osc, float freq);
+
+ /*! @} */
+
//==============================================================================
/* tSawtooth: Anti-aliased Sawtooth waveform using wavetable interpolation. Wavetables constructed from sine components. */
@@ -88,19 +235,66 @@
// Underlying phasor
float phase;
float inc,freq;
-
+ TableName oct;
+ float w;
} _tSawtooth;
typedef _tSawtooth* tSawtooth;
- void tSawtooth_init (tSawtooth* const);
- void tSawtooth_free (tSawtooth* const);
- void tSawtooth_initToPool (tSawtooth* const, tMempool* const);
- void tSawtooth_freeFromPool (tSawtooth* const, tMempool* const);
+ /*!
+ * @defgroup tsawtooth tSawtooth
+ * @ingroup oscillators
+ * @brief An anti-aliased sawtooth waveform oscillator. Uses wavetable synthesis.
+ * @{
+ */
- float tSawtooth_tick (tSawtooth* const);
- int tSawtooth_setFreq (tSawtooth* const, float freq);
+ //! Initialize a tSawtooth to the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tSawtooth to be initialized.
+ */
+ void tSawtooth_init (tSawtooth* const osc);
+
+ //! Free a tSawtooth from the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tSawtooth to be freed.
+ */
+ void tSawtooth_free (tSawtooth* const osc);
+
+
+ //! Initialize a tSawtooth to a specified mempool.
+ /*!
+ @param osc A pointer to the tSawtooth to be initialized.
+ @param pool A pointer to the tMempool to which the tSawtooth should be initialized.
+ */
+ void tSawtooth_initToPool (tSawtooth* const osc, tMempool* const pool);
+
+
+ //! Free a tSawtooth from a specified mempool.
+ /*!
+ @param osc A pointer to the tSawtooth to be freed.
+ @param pool A pointer to the tMempool from which the tSawtooth should be freed.
+ */
+ void tSawtooth_freeFromPool (tSawtooth* const osc, tMempool* const pool);
+
+
+ //! Tick a tSawtooth oscillator.
+ /*!
+ @param osc A pointer to the relevant tSawtooth.
+ @return The ticked sample as a float from -1 to 1.
+ */
+ float tSawtooth_tick (tSawtooth* const osc);
+
+
+ //! Set the frequency of a tSawtooth oscillator.
+ /*!
+ @param osc A pointer to the relevant tSawtooth.
+ @param freq The frequency to set the oscillator to.
+ */
+ void tSawtooth_setFreq (tSawtooth* const osc, float freq);
+
+ /*! @} */
+
//==============================================================================
/* tPhasor: Aliasing phasor [0.0, 1.0) */
@@ -113,24 +307,82 @@
typedef _tPhasor* tPhasor;
- void tPhasor_init (tPhasor* const);
- void tPhasor_free (tPhasor* const);
- void tPhasor_initToPool (tPhasor* const, tMempool* const);
- void tPhasor_freeFromPool(tPhasor* const, tMempool* const);
+ /*!
+ * @defgroup tphasor Phasor
+ * @ingroup oscillators
+ * @brief An aliasing phasor.
+ * @{
+ */
- float tPhasor_tick (tPhasor* const);
- int tPhasor_setFreq (tPhasor* const, float freq);
+ //! Initialize a tPhasor to the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tPhasor to be initialized.
+ */
+ void tPhasor_init (tPhasor* const osc);
+
+ //! Free a tPhasor from the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tPhasor to be freed.
+ */
+ void tPhasor_free (tPhasor* const osc);
+
+
+ //! Initialize a tPhasor to a specified mempool.
+ /*!
+ @param osc A pointer to the tPhasor to be initialized.
+ @param pool A pointer to the tMempool to which the tPhasor should be initialized.
+ */
+ void tPhasor_initToPool (tPhasor* const osc, tMempool* const);
+
+
+ //! Free a tPhasor from a specified mempool.
+ /*!
+ @param osc A pointer to the tPhasor to be freed.
+ @param pool A pointer to the tMempool from which the tPhasor should be freed.
+ */
+ void tPhasor_freeFromPool(tPhasor* const osc, tMempool* const);
+
+
+ //! Tick a tPhasor oscillator.
+ /*!
+ @param osc A pointer to the relevant tPhasor.
+ @return The ticked sample as a float from 0 to 1.
+ */
+ float tPhasor_tick (tPhasor* const osc);
+
+
+ //! Set the frequency of a tPhasor oscillator.
+ /*!
+ @param osc A pointer to the relevant tPhasor.
+ @param freq The frequency to set the oscillator to.
+ */
+ void tPhasor_setFreq (tPhasor* const osc, float freq);
+
+ /*! @} */
+
//==============================================================================
+ /*!
+ * @defgroup tnoise tNoise
+ * @ingroup oscillators
+ * @brief A noise generator.
+ * @{
+ */
+
/* tNoise. WhiteNoise, PinkNoise. */
- typedef enum NoiseType
+ /*!
+ * Noise types
+ */
+ enum NoiseType
{
- WhiteNoise=0,
- PinkNoise,
+ WhiteNoise, //!< White noise. Full spectrum.
+ PinkNoise, //!< Pink noise. Inverse frequency-proportional spectrum.
NoiseTypeNil,
- } NoiseType;
+ };
+ typedef enum NoiseType NoiseType;
+
typedef struct _tNoise
{
NoiseType type;
@@ -141,23 +393,65 @@
typedef _tNoise* tNoise;
- void tNoise_init (tNoise* const, NoiseType type);
- void tNoise_free (tNoise* const);
- void tNoise_initToPool (tNoise* const, NoiseType type, tMempool* const);
- void tNoise_freeFromPool (tNoise* const, tMempool* const);
+ //! Initialize a tNoise to the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tNoise to be initialized.
+ */
+ void tNoise_init (tNoise* const noise, NoiseType type);
- float tNoise_tick (tNoise* const);
+ //! Free a tNoise from the default LEAF mempool.
+ /*!
+ @param osc A pointer to the tNoise to be freed.
+ */
+ void tNoise_free (tNoise* const noise);
+
+
+ //! Initialize a tNoise to a specified mempool.
+ /*!
+ @param osc A pointer to the tNoise to be initialized.
+ @param pool A pointer to the tMempool to which the tNoise should be initialized.
+ */
+ void tNoise_initToPool (tNoise* const noise, NoiseType type, tMempool* const);
+
+
+ //! Free a tNoise from a specified mempool.
+ /*!
+ @param osc A pointer to the tNoise to be freed.
+ @param pool A pointer to the tMempool from which the tNoise should be freed.
+ */
+ void tNoise_freeFromPool (tNoise* const noise, tMempool* const);
+
+
+ //! Tick a tNoise oscillator.
+ /*!
+ @param osc A pointer to the relevant tNoise.
+ @return The ticked sample as a float from -1 to 1.
+ */
+ float tNoise_tick (tNoise* const noise);
+
+ /*! @} */
+
//==============================================================================
- /* tNeuron */
- typedef enum NeuronMode
+ /*!
+ * @defgroup tneuron tNeuron
+ * @ingroup oscillators
+ * @brief A model of a neuron, adapted to act as an oscillator.
+ * @{
+ */
+
+ /*!
+ * Neuron modes
+ */
+ enum NeuronMode
{
- NeuronNormal = 0,
- NeuronTanh,
- NeuronAaltoShaper,
+ NeuronNormal, //!< Normal operation
+ NeuronTanh, //!< Tanh voltage shaping
+ NeuronAaltoShaper, //!< Aalto voltage shaping
NeuronModeNil
- } NeuronMode;
+ };
+ typedef enum NeuronMode NeuronMode;
typedef struct _tNeuron
{
@@ -178,23 +472,131 @@
typedef _tNeuron* tNeuron;
- void tNeuron_init (tNeuron* const);
- void tNeuron_free (tNeuron* const);
- void tNeuron_initToPool (tNeuron* const, tMempool* const);
- void tNeuron_freeFromPool(tNeuron* const, tMempool* const);
+ //! Initialize a tNeuron to the default LEAF mempool.
+ /*!
+ @param neuron A pointer to the tNeuron to be initialized.
+ */
+ void tNeuron_init (tNeuron* const neuron);
- void tNeuron_reset (tNeuron* const);
- float tNeuron_tick (tNeuron* const);
- void tNeuron_setMode (tNeuron* const, NeuronMode mode);
- void tNeuron_setCurrent (tNeuron* const, float current);
- void tNeuron_setK (tNeuron* const, float K);
- void tNeuron_setL (tNeuron* const, float L);
- void tNeuron_setN (tNeuron* const, float N);
- void tNeuron_setC (tNeuron* const, float C);
- void tNeuron_setV1 (tNeuron* const, float V1);
- void tNeuron_setV2 (tNeuron* const, float V2);
- void tNeuron_setV3 (tNeuron* const, float V3);
- void tNeuron_setTimeStep (tNeuron* const, float timestep);
+
+ //! Free a tNeuron from the default LEAF mempool.
+ /*!
+ @param neuron A pointer to the tNeuron to be freed.
+ */
+ void tNeuron_free (tNeuron* const neuron);
+
+
+ //! Initialize a tNeuron to a specified mempool.
+ /*!
+ @param neuron A pointer to the tNeuron to be initialized.
+ @param pool A pointer to the tMempool to which the tNeuron should be initialized.
+ */
+ void tNeuron_initToPool (tNeuron* const neuron, tMempool* const pool);
+
+
+ //! Free a tNeuron from a specified mempool.
+ /*!
+ @param neuron A pointer to the tNeuron to be freed.
+ @param pool A pointer to the tMempool from which the tNeuron should be freed.
+ */
+ void tNeuron_freeFromPool(tNeuron* const neuron, tMempool* const pool);
+
+
+ //! Reset the neuron model.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ */
+ void tNeuron_reset (tNeuron* const neuron);
+
+
+ //! Tick a tNeuron oscillator.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @return The ticked sample as a float from -1 to 1.
+ */
+ float tNeuron_tick (tNeuron* const neuron);
+
+
+ //! Set the tNeuron shaping mode.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param mode The mode to set the tNeuron to.
+ */
+ void tNeuron_setMode (tNeuron* const neuron, NeuronMode mode);
+
+
+ //! Set the current.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param current The new current.
+ */
+ void tNeuron_setCurrent (tNeuron* const neuron, float current);
+
+
+ //! Set the potassium value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param K The new potassium.
+ */
+ void tNeuron_setK (tNeuron* const neuron, float K);
+
+
+ //! Set the chloride value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param L The new chloride value.
+ */
+ void tNeuron_setL (tNeuron* const neuron, float L);
+
+
+ //! Set the sodium value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param N The new sodium value.
+ */
+ void tNeuron_setN (tNeuron* const neuron, float N);
+
+
+ //! Set the calcium value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param C The new calcium.
+ */
+ void tNeuron_setC (tNeuron* const neuron, float C);
+
+
+ //! Set the V1 value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param V1 The new V1.
+ */
+ void tNeuron_setV1 (tNeuron* const neuron, float V1);
+
+
+ //! Set the V2 value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param V2 The new V2.
+ */
+ void tNeuron_setV2 (tNeuron* const neuron, float V2);
+
+
+ //! Set the V3 value.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param V3 The new V3.
+ */
+ void tNeuron_setV3 (tNeuron* const neuron, float V3);
+
+
+ //! Set the time step.
+ /*!
+ @param neuron A pointer to the relevant tNeuron.
+ @param timestep The new time step
+ */
+ void tNeuron_setTimeStep (tNeuron* const neuron, float timestep);
+
+ /*! @} */
//==============================================================================
--- a/LEAF/Inc/leaf-physical.h
+++ b/LEAF/Inc/leaf-physical.h
@@ -26,6 +26,14 @@
#include "leaf-envelopes.h"
#include "leaf-dynamics.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
/* Karplus Strong model */
--- a/LEAF/Inc/leaf-reverb.h
+++ b/LEAF/Inc/leaf-reverb.h
@@ -22,6 +22,14 @@
#include "leaf-filters.h"
#include "leaf-oscillators.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
/* PRCReverb: Reverb, reimplemented from STK (Cook and Scavone). */
--- a/LEAF/Inc/leaf-sampling.h
+++ b/LEAF/Inc/leaf-sampling.h
@@ -23,6 +23,14 @@
#include "leaf-mempool.h"
#include "leaf-analysis.h"
+ /*!
+ * @internal
+ * Header.
+ * @include basic-oscillators.h
+ * @example basic-oscillators.c
+ * An example.
+ */
+
//==============================================================================
typedef enum RecordMode
--- a/LEAF/Inc/leaf-tables.h
+++ b/LEAF/Inc/leaf-tables.h
@@ -32,23 +32,23 @@
#define FILTERTAN_TABLE_SIZE 4096
#define SHAPER1_TABLE_SIZE 65536
-extern const float shaper1[SHAPER1_TABLE_SIZE];
+extern const float __leaf_table_shaper1[SHAPER1_TABLE_SIZE];
#define COEFFS_SIZE 32
-extern const float* firCoeffs[COEFFS_SIZE];
-extern const float firNumTaps[COEFFS_SIZE];
-extern const float fir2XLow[32];
-extern const float fir4XLow[64];
-extern const float fir8XLow[64];
-extern const float fir16XLow[128];
-extern const float fir32XLow[256];
-extern const float fir64XLow[256];
-extern const float fir2XHigh[128];
-extern const float fir4XHigh[256];
-extern const float fir8XHigh[256];
-extern const float fir16XHigh[512];
-extern const float fir32XHigh[512];
-extern const float fir64XHigh[1024];
+extern const float* __leaf_tableref_firCoeffs[COEFFS_SIZE];
+extern const float __leaf_tablesize_firNumTaps[COEFFS_SIZE];
+extern const float __leaf_table_fir2XLow[32];
+extern const float __leaf_table_fir4XLow[64];
+extern const float __leaf_table_fir8XLow[64];
+extern const float __leaf_table_fir16XLow[128];
+extern const float __leaf_table_fir32XLow[256];
+extern const float __leaf_table_fir64XLow[256];
+extern const float __leaf_table_fir2XHigh[128];
+extern const float __leaf_table_fir4XHigh[256];
+extern const float __leaf_table_fir8XHigh[256];
+extern const float __leaf_table_fir16XHigh[512];
+extern const float __leaf_table_fir32XHigh[512];
+extern const float __leaf_table_fir64XHigh[1024];
typedef enum TableName
{
@@ -68,26 +68,26 @@
// mtof lookup table based on input range [0.0,1.0) in 4096 increments - midi frequency values scaled between m25 and m134 (from the Snyderphonics DrumBox code)
-extern const float exp_decay[EXP_DECAY_TABLE_SIZE];
-extern const float attack_decay_inc[ATTACK_DECAY_INC_TABLE_SIZE];
+extern const float __leaf_table_exp_decay[EXP_DECAY_TABLE_SIZE];
+extern const float __leaf_table_attack_decay_inc[ATTACK_DECAY_INC_TABLE_SIZE];
-extern const float filtertan[FILTERTAN_TABLE_SIZE];
+extern const float __leaf_table_filtertan[FILTERTAN_TABLE_SIZE];
-extern const float mtof1[MTOF1_TABLE_SIZE];
-extern const float decayCoeffTable[DECAY_COEFF_TABLE_SIZE];
+extern const float __leaf_table_mtof1[MTOF1_TABLE_SIZE];
+extern const float __leaf_table_decayCoeffTable[DECAY_COEFF_TABLE_SIZE];
-extern const float tanh1[TANH1_TABLE_SIZE];
+extern const float __leaf_table_tanh1[TANH1_TABLE_SIZE];
//==============================================================================
/* Sine wave table ripped from http://aquaticus.info/pwm-sine-wave. */
-extern const float sinewave[SINE_TABLE_SIZE];
+extern const float __leaf_table_sinewave[SINE_TABLE_SIZE];
-extern const float sawtooth[11][SAW_TABLE_SIZE];
+extern const float __leaf_table_sawtooth[11][SAW_TABLE_SIZE];
-extern const float triangle[11][TRI_TABLE_SIZE];
+extern const float __leaf_table_triangle[11][TRI_TABLE_SIZE];
-extern const float squarewave[11][SQR_TABLE_SIZE];
+extern const float __leaf_table_squarewave[11][SQR_TABLE_SIZE];
//==============================================================================
--- a/LEAF/Src/leaf-analysis.c
+++ b/LEAF/Src/leaf-analysis.c
@@ -41,7 +41,7 @@
void tEnvelopeFollower_initToPool (tEnvelopeFollower* const ef, float attackThreshold, float decayCoeff, tMempool* const mp)
{
_tMempool* m = *mp;
- _tEnvelopeFollower* e = *ef = (_tEnvelopeFollower*) mpool_alloc(sizeof(_tEnvelopeFollower), &m->pool);
+ _tEnvelopeFollower* e = *ef = (_tEnvelopeFollower*) mpool_alloc(sizeof(_tEnvelopeFollower), m);
e->y = 0.0f;
e->a_thresh = attackThreshold;
@@ -53,7 +53,7 @@
_tMempool* m = *mp;
_tEnvelopeFollower* e = *ef;
- mpool_free(e, &m->pool);
+ mpool_free(e, m);
}
float tEnvelopeFollower_tick(tEnvelopeFollower* const ef, float x)
@@ -108,7 +108,7 @@
void tPowerFollower_initToPool (tPowerFollower* const pf, float factor, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPowerFollower* p = *pf = (_tPowerFollower*) mpool_alloc(sizeof(_tPowerFollower), &m->pool);
+ _tPowerFollower* p = *pf = (_tPowerFollower*) mpool_alloc(sizeof(_tPowerFollower), m);
p->curr=0.0f;
p->factor=factor;
@@ -120,7 +120,7 @@
_tMempool* m = *mp;
_tPowerFollower* p = *pf;
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
int tPowerFollower_setFactor(tPowerFollower* const pf, float factor)
@@ -206,7 +206,7 @@
void tEnvPD_initToPool (tEnvPD* const xpd, int ws, int hs, int bs, tMempool* const mp)
{
_tMempool* m = *mp;
- _tEnvPD* x = *xpd = (_tEnvPD*) mpool_calloc(sizeof(_tEnvPD), &m->pool);
+ _tEnvPD* x = *xpd = (_tEnvPD*) mpool_calloc(sizeof(_tEnvPD), m);
int period = hs, npoints = ws;
@@ -251,7 +251,7 @@
_tMempool* m = *mp;
_tEnvPD* x = *xpd;
- mpool_free(x, &m->pool);
+ mpool_free(x, m);
}
float tEnvPD_tick (tEnvPD* const xpd)
@@ -323,7 +323,7 @@
void tAttackDetection_initToPool (tAttackDetection* const ad, int blocksize, int atk, int rel, tMempool* const mp)
{
_tMempool* m = *mp;
- *ad = (_tAttackDetection*) mpool_alloc(sizeof(_tAttackDetection), &m->pool);
+ *ad = (_tAttackDetection*) mpool_alloc(sizeof(_tAttackDetection), m);
atkdtk_init(ad, blocksize, atk, rel);
}
@@ -333,7 +333,7 @@
_tMempool* m = *mp;
_tAttackDetection* a = *ad;
- mpool_free(a, &m->pool);
+ mpool_free(a, m);
}
/*******Public Functions***********/
@@ -495,7 +495,7 @@
void tSNAC_initToPool (tSNAC* const snac, int overlaparg, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSNAC* s = *snac = (_tSNAC*) mpool_alloc(sizeof(_tSNAC), &m->pool);
+ _tSNAC* s = *snac = (_tSNAC*) mpool_alloc(sizeof(_tSNAC), m);
s->biasfactor = DEFBIAS;
s->timeindex = 0;
@@ -505,10 +505,10 @@
s->minrms = DEFMINRMS;
s->framesize = SNAC_FRAME_SIZE;
- s->inputbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, &m->pool);
- s->processbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE * 2), &m->pool);
- s->spectrumbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE / 2), &m->pool);
- s->biasbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, &m->pool);
+ s->inputbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, m);
+ s->processbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE * 2), m);
+ s->spectrumbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE / 2), m);
+ s->biasbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, m);
snac_biasbuf(snac);
tSNAC_setOverlap(snac, overlaparg);
@@ -519,11 +519,11 @@
_tMempool* m = *mp;
_tSNAC* s = *snac;
- mpool_free(s->inputbuf, &m->pool);
- mpool_free(s->processbuf, &m->pool);
- mpool_free(s->spectrumbuf, &m->pool);
- mpool_free(s->biasbuf, &m->pool);
- mpool_free(s, &m->pool);
+ mpool_free(s->inputbuf, m);
+ mpool_free(s->processbuf, m);
+ mpool_free(s->spectrumbuf, m);
+ mpool_free(s->biasbuf, m);
+ mpool_free(s, m);
}
/******************************************************************************/
@@ -840,18 +840,18 @@
//===========================================================================
void tPeriodDetection_init (tPeriodDetection* const pd, float* in, float* out, int bufSize, int frameSize)
{
- tPeriodDetection_initToPool(pd, in, out, bufSize, frameSize, &leaf_mempool);
+ tPeriodDetection_initToPool(pd, in, out, bufSize, frameSize, &leaf.mempool);
}
void tPeriodDetection_free (tPeriodDetection* const pd)
{
- tPeriodDetection_freeFromPool(pd, &leaf_mempool);
+ tPeriodDetection_freeFromPool(pd, &leaf.mempool);
}
void tPeriodDetection_initToPool (tPeriodDetection* const pd, float* in, float* out, int bufSize, int frameSize, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPeriodDetection* p = *pd = (_tPeriodDetection*) mpool_calloc(sizeof(_tPeriodDetection), &m->pool);
+ _tPeriodDetection* p = *pd = (_tPeriodDetection*) mpool_calloc(sizeof(_tPeriodDetection), m);
p->inBuffer = in;
p->outBuffer = out;
@@ -882,7 +882,7 @@
tEnvPD_freeFromPool(&p->env, mp);
tSNAC_freeFromPool(&p->snac, mp);
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
float tPeriodDetection_tick (tPeriodDetection* pd, float sample)
--- a/LEAF/Src/leaf-delay.c
+++ b/LEAF/Src/leaf-delay.c
@@ -21,24 +21,24 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Delay ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ //
void tDelay_init (tDelay* const dl, uint32_t delay, uint32_t maxDelay)
{
- tDelay_initToPool(dl, delay, maxDelay, &leaf_mempool);
+ tDelay_initToPool(dl, delay, maxDelay, &leaf.mempool);
}
void tDelay_free(tDelay* const dl)
{
- tDelay_freeFromPool(dl, &leaf_mempool);
+ tDelay_freeFromPool(dl, &leaf.mempool);
}
void tDelay_initToPool (tDelay* const dl, uint32_t delay, uint32_t maxDelay, tMempool* const mp)
{
_tMempool* m = *mp;
- _tDelay* d = *dl = (_tDelay*) mpool_alloc(sizeof(_tDelay), &m->pool);
+ _tDelay* d = *dl = (_tDelay*) mpool_alloc(sizeof(_tDelay), m);
d->maxDelay = maxDelay;
d->delay = delay;
- d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, &m->pool);
+ d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, m);
d->inPoint = 0;
d->outPoint = 0;
@@ -56,8 +56,8 @@
_tMempool* m = *mp;
_tDelay* d = *dl;
- mpool_free(d->buff, &m->pool);
- mpool_free(d, &m->pool);
+ mpool_free(d->buff, m);
+ mpool_free(d, m);
}
void tDelay_clear(tDelay* const dl)
@@ -169,18 +169,18 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ LinearDelay ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ //
void tLinearDelay_init (tLinearDelay* const dl, float delay, uint32_t maxDelay)
{
- tLinearDelay_initToPool(dl, delay, maxDelay, &leaf_mempool);
+ tLinearDelay_initToPool(dl, delay, maxDelay, &leaf.mempool);
}
void tLinearDelay_free(tLinearDelay* const dl)
{
- tLinearDelay_freeFromPool(dl, &leaf_mempool);
+ tLinearDelay_freeFromPool(dl, &leaf.mempool);
}
void tLinearDelay_initToPool (tLinearDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp)
{
_tMempool* m = *mp;
- _tLinearDelay* d = *dl = (_tLinearDelay*) mpool_alloc(sizeof(_tLinearDelay), &m->pool);
+ _tLinearDelay* d = *dl = (_tLinearDelay*) mpool_alloc(sizeof(_tLinearDelay), m);
d->maxDelay = maxDelay;
@@ -188,7 +188,7 @@
else if (delay < 0.0f) d->delay = 0.0f;
else d->delay = delay;
- d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, &m->pool);
+ d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, m);
d->gain = 1.0f;
@@ -206,8 +206,8 @@
_tMempool* m = *mp;
_tLinearDelay* d = *dl;
- mpool_free(d->buff, &m->pool);
- mpool_free(d, &m->pool);
+ mpool_free(d->buff, m);
+ mpool_free(d, m);
}
void tLinearDelay_clear(tLinearDelay* const dl)
@@ -367,18 +367,18 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ LinearDelay ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ //
void tHermiteDelay_init (tHermiteDelay* const dl, float delay, uint32_t maxDelay)
{
- tHermiteDelay_initToPool(dl, delay, maxDelay, &leaf_mempool);
+ tHermiteDelay_initToPool(dl, delay, maxDelay, &leaf.mempool);
}
void tHermiteDelay_free(tHermiteDelay* const dl)
{
- tHermiteDelay_freeFromPool(dl, &leaf_mempool);
+ tHermiteDelay_freeFromPool(dl, &leaf.mempool);
}
void tHermiteDelay_initToPool (tHermiteDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp)
{
_tMempool* m = *mp;
- _tHermiteDelay* d = *dl = (_tHermiteDelay*) mpool_alloc(sizeof(_tHermiteDelay), &m->pool);
+ _tHermiteDelay* d = *dl = (_tHermiteDelay*) mpool_alloc(sizeof(_tHermiteDelay), m);
d->maxDelay = maxDelay;
@@ -386,7 +386,7 @@
else if (delay < 0.0f) d->delay = 0.0f;
else d->delay = delay;
- d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, &m->pool);
+ d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, m);
d->gain = 1.0f;
@@ -404,8 +404,8 @@
_tMempool* m = *mp;
_tHermiteDelay* d = *dl;
- mpool_free(d->buff, &m->pool);
- mpool_free(d, &m->pool);
+ mpool_free(d->buff, m);
+ mpool_free(d, m);
}
@@ -567,18 +567,18 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ AllpassDelay ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ //
void tAllpassDelay_init (tAllpassDelay* const dl, float delay, uint32_t maxDelay)
{
- tAllpassDelay_initToPool(dl, delay, maxDelay, &leaf_mempool);
+ tAllpassDelay_initToPool(dl, delay, maxDelay, &leaf.mempool);
}
void tAllpassDelay_free(tAllpassDelay* const dl)
{
- tAllpassDelay_freeFromPool(dl, &leaf_mempool);
+ tAllpassDelay_freeFromPool(dl, &leaf.mempool);
}
void tAllpassDelay_initToPool (tAllpassDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp)
{
_tMempool* m = *mp;
- _tAllpassDelay* d = *dl = (_tAllpassDelay*) mpool_alloc(sizeof(_tAllpassDelay), &m->pool);
+ _tAllpassDelay* d = *dl = (_tAllpassDelay*) mpool_alloc(sizeof(_tAllpassDelay), m);
d->maxDelay = maxDelay;
@@ -586,7 +586,7 @@
else if (delay < 0.0f) d->delay = 0.0f;
else d->delay = delay;
- d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, &m->pool);
+ d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, m);
d->gain = 1.0f;
@@ -606,8 +606,8 @@
_tMempool* m = *mp;
_tAllpassDelay* d = *dl;
- mpool_free(d->buff, &m->pool);
- mpool_free(d, &m->pool);
+ mpool_free(d->buff, m);
+ mpool_free(d, m);
}
void tAllpassDelay_clear(tAllpassDelay* const dl)
@@ -747,22 +747,22 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ TapeDelay ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ //
void tTapeDelay_init (tTapeDelay* const dl, float delay, uint32_t maxDelay)
{
- tTapeDelay_initToPool(dl, delay, maxDelay, &leaf_mempool);
+ tTapeDelay_initToPool(dl, delay, maxDelay, &leaf.mempool);
}
void tTapeDelay_free(tTapeDelay* const dl)
{
- tTapeDelay_freeFromPool(dl, &leaf_mempool);
+ tTapeDelay_freeFromPool(dl, &leaf.mempool);
}
void tTapeDelay_initToPool (tTapeDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp)
{
_tMempool* m = *mp;
- _tTapeDelay* d = *dl = (_tTapeDelay*) mpool_alloc(sizeof(_tTapeDelay), &m->pool);
+ _tTapeDelay* d = *dl = (_tTapeDelay*) mpool_alloc(sizeof(_tTapeDelay), m);
d->maxDelay = maxDelay;
- d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, &m->pool);
+ d->buff = (float*) mpool_alloc(sizeof(float) * maxDelay, m);
d->gain = 1.0f;
@@ -781,8 +781,8 @@
_tMempool* m = *mp;
_tTapeDelay* d = *dl;
- mpool_free(d->buff, &m->pool);
- mpool_free(d, &m->pool);
+ mpool_free(d->buff, m);
+ mpool_free(d, m);
}
void tTapeDelay_clear(tTapeDelay* const dl)
--- a/LEAF/Src/leaf-distortion.c
+++ b/LEAF/Src/leaf-distortion.c
@@ -45,7 +45,7 @@
void tSampleReducer_initToPool (tSampleReducer* const sr, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSampleReducer* s = *sr = (_tSampleReducer*) mpool_alloc(sizeof(_tSampleReducer), &m->pool);
+ _tSampleReducer* s = *sr = (_tSampleReducer*) mpool_alloc(sizeof(_tSampleReducer), m);
s->invRatio = 1.0f;
s->hold = 0.0f;
@@ -57,7 +57,7 @@
_tMempool* m = *mp;
_tSampleReducer* s = *sr;
- mpool_free(s, &m->pool);
+ mpool_free(s, m);
}
float tSampleReducer_tick(tSampleReducer* const sr, float input)
@@ -97,9 +97,9 @@
ratio == 32 || ratio == 64) {
os->ratio = ratio;
int idx = (int)(log2f(os->ratio))-1+offset;
- os->numTaps = firNumTaps[idx];
+ os->numTaps = __leaf_tablesize_firNumTaps[idx];
os->phaseLength = os->numTaps / os->ratio;
- os->pCoeffs = (float*) firCoeffs[idx];
+ os->pCoeffs = (float*) __leaf_tableref_firCoeffs[idx];
os->upState = leaf_alloc(sizeof(float) * os->numTaps * 2);
os->downState = leaf_alloc(sizeof(float) * os->numTaps * 2);
}
@@ -117,7 +117,7 @@
void tOversampler_initToPool (tOversampler* const osr, int ratio, oBool extraQuality, tMempool* const mp)
{
_tMempool* m = *mp;
- _tOversampler* os = *osr = (_tOversampler*) mpool_alloc(sizeof(_tOversampler), &m->pool);
+ _tOversampler* os = *osr = (_tOversampler*) mpool_alloc(sizeof(_tOversampler), m);
uint8_t offset = 0;
if (extraQuality) offset = 6;
@@ -126,11 +126,11 @@
ratio == 32 || ratio == 64) {
os->ratio = ratio;
int idx = (int)(log2f(os->ratio))-1+offset;
- os->numTaps = firNumTaps[idx];
+ os->numTaps = __leaf_tablesize_firNumTaps[idx];
os->phaseLength = os->numTaps / os->ratio;
- os->pCoeffs = (float*) firCoeffs[idx];
- os->upState = mpool_alloc(sizeof(float) * os->numTaps * 2, &m->pool);
- os->downState = mpool_alloc(sizeof(float) * os->numTaps * 2, &m->pool);
+ os->pCoeffs = (float*) __leaf_tableref_firCoeffs[idx];
+ os->upState = mpool_alloc(sizeof(float) * os->numTaps * 2, m);
+ os->downState = mpool_alloc(sizeof(float) * os->numTaps * 2, m);
}
}
@@ -139,9 +139,9 @@
_tMempool* m = *mp;
_tOversampler* os = *osr;
- mpool_free(os->upState, &m->pool);
- mpool_free(os->downState, &m->pool);
- mpool_free(os, &m->pool);
+ mpool_free(os->upState, m);
+ mpool_free(os->downState, m);
+ mpool_free(os, m);
}
float tOversampler_tick(tOversampler* const osr, float input, float (*effectTick)(float))
@@ -385,7 +385,7 @@
void tLockhartWavefolder_initToPool (tLockhartWavefolder* const wf, tMempool* const mp)
{
_tMempool* m = *mp;
- _tLockhartWavefolder* w = *wf = (_tLockhartWavefolder*) mpool_alloc(sizeof(_tLockhartWavefolder), &m->pool);
+ _tLockhartWavefolder* w = *wf = (_tLockhartWavefolder*) mpool_alloc(sizeof(_tLockhartWavefolder), m);
w->Ln1 = 0.0;
w->Fn1 = 0.0;
@@ -412,7 +412,7 @@
_tMempool* m = *mp;
_tLockhartWavefolder* w = *wf;
- mpool_free(w, &m->pool);
+ mpool_free(w, m);
}
double tLockhartWavefolderLambert(double x, double ln)
@@ -511,7 +511,7 @@
void tCrusher_initToPool (tCrusher* const cr, tMempool* const mp)
{
_tMempool* m = *mp;
- _tCrusher* c = *cr = (_tCrusher*) mpool_alloc(sizeof(_tCrusher), &m->pool);
+ _tCrusher* c = *cr = (_tCrusher*) mpool_alloc(sizeof(_tCrusher), m);
c->op = 4;
c->div = SCALAR;
@@ -526,7 +526,7 @@
_tMempool* m = *mp;
_tCrusher* c = *cr;
tSampleReducer_freeFromPool(&c->sReducer, mp);
- mpool_free(c, &m->pool);
+ mpool_free(c, m);
}
float tCrusher_tick (tCrusher* const cr, float input)
--- a/LEAF/Src/leaf-dynamics.c
+++ b/LEAF/Src/leaf-dynamics.c
@@ -66,7 +66,7 @@
void tCompressor_initToPool (tCompressor* const comp, tMempool* const mp)
{
_tMempool* m = *mp;
- _tCompressor* c = *comp = (_tCompressor*) mpool_alloc(sizeof(_tCompressor), &m->pool);
+ _tCompressor* c = *comp = (_tCompressor*) mpool_alloc(sizeof(_tCompressor), m);
c->tauAttack = 100;
c->tauRelease = 100;
@@ -84,7 +84,7 @@
_tMempool* m = *mp;
_tCompressor* c = *comp;
- mpool_free(c, &m->pool);
+ mpool_free(c, m);
}
float tCompressor_tick(tCompressor* const comp, float in)
@@ -160,7 +160,7 @@
void tFeedbackLeveler_initToPool (tFeedbackLeveler* const fb, float targetLevel, float factor, float strength, int mode, tMempool* const mp)
{
_tMempool* m = *mp;
- _tFeedbackLeveler* p = *fb = (_tFeedbackLeveler*) mpool_alloc(sizeof(_tFeedbackLeveler), &m->pool);
+ _tFeedbackLeveler* p = *fb = (_tFeedbackLeveler*) mpool_alloc(sizeof(_tFeedbackLeveler), m);
p->curr=0.0f;
p->targetLevel=targetLevel;
@@ -175,7 +175,7 @@
_tFeedbackLeveler* p = *fb;
tPowerFollower_freeFromPool(&p->pwrFlw, mp);
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
void tFeedbackLeveler_setStrength(tFeedbackLeveler* const fb, float strength)
@@ -219,3 +219,63 @@
p->targetLevel=TargetLevel;
}
+
+
+void tThreshold_init(tThreshold* const th, float low, float high)
+{
+ tThreshold_initToPool(th, low, high, &leaf.mempool);
+}
+
+void tThreshold_free(tThreshold* const th)
+{
+ tThreshold_freeFromPool(th, &leaf.mempool);
+}
+
+void tThreshold_initToPool (tThreshold* const th, float low, float high, tMempool* const mp)
+{
+ _tMempool* m = *mp;
+ _tThreshold* t = *th = (_tThreshold*) mpool_alloc(sizeof(_tThreshold), m);
+
+ t->highThresh = high;
+ t->lowThresh = low;
+
+ t->currentValue = 0;
+}
+
+void tThreshold_freeFromPool(tThreshold* const th, tMempool* const mp)
+{
+ _tMempool* m = *mp;
+ _tThreshold* t = *th;
+
+ mpool_free(t, m);
+}
+
+int tThreshold_tick(tThreshold* const th, float in)
+{
+ _tThreshold* t = *th;
+
+ if (in >= t->highThresh)
+ {
+ t->currentValue = 1;
+ }
+ else if (in <= t->lowThresh)
+ {
+ t->currentValue = 0;
+ }
+
+ return t->currentValue;
+}
+
+void tThreshold_setLow(tThreshold* const th, float low)
+{
+ _tThreshold* t = *th;
+
+ t->lowThresh = low;
+}
+
+void tThreshold_setHigh(tThreshold* const th, float high)
+{
+ _tThreshold* t = *th;
+
+ t->highThresh = high;
+}
--- a/LEAF/Src/leaf-effects.c
+++ b/LEAF/Src/leaf-effects.c
@@ -62,7 +62,7 @@
void tTalkbox_initToPool (tTalkbox* const voc, int bufsize, tMempool* const mp)
{
_tMempool* m = *mp;
- _tTalkbox* v = *voc = (_tTalkbox*) mpool_alloc(sizeof(_tTalkbox), &m->pool);
+ _tTalkbox* v = *voc = (_tTalkbox*) mpool_alloc(sizeof(_tTalkbox), m);
v->param[0] = 0.5f; //wet
v->param[1] = 0.0f; //dry
@@ -71,11 +71,11 @@
v->bufsize = bufsize;
- v->car0 = (float*) mpool_alloc(sizeof(float) * v->bufsize, &m->pool);
- v->car1 = (float*) mpool_alloc(sizeof(float) * v->bufsize, &m->pool);
- v->window = (float*) mpool_alloc(sizeof(float) * v->bufsize, &m->pool);
- v->buf0 = (float*) mpool_alloc(sizeof(float) * v->bufsize, &m->pool);
- v->buf1 = (float*) mpool_alloc(sizeof(float) * v->bufsize, &m->pool);
+ v->car0 = (float*) mpool_alloc(sizeof(float) * v->bufsize, m);
+ v->car1 = (float*) mpool_alloc(sizeof(float) * v->bufsize, m);
+ v->window = (float*) mpool_alloc(sizeof(float) * v->bufsize, m);
+ v->buf0 = (float*) mpool_alloc(sizeof(float) * v->bufsize, m);
+ v->buf1 = (float*) mpool_alloc(sizeof(float) * v->bufsize, m);
tTalkbox_update(voc);
tTalkbox_suspend(voc);
@@ -86,13 +86,13 @@
_tMempool* m = *mp;
_tTalkbox* v = *voc;
- mpool_free(v->buf1, &m->pool);
- mpool_free(v->buf0, &m->pool);
- mpool_free(v->window, &m->pool);
- mpool_free(v->car1, &m->pool);
- mpool_free(v->car0, &m->pool);
+ mpool_free(v->buf1, m);
+ mpool_free(v->buf0, m);
+ mpool_free(v->window, m);
+ mpool_free(v->car1, m);
+ mpool_free(v->car0, m);
- mpool_free(v, &m->pool);
+ mpool_free(v, m);
}
void tTalkbox_update(tTalkbox* const voc) ///update internal parameters...
@@ -297,7 +297,7 @@
void tVocoder_initToPool (tVocoder* const voc, tMempool* const mp)
{
_tMempool* m = *mp;
- _tVocoder* v = *voc = (_tVocoder*) mpool_alloc(sizeof(_tVocoder), &m->pool);
+ _tVocoder* v = *voc = (_tVocoder*) mpool_alloc(sizeof(_tVocoder), m);
v->param[0] = 0.33f; //input select
v->param[1] = 0.50f; //output dB
@@ -316,7 +316,7 @@
_tMempool* m = *mp;
_tVocoder* v = *voc;
- mpool_free(v, &m->pool);
+ mpool_free(v, m);
}
void tVocoder_update (tVocoder* const voc)
@@ -518,10 +518,10 @@
{
_tMempool* m = *mp;
- _tSOLAD* w = *wp = (_tSOLAD*) mpool_calloc(sizeof(_tSOLAD), &m->pool);
+ _tSOLAD* w = *wp = (_tSOLAD*) mpool_calloc(sizeof(_tSOLAD), m);
w->pitchfactor = 1.;
- w->delaybuf = (float*) mpool_calloc(sizeof(float) * (LOOPSIZE+16), &m->pool);
+ w->delaybuf = (float*) mpool_calloc(sizeof(float) * (LOOPSIZE+16), m);
solad_init(w);
}
@@ -531,8 +531,8 @@
_tMempool* m = *mp;
_tSOLAD* w = *wp;
- mpool_free(w->delaybuf, &m->pool);
- mpool_free(w, &m->pool);
+ mpool_free(w->delaybuf, m);
+ mpool_free(w, m);
}
// send one block of input samples, receive one block of output samples
@@ -901,7 +901,7 @@
{
_tMempool* m = *mp;
- _tPitchShift* ps = *psr = (_tPitchShift*) mpool_calloc(sizeof(_tPitchShift), &m->pool);
+ _tPitchShift* ps = *psr = (_tPitchShift*) mpool_calloc(sizeof(_tPitchShift), m);
_tPeriodDetection* p = *pd;
@@ -930,7 +930,7 @@
tSOLAD_freeFromPool(&ps->sola, mp);
tHighpass_freeFromPool(&ps->hp, mp);
- mpool_free(ps, &m->pool);
+ mpool_free(ps, m);
}
void tPitchShift_setPitchFactor(tPitchShift* psr, float pf)
@@ -1052,25 +1052,25 @@
void tRetune_init(tRetune* const rt, int numVoices, int bufSize, int frameSize)
{
- tRetune_initToPool(rt, numVoices, bufSize, frameSize, &leaf_mempool);
+ tRetune_initToPool(rt, numVoices, bufSize, frameSize, &leaf.mempool);
}
void tRetune_free(tRetune* const rt)
{
- tRetune_freeFromPool(rt, &leaf_mempool);
+ tRetune_freeFromPool(rt, &leaf.mempool);
}
void tRetune_initToPool (tRetune* const rt, int numVoices, int bufSize, int frameSize, tMempool* const mp)
{
_tMempool* m = *mp;
- _tRetune* r = *rt = (_tRetune*) mpool_alloc(sizeof(_tRetune), &m->pool);
+ _tRetune* r = *rt = (_tRetune*) mpool_alloc(sizeof(_tRetune), m);
r->bufSize = bufSize;
r->frameSize = frameSize;
r->numVoices = numVoices;
- r->inBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, &m->pool);
- r->outBuffers = (float**) mpool_calloc(sizeof(float*) * r->numVoices, &m->pool);
+ r->inBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
+ r->outBuffers = (float**) mpool_calloc(sizeof(float*) * r->numVoices, m);
r->hopSize = DEFHOPSIZE;
r->windowSize = DEFWINDOWSIZE;
@@ -1079,12 +1079,12 @@
r->inputPeriod = 0.0f;
- r->ps = (tPitchShift*) mpool_calloc(sizeof(tPitchShift) * r->numVoices, &m->pool);
- r->pitchFactor = (float*) mpool_calloc(sizeof(float) * r->numVoices, &m->pool);
- r->tickOutput = (float*) mpool_calloc(sizeof(float) * r->numVoices, &m->pool);
+ r->ps = (tPitchShift*) mpool_calloc(sizeof(tPitchShift) * r->numVoices, m);
+ r->pitchFactor = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
+ r->tickOutput = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
for (int i = 0; i < r->numVoices; ++i)
{
- r->outBuffers[i] = (float*) mpool_calloc(sizeof(float) * r->bufSize, &m->pool);
+ r->outBuffers[i] = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
}
tPeriodDetection_initToPool(&r->pd, r->inBuffer, r->outBuffers[0], r->bufSize, r->frameSize, mp);
@@ -1104,14 +1104,14 @@
for (int i = 0; i < r->numVoices; ++i)
{
tPitchShift_freeFromPool(&r->ps[i], mp);
- mpool_free(r->outBuffers[i], &m->pool);
+ mpool_free(r->outBuffers[i], m);
}
- mpool_free(r->tickOutput, &m->pool);
- mpool_free(r->pitchFactor, &m->pool);
- mpool_free(r->ps, &m->pool);
- mpool_free(r->inBuffer, &m->pool);
- mpool_free(r->outBuffers, &m->pool);
- mpool_free(r, &m->pool);
+ mpool_free(r->tickOutput, m);
+ mpool_free(r->pitchFactor, m);
+ mpool_free(r->ps, m);
+ mpool_free(r->inBuffer, m);
+ mpool_free(r->outBuffers, m);
+ mpool_free(r, m);
}
float* tRetune_tick(tRetune* const rt, float sample)
@@ -1225,25 +1225,25 @@
void tAutotune_init(tAutotune* const rt, int numVoices, int bufSize, int frameSize)
{
- tAutotune_initToPool(rt, numVoices, bufSize, frameSize, &leaf_mempool);
+ tAutotune_initToPool(rt, numVoices, bufSize, frameSize, &leaf.mempool);
}
void tAutotune_free(tAutotune* const rt)
{
- tAutotune_freeFromPool(rt, &leaf_mempool);
+ tAutotune_freeFromPool(rt, &leaf.mempool);
}
void tAutotune_initToPool (tAutotune* const rt, int numVoices, int bufSize, int frameSize, tMempool* const mp)
{
_tMempool* m = *mp;
- _tAutotune* r = *rt = (_tAutotune*) mpool_alloc(sizeof(_tAutotune), &m->pool);
+ _tAutotune* r = *rt = (_tAutotune*) mpool_alloc(sizeof(_tAutotune), m);
r->bufSize = bufSize;
r->frameSize = frameSize;
r->numVoices = numVoices;
- r->inBuffer = (float*) mpool_alloc(sizeof(float) * r->bufSize, &m->pool);
- r->outBuffers = (float**) mpool_alloc(sizeof(float*) * r->numVoices, &m->pool);
+ r->inBuffer = (float*) mpool_alloc(sizeof(float) * r->bufSize, m);
+ r->outBuffers = (float**) mpool_alloc(sizeof(float*) * r->numVoices, m);
r->hopSize = DEFHOPSIZE;
r->windowSize = DEFWINDOWSIZE;
@@ -1250,12 +1250,12 @@
r->fba = FBA;
tAutotune_setTimeConstant(rt, DEFTIMECONSTANT);
- r->ps = (tPitchShift*) mpool_alloc(sizeof(tPitchShift) * r->numVoices, &m->pool);
- r->freq = (float*) mpool_alloc(sizeof(float) * r->numVoices, &m->pool);
- r->tickOutput = (float*) mpool_alloc(sizeof(float) * r->numVoices, &m->pool);
+ r->ps = (tPitchShift*) mpool_alloc(sizeof(tPitchShift) * r->numVoices, m);
+ r->freq = (float*) mpool_alloc(sizeof(float) * r->numVoices, m);
+ r->tickOutput = (float*) mpool_alloc(sizeof(float) * r->numVoices, m);
for (int i = 0; i < r->numVoices; ++i)
{
- r->outBuffers[i] = (float*) mpool_alloc(sizeof(float) * r->bufSize, &m->pool);
+ r->outBuffers[i] = (float*) mpool_alloc(sizeof(float) * r->bufSize, m);
}
tPeriodDetection_initToPool(&r->pd, r->inBuffer, r->outBuffers[0], r->bufSize, r->frameSize, mp);
@@ -1277,14 +1277,14 @@
for (int i = 0; i < r->numVoices; ++i)
{
tPitchShift_freeFromPool(&r->ps[i], mp);
- mpool_free(r->outBuffers[i], &m->pool);
+ mpool_free(r->outBuffers[i], m);
}
- mpool_free(r->tickOutput, &m->pool);
- mpool_free(r->freq, &m->pool);
- mpool_free(r->ps, &m->pool);
- mpool_free(r->inBuffer, &m->pool);
- mpool_free(r->outBuffers, &m->pool);
- mpool_free(r, &m->pool);
+ mpool_free(r->tickOutput, m);
+ mpool_free(r->freq, m);
+ mpool_free(r->ps, m);
+ mpool_free(r->inBuffer, m);
+ mpool_free(r->outBuffers, m);
+ mpool_free(r, m);
}
float* tAutotune_tick(tAutotune* const rt, float sample)
@@ -1453,19 +1453,19 @@
void tFormantShifter_initToPool (tFormantShifter* const fsr, int order, tMempool* const mp)
{
_tMempool* m = *mp;
- _tFormantShifter* fs = *fsr = (_tFormantShifter*) mpool_alloc(sizeof(_tFormantShifter), &m->pool);
+ _tFormantShifter* fs = *fsr = (_tFormantShifter*) mpool_alloc(sizeof(_tFormantShifter), m);
fs->ford = order;
- fs->fk = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->fb = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->fc = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->frb = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->frc = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->fsig = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->fsmooth = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
- fs->ftvec = (float*) mpool_calloc(sizeof(float) * fs->ford, &m->pool);
+ fs->fk = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->fb = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->fc = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->frb = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->frc = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->fsig = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->fsmooth = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
+ fs->ftvec = (float*) mpool_calloc(sizeof(float) * fs->ford, m);
- fs->fbuff = (float*) mpool_calloc(sizeof(float*) * fs->ford, &m->pool);
+ fs->fbuff = (float*) mpool_calloc(sizeof(float*) * fs->ford, m);
fs->falph = powf(0.001f, 10.0f * leaf.invSampleRate);
@@ -1489,20 +1489,20 @@
_tMempool* m = *mp;
_tFormantShifter* fs = *fsr;
- mpool_free(fs->fk, &m->pool);
- mpool_free(fs->fb, &m->pool);
- mpool_free(fs->fc, &m->pool);
- mpool_free(fs->frb, &m->pool);
- mpool_free(fs->frc, &m->pool);
- mpool_free(fs->fsig, &m->pool);
- mpool_free(fs->fsmooth, &m->pool);
- mpool_free(fs->ftvec, &m->pool);
- mpool_free(fs->fbuff, &m->pool);
+ mpool_free(fs->fk, m);
+ mpool_free(fs->fb, m);
+ mpool_free(fs->fc, m);
+ mpool_free(fs->frb, m);
+ mpool_free(fs->frc, m);
+ mpool_free(fs->fsig, m);
+ mpool_free(fs->fsmooth, m);
+ mpool_free(fs->ftvec, m);
+ mpool_free(fs->fbuff, m);
tHighpass_freeFromPool(&fs->hp, mp);
tHighpass_freeFromPool(&fs->hp2, mp);
tFeedbackLeveler_freeFromPool(&fs->fbl1, mp);
tFeedbackLeveler_freeFromPool(&fs->fbl2, mp);
- mpool_free(fs, &m->pool);
+ mpool_free(fs, m);
}
float tFormantShifter_tick(tFormantShifter* const fsr, float in)
--- a/LEAF/Src/leaf-electrical.c
+++ b/LEAF/Src/leaf-electrical.c
@@ -181,7 +181,7 @@
void tWDF_initToPool (tWDF* const wdf, WDFComponentType type, float value, tWDF* const rL, tWDF* const rR, tMempool* const mp)
{
_tMempool* m = *mp;
- *wdf = (_tWDF*) mpool_alloc(sizeof(_tWDF), &m->pool);
+ *wdf = (_tWDF*) mpool_alloc(sizeof(_tWDF), m);
wdf_init(wdf, type, value, rL, rR);
}
@@ -191,7 +191,7 @@
_tMempool* m = *mp;
_tWDF* r = *wdf;
- mpool_free(r, &m->pool);
+ mpool_free(r, m);
}
float tWDF_tick(tWDF* const wdf, float sample, tWDF* const outputPoint, uint8_t paramsChanged)
--- a/LEAF/Src/leaf-envelopes.c
+++ b/LEAF/Src/leaf-envelopes.c
@@ -28,9 +28,9 @@
{
_tEnvelope* env = *envlp = (_tEnvelope*) leaf_alloc(sizeof(_tEnvelope));
- env->exp_buff = exp_decay;
- env->inc_buff = attack_decay_inc;
- env->buff_size = sizeof(exp_decay);
+ env->exp_buff = __leaf_table_exp_decay;
+ env->inc_buff = __leaf_table_attack_decay_inc;
+ env->buff_size = sizeof(__leaf_table_exp_decay);
env->loop = loop;
@@ -73,11 +73,11 @@
void tEnvelope_initToPool (tEnvelope* const envlp, float attack, float decay, oBool loop, tMempool* const mp)
{
_tMempool* m = *mp;
- _tEnvelope* env = *envlp = (_tEnvelope*) mpool_alloc(sizeof(_tEnvelope), &m->pool);
+ _tEnvelope* env = *envlp = (_tEnvelope*) mpool_alloc(sizeof(_tEnvelope), m);
- env->exp_buff = exp_decay;
- env->inc_buff = attack_decay_inc;
- env->buff_size = sizeof(exp_decay);
+ env->exp_buff = __leaf_table_exp_decay;
+ env->inc_buff = __leaf_table_attack_decay_inc;
+ env->buff_size = sizeof(__leaf_table_exp_decay);
env->loop = loop;
@@ -115,7 +115,7 @@
{
_tMempool* m = *mp;
_tEnvelope* env = *envlp;
- mpool_free(env, &m->pool);
+ mpool_free(env, m);
}
void tEnvelope_setAttack(tEnvelope* const envlp, float attack)
@@ -258,9 +258,9 @@
{
_tADSR* adsr = *adsrenv = (_tADSR*) leaf_alloc(sizeof(_tADSR));
- adsr->exp_buff = exp_decay;
- adsr->inc_buff = attack_decay_inc;
- adsr->buff_size = sizeof(exp_decay);
+ adsr->exp_buff = __leaf_table_exp_decay;
+ adsr->inc_buff = __leaf_table_attack_decay_inc;
+ adsr->buff_size = sizeof(__leaf_table_exp_decay);
if (attack > 8192.0f)
attack = 8192.0f;
@@ -323,11 +323,11 @@
void tADSR_initToPool (tADSR* const adsrenv, float attack, float decay, float sustain, float release, tMempool* const mp)
{
_tMempool* m = *mp;
- _tADSR* adsr = *adsrenv = (_tADSR*) mpool_alloc(sizeof(_tADSR), &m->pool);
+ _tADSR* adsr = *adsrenv = (_tADSR*) mpool_alloc(sizeof(_tADSR), m);
- adsr->exp_buff = exp_decay;
- adsr->inc_buff = attack_decay_inc;
- adsr->buff_size = sizeof(exp_decay);
+ adsr->exp_buff = __leaf_table_exp_decay;
+ adsr->inc_buff = __leaf_table_attack_decay_inc;
+ adsr->buff_size = sizeof(__leaf_table_exp_decay);
if (attack > 8192.0f)
attack = 8192.0f;
@@ -383,7 +383,7 @@
{
_tMempool* m = *mp;
_tADSR* adsr = *adsrenv;
- mpool_free(adsr, &m->pool);
+ mpool_free(adsr, m);
}
void tADSR_setAttack(tADSR* const adsrenv, float attack)
@@ -614,7 +614,7 @@
void tRamp_initToPool (tRamp* const r, float time, int samples_per_tick, tMempool* const mp)
{
_tMempool* m = *mp;
- _tRamp* ramp = *r = (_tRamp*) mpool_alloc(sizeof(_tRamp), &m->pool);
+ _tRamp* ramp = *r = (_tRamp*) mpool_alloc(sizeof(_tRamp), m);
ramp->inv_sr_ms = 1.0f/(leaf.sampleRate*0.001f);
ramp->minimum_time = ramp->inv_sr_ms * samples_per_tick;
@@ -639,7 +639,7 @@
_tMempool* m = *mp;
_tRamp* ramp = *r;
- mpool_free(ramp, &m->pool);
+ mpool_free(ramp, m);
}
void tRamp_setTime(tRamp* const ramp, float time)
@@ -723,7 +723,7 @@
void tExpSmooth_initToPool (tExpSmooth* const expsmooth, float val, float factor, tMempool* const mp)
{
_tMempool* m = *mp;
- _tExpSmooth* smooth = *expsmooth = (_tExpSmooth*) mpool_alloc(sizeof(_tExpSmooth), &m->pool);
+ _tExpSmooth* smooth = *expsmooth = (_tExpSmooth*) mpool_alloc(sizeof(_tExpSmooth), m);
smooth->curr=val;
smooth->dest=val;
@@ -738,7 +738,7 @@
_tMempool* m = *mp;
_tExpSmooth* smooth = *expsmooth;
- mpool_free(smooth, &m->pool);
+ mpool_free(smooth, m);
}
void tExpSmooth_setFactor(tExpSmooth* const expsmooth, float factor)
@@ -776,5 +776,63 @@
{
_tExpSmooth* smooth = *expsmooth;
return smooth->curr;
+}
+
+//tSlide is based on the max/msp slide~ object
+////
+
+void tSlide_init (tSlide* const sl, float upSlide, float downSlide)
+{
+ tSlide_initToPool (sl, upSlide, downSlide, &leaf.mempool);
+}
+void tSlide_free (tSlide* const sl)
+{
+ tSlide_freeFromPool (sl, &leaf.mempool);
+}
+void tSlide_initToPool (tSlide* const sl, float upSlide, float downSlide, tMempool* const mp)
+{
+ _tMempool* m = *mp;
+ _tSlide* s = *sl = (_tSlide*) mpool_alloc(sizeof(_tSlide), m);
+ s->prevIn = 0.0f;
+ s->currentOut = 0.0f;
+ s->prevOut = 0.0f;
+ if (upSlide < 1.0f)
+ {
+ upSlide = 1.0f;
+ }
+
+ if (downSlide < 1.0f)
+ {
+ downSlide = 1.0f;
+ }
+ s->invUpSlide = 1.0f / upSlide;
+ s->invDownSlide = 1.0f / downSlide;
+}
+
+void tSlide_freeFromPool (tSlide* const sl, tMempool* const mp)
+{
+ _tMempool* m = *mp;
+ _tSlide* s = *sl;
+
+ mpool_free(s, m);
+}
+
+float tSlide_tick(tSlide* const sl, float in)
+{
+ _tSlide* s = *sl;
+
+
+ if (in >= s->prevOut)
+ {
+ s->currentOut = s->prevOut + ((in - s->prevOut) * s->invUpSlide);
+ }
+ else
+ {
+ s->currentOut = s->prevOut + ((in - s->prevOut) * s->invDownSlide);
+ }
+ if (s->currentOut < VSF) s->currentOut = 0.0f;
+ s->prevIn = in;
+ s->prevOut = s->currentOut;
+ return s->currentOut;
}
--- a/LEAF/Src/leaf-filters.c
+++ b/LEAF/Src/leaf-filters.c
@@ -43,7 +43,7 @@
void tAllpass_initToPool (tAllpass* const ft, float initDelay, uint32_t maxDelay, tMempool* const mp)
{
_tMempool* m = *mp;
- _tAllpass* f = *ft = (_tAllpass*) mpool_alloc(sizeof(_tAllpass), &m->pool);
+ _tAllpass* f = *ft = (_tAllpass*) mpool_alloc(sizeof(_tAllpass), m);
f->gain = 0.7f;
@@ -58,7 +58,7 @@
_tAllpass* f = *ft;
tLinearDelay_freeFromPool(&f->delay, mp);
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
void tAllpass_setDelay(tAllpass* const ft, float delay)
@@ -112,7 +112,7 @@
void tOnePole_initToPool (tOnePole* const ft, float freq, tMempool* const mp)
{
_tMempool* m = *mp;
- _tOnePole* f = *ft = (_tOnePole*) mpool_alloc(sizeof(_tOnePole), &m->pool);
+ _tOnePole* f = *ft = (_tOnePole*) mpool_alloc(sizeof(_tOnePole), m);
f->gain = 1.0f;
f->a0 = 1.0;
@@ -128,7 +128,7 @@
_tMempool* m = *mp;
_tOnePole* f = *ft;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
void tOnePole_setB0(tOnePole* const ft, float b0)
@@ -215,7 +215,7 @@
void tTwoPole_initToPool (tTwoPole* const ft, tMempool* const mp)
{
_tMempool* m = *mp;
- _tTwoPole* f = *ft = (_tTwoPole*) mpool_alloc(sizeof(_tTwoPole), &m->pool);
+ _tTwoPole* f = *ft = (_tTwoPole*) mpool_alloc(sizeof(_tTwoPole), m);
f->gain = 1.0f;
f->a0 = 1.0;
@@ -230,7 +230,7 @@
_tMempool* m = *mp;
_tTwoPole* f = *ft;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
float tTwoPole_tick(tTwoPole* const ft, float input)
@@ -341,7 +341,7 @@
void tOneZero_initToPool (tOneZero* const ft, float theZero, tMempool* const mp)
{
_tMempool* m = *mp;
- _tOneZero* f = *ft = (_tOneZero*) mpool_alloc(sizeof(_tOneZero), &m->pool);
+ _tOneZero* f = *ft = (_tOneZero*) mpool_alloc(sizeof(_tOneZero), m);
f->gain = 1.0f;
f->lastIn = 0.0f;
@@ -354,7 +354,7 @@
_tMempool* m = *mp;
_tOneZero* f = *ft;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
float tOneZero_tick(tOneZero* const ft, float input)
@@ -456,7 +456,7 @@
void tTwoZero_initToPool (tTwoZero* const ft, tMempool* const mp)
{
_tMempool* m = *mp;
- _tTwoZero* f = *ft = (_tTwoZero*) mpool_alloc(sizeof(_tTwoZero), &m->pool);
+ _tTwoZero* f = *ft = (_tTwoZero*) mpool_alloc(sizeof(_tTwoZero), m);
f->gain = 1.0f;
f->lastIn[0] = 0.0f;
@@ -468,7 +468,7 @@
_tMempool* m = *mp;
_tTwoZero* f = *ft;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
float tTwoZero_tick(tTwoZero* const ft, float input)
@@ -564,7 +564,7 @@
void tPoleZero_initToPool (tPoleZero* const pzf, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPoleZero* f = *pzf = (_tPoleZero*) mpool_alloc(sizeof(_tPoleZero), &m->pool);
+ _tPoleZero* f = *pzf = (_tPoleZero*) mpool_alloc(sizeof(_tPoleZero), m);
f->gain = 1.0f;
f->b0 = 1.0;
@@ -579,7 +579,7 @@
_tMempool* m = *mp;
_tPoleZero* f = *pzf;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
void tPoleZero_setB0(tPoleZero* const pzf, float b0)
@@ -695,7 +695,7 @@
void tBiQuad_initToPool (tBiQuad* const ft, tMempool* const mp)
{
_tMempool* m = *mp;
- _tBiQuad* f = *ft = (_tBiQuad*) mpool_alloc(sizeof(_tBiQuad), &m->pool);
+ _tBiQuad* f = *ft = (_tBiQuad*) mpool_alloc(sizeof(_tBiQuad), m);
f->gain = 1.0f;
@@ -713,7 +713,7 @@
_tMempool* m = *mp;
_tBiQuad* f = *ft;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
float tBiQuad_tick(tBiQuad* const ft, float input)
@@ -867,7 +867,7 @@
void tSVF_initToPool (tSVF* const svff, SVFType type, float freq, float Q, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSVF* svf = *svff = (_tSVF*) mpool_alloc(sizeof(_tSVF), &m->pool);
+ _tSVF* svf = *svff = (_tSVF*) mpool_alloc(sizeof(_tSVF), m);
svf->type = type;
@@ -886,7 +886,7 @@
_tMempool* m = *mp;
_tSVF* svf = *svff;
- mpool_free(svf, &m->pool);
+ mpool_free(svf, m);
}
float tSVF_tick(tSVF* const svff, float v0)
@@ -939,7 +939,7 @@
svf->ic1eq = 0;
svf->ic2eq = 0;
- svf->g = filtertan[input];
+ svf->g = __leaf_table_filtertan[input];
svf->k = 1.0f/Q;
svf->a1 = 1.0f/(1.0f+svf->g*(svf->g+svf->k));
svf->a2 = svf->g*svf->a1;
@@ -956,7 +956,7 @@
void tEfficientSVF_initToPool (tEfficientSVF* const svff, SVFType type, uint16_t input, float Q, tMempool* const mp)
{
_tMempool* m = *mp;
- _tEfficientSVF* svf = *svff = (_tEfficientSVF*) mpool_alloc(sizeof(_tEfficientSVF), &m->pool);
+ _tEfficientSVF* svf = *svff = (_tEfficientSVF*) mpool_alloc(sizeof(_tEfficientSVF), m);
svf->type = type;
@@ -963,7 +963,7 @@
svf->ic1eq = 0;
svf->ic2eq = 0;
- svf->g = filtertan[input];
+ svf->g = __leaf_table_filtertan[input];
svf->k = 1.0f/Q;
svf->a1 = 1.0f/(1.0f+svf->g*(svf->g+svf->k));
svf->a2 = svf->g*svf->a1;
@@ -975,7 +975,7 @@
_tMempool* m = *mp;
_tEfficientSVF* svf = *svff;
- mpool_free(svf, &m->pool);
+ mpool_free(svf, m);
}
float tEfficientSVF_tick(tEfficientSVF* const svff, float v0)
@@ -1002,7 +1002,7 @@
{
_tEfficientSVF* svf = *svff;
- svf->g = filtertan[input];
+ svf->g = __leaf_table_filtertan[input];
svf->a1 = 1.0f/(1.0f + svf->g * (svf->g + svf->k));
svf->a2 = svf->g * svf->a1;
svf->a3 = svf->g * svf->a2;
@@ -1040,7 +1040,7 @@
void tHighpass_initToPool (tHighpass* const ft, float freq, tMempool* const mp)
{
_tMempool* m = *mp;
- _tHighpass* f = *ft = (_tHighpass*) mpool_calloc(sizeof(_tHighpass), &m->pool);
+ _tHighpass* f = *ft = (_tHighpass*) mpool_calloc(sizeof(_tHighpass), m);
f->R = (1.0f - (freq * leaf.twoPiTimesInvSampleRate));
f->ys = 0.0f;
@@ -1054,7 +1054,7 @@
_tMempool* m = *mp;
_tHighpass* f = *ft;
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
void tHighpass_setFreq(tHighpass* const ft, float freq)
@@ -1121,7 +1121,7 @@
void tButterworth_initToPool (tButterworth* const ft, int N, float f1, float f2, tMempool* const mp)
{
_tMempool* m = *mp;
- _tButterworth* f = *ft = (_tButterworth*) mpool_alloc(sizeof(_tButterworth), &m->pool);
+ _tButterworth* f = *ft = (_tButterworth*) mpool_alloc(sizeof(_tButterworth), m);
f->f1 = f1;
f->f2 = f2;
@@ -1149,7 +1149,7 @@
tSVF_freeFromPool(&f->high[i], mp);
}
- mpool_free(f, &m->pool);
+ mpool_free(f, m);
}
float tButterworth_tick(tButterworth* const ft, float samp)
@@ -1214,11 +1214,11 @@
void tFIR_initToPool (tFIR* const firf, float* coeffs, int numTaps, tMempool* const mp)
{
_tMempool* m = *mp;
- _tFIR* fir = *firf = (_tFIR*) mpool_alloc(sizeof(_tFIR), &m->pool);
+ _tFIR* fir = *firf = (_tFIR*) mpool_alloc(sizeof(_tFIR), m);
fir->numTaps = numTaps;
fir->coeff = coeffs;
- fir->past = (float*) mpool_alloc(sizeof(float) * fir->numTaps, &m->pool);
+ fir->past = (float*) mpool_alloc(sizeof(float) * fir->numTaps, m);
for (int i = 0; i < fir->numTaps; ++i) fir->past[i] = 0.0f;
}
@@ -1227,8 +1227,8 @@
_tMempool* m = *mp;
_tFIR* fir = *firf;
- mpool_free(fir->past, &m->pool);
- mpool_free(fir, &m->pool);
+ mpool_free(fir->past, m);
+ mpool_free(fir, m);
}
float tFIR_tick(tFIR* const firf, float input)
@@ -1241,3 +1241,86 @@
for (int i = fir->numTaps-1; i > 0; --i) fir->past[i] = fir->past[i-1];
return y;
}
+
+//---------------------------------------------
+////
+/// Median filter implemented based on James McCartney's median filter in Supercollider,
+/// translated from a Gen~ port of the Supercollider code that I believe was made by Rodrigo Costanzo and which I got from PA Tremblay - JS
+
+
+void tMedianFilter_init (tMedianFilter* const f, int size)
+{
+ tMedianFilter_initToPool(f, size, &leaf.mempool);
+}
+void tMedianFilter_free (tMedianFilter* const f)
+{
+ tMedianFilter_freeFromPool(f, &leaf.mempool);
+}
+void tMedianFilter_initToPool (tMedianFilter* const mf, int size, tMempool* const mp)
+{
+ _tMempool* m = *mp;
+ _tMedianFilter* f = *mf = (_tMedianFilter*) mpool_alloc(sizeof(_tMedianFilter), m);
+
+ f->size = size;
+ f->middlePosition = size / 2;
+ f->last = size - 1;
+ f->pos = -1;
+ f->val = (float*) mpool_alloc(sizeof(float) * size, m);
+ f->age = (int*) mpool_alloc(sizeof(int) * size, m);
+ for (int i = 0; i < f->size; ++i)
+ {
+ f->val[i] = 0.0f;
+ f->age[i] = i;
+ }
+
+}
+void tMedianFilter_freeFromPool (tMedianFilter* const mf, tMempool* const mp)
+{
+ _tMempool* m = *mp;
+ _tMedianFilter* f = *mf;
+
+ mpool_free(f->val, m);
+ mpool_free(f->age, m);
+ mpool_free(f, m);
+}
+
+float tMedianFilter_tick (tMedianFilter* const mf, float input)
+{
+ _tMedianFilter* f = *mf;
+
+ for(int i=0; i<f->size; i++) {
+ int thisAge = f->age[i];
+ if(thisAge == f->last) {
+ f->pos = i;
+ }
+ else {
+ thisAge++;
+ f->age[i] = thisAge;
+ }
+ }
+
+ while( f->pos!=0 ) {
+ float test = f->val[f->pos-1];
+ if(input < test) {
+ f->val[f->pos]=test;
+ f->age[f->pos]=f->age[f->pos-1];
+ f->pos -= 1;
+ } else {break;}
+ }
+
+ while(f->pos != f->last) {
+ float test = f->val[f->pos+1];
+ if( input > test) {
+ f->val[f->pos] = test;
+ f->age[f->pos] = f->age[f->pos+1];
+ f->pos += 1;
+ } else {break;}
+ }
+
+ f->val[f->pos] = input;
+ f->age[f->pos] = 0;
+
+ return f->val[f->middlePosition];
+}
+
+
--- a/LEAF/Src/leaf-instruments.c
+++ b/LEAF/Src/leaf-instruments.c
@@ -66,7 +66,7 @@
void t808Cowbell_initToPool (t808Cowbell* const cowbellInst, int useStick, tMempool* const mp)
{
_tMempool* m = *mp;
- _t808Cowbell* cowbell = *cowbellInst = (_t808Cowbell*) mpool_alloc(sizeof(_t808Cowbell), &m->pool);
+ _t808Cowbell* cowbell = *cowbellInst = (_t808Cowbell*) mpool_alloc(sizeof(_t808Cowbell), m);
tSquare_initToPool(&cowbell->p[0], mp);
tSquare_setFreq(&cowbell->p[0], 540.0f);
@@ -107,7 +107,7 @@
tHighpass_freeFromPool(&cowbell->highpass, mp);
tNoise_freeFromPool(&cowbell->stick, mp);
tEnvelope_freeFromPool(&cowbell->envStick, mp);
- mpool_free(cowbell, &m->pool);
+ mpool_free(cowbell, m);
}
void t808Cowbell_on(t808Cowbell* const cowbellInst, float vel)
@@ -242,7 +242,7 @@
void t808Hihat_initToPool (t808Hihat* const hihatInst, tMempool* const mp)
{
_tMempool* m = *mp;
- _t808Hihat* hihat = *hihatInst = (_t808Hihat*) mpool_alloc(sizeof(_t808Hihat), &m->pool);
+ _t808Hihat* hihat = *hihatInst = (_t808Hihat*) mpool_alloc(sizeof(_t808Hihat), m);
for (int i = 0; i < 6; i++)
{
@@ -294,7 +294,7 @@
tHighpass_freeFromPool(&hihat->highpass, mp);
- mpool_free(hihat, &m->pool);
+ mpool_free(hihat, m);
}
void t808Hihat_on(t808Hihat* const hihatInst, float vel)
@@ -454,7 +454,7 @@
void t808Snare_initToPool (t808Snare* const snareInst, tMempool* const mp)
{
_tMempool* m = *mp;
- _t808Snare* snare = *snareInst = (_t808Snare*) mpool_alloc(sizeof(_t808Snare), &m->pool);
+ _t808Snare* snare = *snareInst = (_t808Snare*) mpool_alloc(sizeof(_t808Snare), m);
float ratio[2] = {1.0, 1.5};
for (int i = 0; i < 2; i++)
@@ -499,7 +499,7 @@
tEnvelope_freeFromPool(&snare->noiseEnvGain, mp);
tEnvelope_freeFromPool(&snare->noiseEnvFilter, mp);
- mpool_free(snare, &m->pool);
+ mpool_free(snare, m);
}
void t808Snare_on(t808Snare* const snareInst, float vel)
@@ -629,7 +629,7 @@
void t808Kick_initToPool (t808Kick* const kickInst, tMempool* const mp)
{
_tMempool* m = *mp;
- _t808Kick* kick = *kickInst = (_t808Kick*) mpool_alloc(sizeof(_t808Kick), &m->pool);
+ _t808Kick* kick = *kickInst = (_t808Kick*) mpool_alloc(sizeof(_t808Kick), m);
tCycle_initToPool(&kick->tone, mp);
kick->toneInitialFreq = 40.0f;
@@ -658,7 +658,7 @@
tNoise_freeFromPool(&kick->noiseOsc, mp);
tEnvelope_freeFromPool(&kick->noiseEnvGain, mp);
- mpool_free(kick, &m->pool);
+ mpool_free(kick, m);
}
float t808Kick_tick (t808Kick* const kickInst)
--- a/LEAF/Src/leaf-math.c
+++ b/LEAF/Src/leaf-math.c
@@ -18,11 +18,28 @@
#endif
-// The C-embedded Audio Library.
-#define TWO_TO_16 65536.f
#define EXPONENTIAL_TABLE_SIZE 65536
+#define log10f_fast(x) (log2f_approx(x)*0.3010299956639812f)
+
+// This is a fast approximation to log2() found on http://openaudio.blogspot.com/2017/02/faster-log10-and-pow.html credited to this post https://community.arm.com/developer/tools-software/tools/f/armds-forum/4292/cmsis-dsp-new-functionality-proposal/22621#22621
+// Y = C[0]*F*F*F + C[1]*F*F + C[2]*F + C[3] + E;
+float log2f_approx(float X) {
+ float Y, F;
+ int E;
+ F = frexpf(fabsf(X), &E);
+ Y = 1.23149591368684f;
+ Y *= F;
+ Y += -4.11852516267426f;
+ Y *= F;
+ Y += 6.02197014179219f;
+ Y *= F;
+ Y += -3.13396450166353f;
+ Y += E;
+ return(Y);
+}
+
float interpolate3max(float *buf, const int peakindex)
{
float a = buf[peakindex-1];
@@ -190,11 +207,12 @@
return roundf(input * scale) / scale;
}
-union unholy_t unholy;
+
float LEAF_bitwise_xor(float input, uint32_t op)
{
- unholy.f = input;
+ union unholy_t unholy;
+ unholy.f = input;
unholy.i = (unholy.i ^ op);
return unholy.f;
@@ -444,8 +462,8 @@
if (f <= 0) return (0);
else
{
- float val = 100 + 10.f/LOGTEN * logf(f);
- return (val < 0 ? 0 : val);
+ float val = 100.0f + 10.0f/LOGTEN * logf(f);
+ return (val < 0.0f ? 0.0f : val);
}
}
@@ -482,4 +500,18 @@
}
return (expf((LOGTEN * 0.05f) * (f-100.0f)));
}
+
+
+float atodb(float a)
+{
+ return 20.0f*log10f(a);
+}
+
+float dbtoa(float db)
+{
+ return powf(10.0f, db * 0.05f);
+ //return expf(0.115129254649702f * db); //faster version from http://openaudio.blogspot.com/2017/02/faster-log10-and-pow.html
+}
+
+
--- a/LEAF/Src/leaf-mempool.c
+++ b/LEAF/Src/leaf-mempool.c
@@ -48,11 +48,6 @@
#endif
-_tMempool leaf_pool;
-tMempool leaf_mempool;
-size_t header_size;
-
-
/**
* private function
*/
@@ -63,33 +58,33 @@
/**
* create memory pool
*/
-void mpool_create (char* memory, size_t size, mpool_t* pool)
+void mpool_create (char* memory, size_t size, _tMempool* pool)
{
- header_size = mpool_align(sizeof(mpool_node_t));
+ leaf.header_size = mpool_align(sizeof(mpool_node_t));
pool->mpool = (void*)memory;
pool->usize = 0;
pool->msize = size;
- pool->head = create_node(pool->mpool, NULL, NULL, pool->msize-header_size);
+ pool->head = create_node(pool->mpool, NULL, NULL, pool->msize-leaf.header_size);
for (int i = 0; i < pool->head->size; i++)
{
- memory[i+header_size]=0;
+ memory[i+leaf.header_size]=0;
}
}
void leaf_pool_init(char* memory, size_t size)
{
- mpool_create(memory, size, &leaf_pool.pool);
+ mpool_create(memory, size, &leaf._mempool);
- leaf_mempool = &leaf_pool;
+ leaf.mempool = &leaf._mempool;
}
/**
* allocate memory from memory pool
*/
-void* mpool_alloc(size_t asize, mpool_t* pool)
+void* mpool_alloc(size_t asize, _tMempool* pool)
{
// If the head is NULL, the mempool is full
if (pool->head == NULL) return NULL;
@@ -112,14 +107,14 @@
mpool_node_t* new_node;
size_t leftover = node_to_alloc->size - size_to_alloc;
node_to_alloc->size = size_to_alloc;
- if (leftover > header_size)
+ if (leftover > leaf.header_size)
{
long offset = (char*) node_to_alloc - (char*) pool->mpool;
- offset += header_size + node_to_alloc->size;
+ offset += leaf.header_size + node_to_alloc->size;
new_node = create_node(&pool->mpool[offset],
node_to_alloc->next,
node_to_alloc->prev,
- leftover - header_size);
+ leftover - leaf.header_size);
}
else
{
@@ -139,7 +134,7 @@
// Remove the allocated node from the free list
delink_node(node_to_alloc);
- pool->usize += header_size + node_to_alloc->size;
+ pool->usize += leaf.header_size + node_to_alloc->size;
if (leaf.clearOnAllocation > 0)
{
@@ -155,7 +150,7 @@
/**
* allocate memory from memory pool and also clear that memory to be blank
*/
-void* mpool_calloc(size_t asize, mpool_t* pool)
+void* mpool_calloc(size_t asize, _tMempool* pool)
{
// If the head is NULL, the mempool is full
if (pool->head == NULL) return NULL;
@@ -178,14 +173,14 @@
mpool_node_t* new_node;
size_t leftover = node_to_alloc->size - size_to_alloc;
node_to_alloc->size = size_to_alloc;
- if (leftover > header_size)
+ if (leftover > leaf.header_size)
{
long offset = (char*) node_to_alloc - (char*) pool->mpool;
- offset += header_size + node_to_alloc->size;
+ offset += leaf.header_size + node_to_alloc->size;
new_node = create_node(&pool->mpool[offset],
node_to_alloc->next,
node_to_alloc->prev,
- leftover - header_size);
+ leftover - leaf.header_size);
}
else
{
@@ -205,7 +200,7 @@
// Remove the allocated node from the free list
delink_node(node_to_alloc);
- pool->usize += header_size + node_to_alloc->size;
+ pool->usize += leaf.header_size + node_to_alloc->size;
// Format the new pool
char* new_pool = (char*)node_to_alloc->pool;
for (int i = 0; i < node_to_alloc->size; i++) new_pool[i] = 0;
@@ -216,7 +211,7 @@
void* leaf_alloc(size_t size)
{
//printf("alloc %i\n", size);
- void* block = mpool_alloc(size, &leaf_pool.pool);
+ void* block = mpool_alloc(size, &leaf._mempool);
if (block == NULL) leaf_mempool_overrun();
@@ -226,7 +221,7 @@
void* leaf_calloc(size_t size)
{
//printf("alloc %i\n", size);
- void* block = mpool_calloc(size, &leaf_pool.pool);
+ void* block = mpool_calloc(size, &leaf._mempool);
if (block == NULL) leaf_mempool_overrun();
@@ -234,13 +229,13 @@
return block;
}
-void mpool_free(void* ptr, mpool_t* pool)
+void mpool_free(void* ptr, _tMempool* pool)
{
//if (ptr < pool->mpool || ptr >= pool->mpool + pool->msize)
// Get the node at the freed space
- mpool_node_t* freed_node = (mpool_node_t*) (ptr - header_size);
+ mpool_node_t* freed_node = (mpool_node_t*) (ptr - leaf.header_size);
- pool->usize -= header_size + freed_node->size;
+ pool->usize -= leaf.header_size + freed_node->size;
// Check each node in the list against the newly freed one to see if it's adjacent in memory
mpool_node_t* other_node = pool->head;
@@ -249,10 +244,10 @@
{
next_node = other_node->next;
// Check if a node is directly after the freed node
- if ((long) freed_node + (header_size + freed_node->size) == (long) other_node)
+ if ((long) freed_node + (leaf.header_size + freed_node->size) == (long) other_node)
{
// Increase freed node's size
- freed_node->size += header_size + other_node->size;
+ freed_node->size += leaf.header_size + other_node->size;
// If we are merging with the head, move the head forward
if (other_node == pool->head) pool->head = pool->head->next;
// Delink the merged node
@@ -260,10 +255,10 @@
}
// Check if a node is directly before the freed node
- else if ((long) other_node + (header_size + other_node->size) == (long) freed_node)
+ else if ((long) other_node + (leaf.header_size + other_node->size) == (long) freed_node)
{
// Increase the merging node's size
- other_node->size += header_size + freed_node->size;
+ other_node->size += leaf.header_size + freed_node->size;
if (other_node != pool->head)
{
@@ -298,15 +293,15 @@
void leaf_free(void* ptr)
{
- mpool_free(ptr, &leaf_pool.pool);
+ mpool_free(ptr, &leaf._mempool);
}
-size_t mpool_get_size(mpool_t* pool)
+size_t mpool_get_size(_tMempool* pool)
{
return pool->msize;
}
-size_t mpool_get_used(mpool_t* pool)
+size_t mpool_get_used(_tMempool* pool)
{
return pool->usize;
}
@@ -313,17 +308,17 @@
size_t leaf_pool_get_size(void)
{
- return mpool_get_size(&leaf_pool.pool);
+ return mpool_get_size(&leaf._mempool);
}
size_t leaf_pool_get_used(void)
{
- return mpool_get_used(&leaf_pool.pool);
+ return mpool_get_used(&leaf._mempool);
}
void* leaf_pool_get_pool(void)
{
- float* buff = (float*)leaf_pool.pool.mpool;
+ float* buff = (float*)leaf._mempool.mpool;
return buff;
}
@@ -338,7 +333,7 @@
static inline mpool_node_t* create_node(void* block_location, mpool_node_t* next, mpool_node_t* prev, size_t size)
{
mpool_node_t* node = (mpool_node_t*)block_location;
- node->pool = block_location + header_size;
+ node->pool = block_location + leaf.header_size;
node->next = next;
node->prev = prev;
node->size = size;
@@ -372,20 +367,20 @@
void tMempool_init(tMempool* const mp, char* memory, size_t size)
{
- tMempool_initToPool(mp, memory, size, &leaf_mempool);
+ tMempool_initToPool(mp, memory, size, &leaf.mempool);
}
void tMempool_free(tMempool* const mp)
{
- tMempool_freeFromPool(mp, &leaf_mempool);
+ tMempool_freeFromPool(mp, &leaf.mempool);
}
void tMempool_initToPool (tMempool* const mp, char* memory, size_t size, tMempool* const mem)
{
_tMempool* mm = *mem;
- _tMempool* m = *mp = (_tMempool*) mpool_alloc(sizeof(_tMempool), &mm->pool);
+ _tMempool* m = *mp = (_tMempool*) mpool_alloc(sizeof(_tMempool), mm);
- mpool_create (memory, size, &m->pool);
+ mpool_create (memory, size, m);
}
void tMempool_freeFromPool (tMempool* const mp, tMempool* const mem)
@@ -393,5 +388,5 @@
_tMempool* mm = *mem;
_tMempool* m = *mp;
- mpool_free(m, &mm->pool);
+ mpool_free(m, mm);
}
--- a/LEAF/Src/leaf-midi.c
+++ b/LEAF/Src/leaf-midi.c
@@ -42,7 +42,7 @@
void tStack_initToPool (tStack* const stack, tMempool* const mp)
{
_tMempool* m = *mp;
- _tStack* ns = *stack = (_tStack*) mpool_alloc(sizeof(_tStack), &m->pool);
+ _tStack* ns = *stack = (_tStack*) mpool_alloc(sizeof(_tStack), m);
ns->ordered = OFALSE;
ns->size = 0;
@@ -57,7 +57,7 @@
_tMempool* m = *mp;
_tStack* ns = *stack;
- mpool_free(ns, &m->pool);
+ mpool_free(ns, m);
}
// If stack contains note, returns index. Else returns -1;
@@ -339,7 +339,7 @@
void tPoly_initToPool (tPoly* const polyh, int maxNumVoices, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPoly* poly = *polyh = (_tPoly*) mpool_alloc(sizeof(_tPoly), &m->pool);
+ _tPoly* poly = *polyh = (_tPoly*) mpool_alloc(sizeof(_tPoly), m);
poly->numVoices = maxNumVoices;
poly->maxNumVoices = maxNumVoices;
@@ -359,14 +359,14 @@
poly->glideTime = 5.0f;
- poly->ramps = (tRamp*) mpool_alloc(sizeof(tRamp) * poly->maxNumVoices, &m->pool);
- poly->rampVals = (float*) mpool_alloc(sizeof(float) * poly->maxNumVoices, &m->pool);
- poly->firstReceived = (oBool*) mpool_alloc(sizeof(oBool) * poly->maxNumVoices, &m->pool);
- poly->voices = (int**) mpool_alloc(sizeof(int*) * poly->maxNumVoices, &m->pool);
+ poly->ramps = (tRamp*) mpool_alloc(sizeof(tRamp) * poly->maxNumVoices, m);
+ poly->rampVals = (float*) mpool_alloc(sizeof(float) * poly->maxNumVoices, m);
+ poly->firstReceived = (oBool*) mpool_alloc(sizeof(oBool) * poly->maxNumVoices, m);
+ poly->voices = (int**) mpool_alloc(sizeof(int*) * poly->maxNumVoices, m);
for (int i = 0; i < poly->maxNumVoices; ++i)
{
- poly->voices[i] = (int*) mpool_alloc(sizeof(int) * 2, &m->pool);
+ poly->voices[i] = (int*) mpool_alloc(sizeof(int) * 2, m);
poly->voices[i][0] = -1;
poly->firstReceived[i] = OFALSE;
@@ -390,18 +390,18 @@
for (int i = 0; i < poly->maxNumVoices; i++)
{
tRamp_freeFromPool(&poly->ramps[i], mp);
- mpool_free(poly->voices[i], &m->pool);
+ mpool_free(poly->voices[i], m);
}
tRamp_freeFromPool(&poly->pitchBendRamp, mp);
tStack_freeFromPool(&poly->stack, mp);
tStack_freeFromPool(&poly->orderStack, mp);
- mpool_free(poly->voices, &m->pool);
- mpool_free(poly->ramps, &m->pool);
- mpool_free(poly->rampVals, &m->pool);
- mpool_free(poly->firstReceived, &m->pool);
+ mpool_free(poly->voices, m);
+ mpool_free(poly->ramps, m);
+ mpool_free(poly->rampVals, m);
+ mpool_free(poly->firstReceived, m);
- mpool_free(poly, &m->pool);
+ mpool_free(poly, m);
}
void tPoly_tickPitch(tPoly* polyh)
--- a/LEAF/Src/leaf-oscillators.c
+++ b/LEAF/Src/leaf-oscillators.c
@@ -6,13 +6,11 @@
#if _WIN32 || _WIN64
-#include "..\Inc\leaf-tables.h"
#include "..\Inc\leaf-oscillators.h"
#include "..\leaf.h"
#else
-#include "../Inc/leaf-tables.h"
#include "../Inc/leaf-oscillators.h"
#include "../leaf.h"
@@ -21,24 +19,18 @@
// Cycle
void tCycle_init(tCycle* const cy)
{
- _tCycle* c = *cy = (_tCycle*) leaf_alloc(sizeof(_tCycle));
-
- c->inc = 0.0f;
- c->phase = 0.0f;
-
+ tCycle_initToPool(cy, &leaf.mempool);
}
void tCycle_free(tCycle* const cy)
{
- _tCycle* c = *cy;
-
- leaf_free(c);
+ tCycle_freeFromPool(cy, &leaf.mempool);
}
void tCycle_initToPool (tCycle* const cy, tMempool* const mp)
{
_tMempool* m = *mp;
- _tCycle* c = *cy = (_tCycle*) mpool_alloc(sizeof(_tCycle), &m->pool);
+ _tCycle* c = *cy = (_tCycle*) mpool_alloc(sizeof(_tCycle), m);
c->inc = 0.0f;
c->phase = 0.0f;
@@ -50,17 +42,18 @@
_tMempool* m = *mp;
_tCycle* c = *cy;
- mpool_free(c, &m->pool);
+ mpool_free(c, m);
}
-int tCycle_setFreq(tCycle* const cy, float freq)
+void tCycle_setFreq(tCycle* const cy, float freq)
{
_tCycle* c = *cy;
- c->freq = freq;
+ if (freq < 0.0f) c->freq = 0.0f;
+ else if (freq > 20480.0f) c->freq = 20480.0f;
+ else c->freq = freq;
+
c->inc = freq * leaf.invSampleRate;
-
- return 0;
}
//need to check bounds and wrap table properly to allow through-zero FM
@@ -76,7 +69,7 @@
// Phasor increment
c->phase += c->inc;
while (c->phase >= 1.0f) c->phase -= 1.0f;
- while (c->phase <= 0.0f) c->phase += 1.0f;
+ while (c->phase < 0.0f) c->phase += 1.0f;
// Wavetable synthesis
@@ -83,9 +76,9 @@
temp = SINE_TABLE_SIZE * c->phase;
intPart = (int)temp;
fracPart = temp - (float)intPart;
- samp0 = sinewave[intPart];
+ samp0 = __leaf_table_sinewave[intPart];
if (++intPart >= SINE_TABLE_SIZE) intPart = 0;
- samp1 = sinewave[intPart];
+ samp1 = __leaf_table_sinewave[intPart];
return (samp0 + (samp1 - samp0) * fracPart);
@@ -102,26 +95,22 @@
/* Triangle */
void tTriangle_init(tTriangle* const cy)
{
- _tTriangle* c = *cy = (_tTriangle*) leaf_alloc(sizeof(_tTriangle));
-
- c->inc = 0.0f;
- c->phase = 0.0f;
+ tTriangle_initToPool(cy, &leaf.mempool);
}
void tTriangle_free(tTriangle* const cy)
{
- _tTriangle* c = *cy;
-
- leaf_free(c);
+ tTriangle_freeFromPool(cy, &leaf.mempool);
}
void tTriangle_initToPool (tTriangle* const cy, tMempool* const mp)
{
_tMempool* m = *mp;
- _tTriangle* c = *cy = (_tTriangle*) mpool_alloc(sizeof(_tTriangle), &m->pool);
+ _tTriangle* c = *cy = (_tTriangle*) mpool_alloc(sizeof(_tTriangle), m);
c->inc = 0.0f;
c->phase = 0.0f;
+ tTriangle_setFreq(cy, 220);
}
void tTriangle_freeFromPool (tTriangle* const cy, tMempool* const mp)
@@ -129,19 +118,25 @@
_tMempool* m = *mp;
_tTriangle* c = *cy;
- mpool_free(c, &m->pool);
+ mpool_free(c, m);
}
-int tTriangle_setFreq(tTriangle* const cy, float freq)
+void tTriangle_setFreq(tTriangle* const cy, float freq)
{
_tTriangle* c = *cy;
- if (freq < 0.0f) freq = 0.0f;
+ if (freq < 0.0f) c->freq = 0.0f;
+ else if (freq > 20480.0f) c->freq = 20480.0f;
+ else c->freq = freq;
- c->freq = freq;
- c->inc = freq * leaf.invSampleRate;
+ c->inc = c->freq * leaf.invSampleRate;
- return 0;
+ c->w = c->freq * INV_20;
+ for (c->oct = 0; c->w > 2.0f; c->oct++)
+ {
+ c->w = 0.5f * c->w;
+ }
+ c->w = 2.0f - c->w;
}
@@ -152,73 +147,16 @@
// Phasor increment
c->phase += c->inc;
while (c->phase >= 1.0f) c->phase -= 1.0f;
+ while (c->phase < 0.0f) c->phase += 1.0f;
float out = 0.0f;
- float w;
int idx = (int)(c->phase * TRI_TABLE_SIZE);
// Wavetable synthesis
+ out = __leaf_table_triangle[c->oct+1][idx] +
+ (__leaf_table_triangle[c->oct][idx] - __leaf_table_triangle[c->oct+1][idx]) * c->w;
- if (c->freq <= 20.0f)
- {
- out = triangle[T20][idx];
- }
- else if (c->freq <= 40.0f)
- {
- w = ((40.0f - c->freq) * INV_20);
- out = (triangle[T20][idx] * w) + (triangle[T40][idx] * (1.0f - w));
- }
- else if (c->freq <= 80.0f)
- {
- w = ((80.0f - c->freq) * INV_40);
- out = (triangle[T40][idx] * w) + (triangle[T80][idx] * (1.0f - w));
- }
- else if (c->freq <= 160.0f)
- {
- w = ((160.0f - c->freq) * INV_80);
- out = (triangle[T80][idx] * w) + (triangle[T160][idx] * (1.0f - w));
- }
- else if (c->freq <= 320.0f)
- {
- w = ((320.0f - c->freq) * INV_160);
- out = (triangle[T160][idx] * w) + (triangle[T320][idx] * (1.0f - w));
- }
- else if (c->freq <= 640.0f)
- {
- w = ((640.0f - c->freq) * INV_320);
- out = (triangle[T320][idx] * w) + (triangle[T640][idx] * (1.0f - w));
- }
- else if (c->freq <= 1280.0f)
- {
- w = ((1280.0f - c->freq) * INV_640);
- out = (triangle[T640][idx] * w) + (triangle[T1280][idx] * (1.0f - w));
- }
- else if (c->freq <= 2560.0f)
- {
- w = ((2560.0f - c->freq) * INV_1280);
- out = (triangle[T1280][idx] * w) + (triangle[T2560][idx] * (1.0f - w));
- }
- else if (c->freq <= 5120.0f)
- {
- w = ((5120.0f - c->freq) * INV_2560);
- out = (triangle[T2560][idx] * w) + (triangle[T5120][idx] * (1.0f - w));
- }
- else if (c->freq <= 10240.0f)
- {
- w = ((10240.0f - c->freq) * INV_5120);
- out = (triangle[T5120][idx] * w) + (triangle[T10240][idx] * (1.0f - w));
- }
- else if (c->freq <= 20480.0f)
- {
- w = ((20480.0f - c->freq) * INV_10240);
- out = (triangle[T10240][idx] * w) + (triangle[T20480][idx] * (1.0f - w));
- }
- else
- {
- out = triangle[T20480][idx];
- }
-
return out;
}
@@ -233,26 +171,22 @@
/* Square */
void tSquare_init(tSquare* const cy)
{
- _tSquare* c = *cy = (_tSquare*) leaf_alloc(sizeof(_tSquare));
-
- c->inc = 0.0f;
- c->phase = 0.0f;
+ tSquare_initToPool(cy, &leaf.mempool);
}
void tSquare_free(tSquare* const cy)
{
- _tSquare* c = *cy;
-
- leaf_free(c);
+ tSquare_freeFromPool(cy, &leaf.mempool);
}
void tSquare_initToPool (tSquare* const cy, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSquare* c = *cy = (_tSquare*) mpool_alloc(sizeof(_tSquare), &m->pool);
+ _tSquare* c = *cy = (_tSquare*) mpool_alloc(sizeof(_tSquare), m);
c->inc = 0.0f;
c->phase = 0.0f;
+ tSquare_setFreq(cy, 220);
}
void tSquare_freeFromPool(tSquare* const cy, tMempool* const mp)
@@ -260,19 +194,25 @@
_tMempool* m = *mp;
_tSquare* c = *cy;
- mpool_free(c, &m->pool);
+ mpool_free(c, m);
}
-int tSquare_setFreq(tSquare* const cy, float freq)
+void tSquare_setFreq(tSquare* const cy, float freq)
{
_tSquare* c = *cy;
- if (freq < 0.0f) freq = 0.0f;
+ if (freq < 0.0f) c->freq = 0.0f;
+ else if (freq > 20480.0f) c->freq = 20480.0f;
+ else c->freq = freq;
- c->freq = freq;
- c->inc = freq * leaf.invSampleRate;
+ c->inc = c->freq * leaf.invSampleRate;
- return 0;
+ c->w = c->freq * INV_20;
+ for (c->oct = 0; c->w > 2.0f; c->oct++)
+ {
+ c->w = 0.5f * c->w;
+ }
+ c->w = 2.0f - c->w;
}
float tSquare_tick(tSquare* const cy)
@@ -282,72 +222,16 @@
// Phasor increment
c->phase += c->inc;
while (c->phase >= 1.0f) c->phase -= 1.0f;
+ while (c->phase < 0.0f) c->phase += 1.0f;
float out = 0.0f;
- float w = 0.0f;
- int idx = (int)(c->phase * TRI_TABLE_SIZE);
+ int idx = (int)(c->phase * SQR_TABLE_SIZE);
+
// Wavetable synthesis
+ out = __leaf_table_squarewave[c->oct+1][idx] +
+ (__leaf_table_squarewave[c->oct][idx] - __leaf_table_squarewave[c->oct+1][idx]) * c->w;
- if (c->freq <= 20.0f)
- {
- out = squarewave[T20][idx];
- }
- else if (c->freq <= 40.0f)
- {
- w = ((40.0f - c->freq) * INV_20);
- out = (squarewave[T20][idx] * w) + (squarewave[T40][idx] * (1.0f - w));
- }
- else if (c->freq <= 80.0f)
- {
- w = ((80.0f - c->freq) * INV_40);
- out = (squarewave[T40][idx] * w) + (squarewave[T80][idx] * (1.0f - w));
- }
- else if (c->freq <= 160.0f)
- {
- w = ((160.0f - c->freq) * INV_80);
- out = (squarewave[T80][idx] * w) + (squarewave[T160][idx] * (1.0f - w));
- }
- else if (c->freq <= 320.0f)
- {
- w = ((320.0f - c->freq) * INV_160);
- out = (squarewave[T160][idx] * w) + (squarewave[T320][idx] * (1.0f - w));
- }
- else if (c->freq <= 640.0f)
- {
- w = ((640.0f - c->freq) * INV_320);
- out = (squarewave[T320][idx] * w) + (squarewave[T640][idx] * (1.0f - w));
- }
- else if (c->freq <= 1280.0f)
- {
- w = ((1280.0f - c->freq) * INV_640);
- out = (squarewave[T640][idx] * w) + (squarewave[T1280][idx] * (1.0f - w));
- }
- else if (c->freq <= 2560.0f)
- {
- w = ((2560.0f - c->freq) * INV_1280);
- out = (squarewave[T1280][idx] * w) + (squarewave[T2560][idx] * (1.0f - w));
- }
- else if (c->freq <= 5120.0f)
- {
- w = ((5120.0f - c->freq) * INV_2560);
- out = (squarewave[T2560][idx] * w) + (squarewave[T5120][idx] * (1.0f - w));
- }
- else if (c->freq <= 10240.0f)
- {
- w = ((10240.0f - c->freq) * INV_5120);
- out = (squarewave[T5120][idx] * w) + (squarewave[T10240][idx] * (1.0f - w));
- }
- else if (c->freq <= 20480.0f)
- {
- w = ((20480.0f - c->freq) * INV_10240);
- out = (squarewave[T10240][idx] * w) + (squarewave[T20480][idx] * (1.0f - w));
- }
- else
- {
- out = squarewave[T20480][idx];
- }
-
return out;
}
@@ -362,26 +246,22 @@
// Sawtooth
void tSawtooth_init(tSawtooth* const cy)
{
- _tSawtooth* c = *cy = (_tSawtooth*) leaf_alloc(sizeof(_tSawtooth));
-
- c->inc = 0.0f;
- c->phase = 0.0f;
+ tSawtooth_initToPool(cy, &leaf.mempool);
}
void tSawtooth_free(tSawtooth* const cy)
{
- _tSawtooth* c = *cy;
-
- leaf_free(c);
+ tSawtooth_freeFromPool(cy, &leaf.mempool);
}
void tSawtooth_initToPool (tSawtooth* const cy, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSawtooth* c = *cy = (_tSawtooth*) mpool_alloc(sizeof(_tSawtooth), &m->pool);
+ _tSawtooth* c = *cy = (_tSawtooth*) mpool_alloc(sizeof(_tSawtooth), m);
c->inc = 0.0f;
c->phase = 0.0f;
+ tSawtooth_setFreq(cy, 220);
}
void tSawtooth_freeFromPool (tSawtooth* const cy, tMempool* const mp)
@@ -389,19 +269,25 @@
_tMempool* m = *mp;
_tSawtooth* c = *cy;
- mpool_free(c, &m->pool);
+ mpool_free(c, m);
}
-int tSawtooth_setFreq(tSawtooth* const cy, float freq)
+void tSawtooth_setFreq(tSawtooth* const cy, float freq)
{
_tSawtooth* c = *cy;
- if (freq < 0.0f) freq = 0.0f;
+ if (freq < 0.0f) c->freq = 0.0f;
+ else if (freq > 20480.0f) c->freq = 20480.0f;
+ else c->freq = freq;
- c->freq = freq;
- c->inc = freq * leaf.invSampleRate;
+ c->inc = c->freq * leaf.invSampleRate;
- return 0;
+ c->w = c->freq * INV_20;
+ for (c->oct = 0; c->w > 2.0f; c->oct++)
+ {
+ c->w = 0.5f * c->w;
+ }
+ c->w = 2.0f - c->w;
}
float tSawtooth_tick(tSawtooth* const cy)
@@ -411,73 +297,16 @@
// Phasor increment
c->phase += c->inc;
while (c->phase >= 1.0f) c->phase -= 1.0f;
+ while (c->phase < 0.0f) c->phase += 1.0f;
float out = 0.0f;
- float w;
- int idx = (int)(c->phase * TRI_TABLE_SIZE);
+ int idx = (int)(c->phase * SAW_TABLE_SIZE);
// Wavetable synthesis
+ out = __leaf_table_sawtooth[c->oct+1][idx] +
+ (__leaf_table_sawtooth[c->oct][idx] - __leaf_table_sawtooth[c->oct+1][idx]) * c->w;
- if (c->freq <= 20.0f)
- {
- out = sawtooth[T20][idx];
- }
- else if (c->freq <= 40.0f)
- {
- w = ((40.0f - c->freq) * INV_20);
- out = (sawtooth[T20][idx] * w) + (sawtooth[T40][idx] * (1.0f - w));
- }
- else if (c->freq <= 80.0f)
- {
- w = ((80.0f - c->freq) * INV_40);
- out = (sawtooth[T40][idx] * w) + (sawtooth[T80][idx] * (1.0f - w));
- }
- else if (c->freq <= 160.0f)
- {
- w = ((160.0f - c->freq) * INV_80);
- out = (sawtooth[T80][idx] * w) + (sawtooth[T160][idx] * (1.0f - w));
- }
- else if (c->freq <= 320.0f)
- {
- w = ((320.0f - c->freq) * INV_160);
- out = (sawtooth[T160][idx] * w) + (sawtooth[T320][idx] * (1.0f - w));
- }
- else if (c->freq <= 640.0f)
- {
- w = ((640.0f - c->freq) * INV_320);
- out = (sawtooth[T320][idx] * w) + (sawtooth[T640][idx] * (1.0f - w));
- }
- else if (c->freq <= 1280.0f)
- {
- w = ((1280.0f - c->freq) * INV_640);
- out = (sawtooth[T640][idx] * w) + (sawtooth[T1280][idx] * (1.0f - w));
- }
- else if (c->freq <= 2560.0f)
- {
- w = ((2560.0f - c->freq) * INV_1280);
- out = (sawtooth[T1280][idx] * w) + (sawtooth[T2560][idx] * (1.0f - w));
- }
- else if (c->freq <= 5120.0f)
- {
- w = ((5120.0f - c->freq) * INV_2560);
- out = (sawtooth[T2560][idx] * w) + (sawtooth[T5120][idx] * (1.0f - w));
- }
- else if (c->freq <= 10240.0f)
- {
- w = ((10240.0f - c->freq) * INV_5120);
- out = (sawtooth[T5120][idx] * w) + (sawtooth[T10240][idx] * (1.0f - w));
- }
- else if (c->freq <= 20480.0f)
- {
- w = ((20480.0f - c->freq) * INV_10240);
- out = (sawtooth[T10240][idx] * w) + (sawtooth[T20480][idx] * (1.0f - w));
- }
- else
- {
- out = sawtooth[T20480][idx];
- }
-
return out;
}
@@ -499,23 +328,18 @@
void tPhasor_init(tPhasor* const ph)
{
- _tPhasor* p = *ph = (_tPhasor*) leaf_alloc(sizeof(_tPhasor));
-
- p->phase = 0.0f;
- p->inc = 0.0f;
+ tPhasor_initToPool(ph, &leaf.mempool);
}
void tPhasor_free(tPhasor* const ph)
{
- _tPhasor* p = *ph;
-
- leaf_free(p);
+ tPhasor_freeFromPool(ph, &leaf.mempool);
}
void tPhasor_initToPool (tPhasor* const ph, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPhasor* p = *ph = (_tPhasor*) mpool_alloc(sizeof(_tPhasor), &m->pool);
+ _tPhasor* p = *ph = (_tPhasor*) mpool_alloc(sizeof(_tPhasor), m);
p->phase = 0.0f;
p->inc = 0.0f;
@@ -526,19 +350,18 @@
_tMempool* m = *mp;
_tPhasor* p = *ph;
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
-int tPhasor_setFreq(tPhasor* const ph, float freq)
+void tPhasor_setFreq(tPhasor* const ph, float freq)
{
_tPhasor* p = *ph;
- if (freq < 0.0f) freq = 0.0f;
+ if (freq < 0.0f) p->freq = 0.0f;
+ else if (freq > 20480.0f) p->freq = 20480.0f;
+ else p->freq = freq;
- p->freq = freq;
p->inc = freq * leaf.invSampleRate;
-
- return 0;
}
float tPhasor_tick(tPhasor* const ph)
@@ -555,23 +378,18 @@
/* Noise */
void tNoise_init(tNoise* const ns, NoiseType type)
{
- _tNoise* n = *ns = (_tNoise*) leaf_alloc(sizeof(_tNoise));
-
- n->type = type;
- n->rand = leaf.random;
+ tNoise_initToPool(ns, type, &leaf.mempool);
}
void tNoise_free(tNoise* const ns)
{
- _tNoise* n = *ns;
-
- leaf_free(n);
+ tNoise_freeFromPool(ns, &leaf.mempool);
}
void tNoise_initToPool (tNoise* const ns, NoiseType type, tMempool* const mp)
{
_tMempool* m = *mp;
- _tNoise* n = *ns = (_tNoise*) mpool_alloc(sizeof(_tNoise), &m->pool);
+ _tNoise* n = *ns = (_tNoise*) mpool_alloc(sizeof(_tNoise), m);
n->type = type;
n->rand = leaf.random;
@@ -582,7 +400,7 @@
_tMempool* m = *mp;
_tNoise* n = *ns;
- mpool_free(n, &m->pool);
+ mpool_free(n, m);
}
float tNoise_tick(tNoise* const ns)
@@ -616,47 +434,18 @@
void tNeuron_init(tNeuron* const nr)
{
- _tNeuron* n = *nr = (_tNeuron*) leaf_alloc(sizeof(_tNeuron));
-
- tPoleZero_init(&n->f);
-
- tPoleZero_setBlockZero(&n->f, 0.99f);
-
- n->timeStep = 1.0f / 50.0f;
-
- n->current = 0.0f; // 100.0f for sound
- n->voltage = 0.0f;
-
- n->mode = NeuronNormal;
-
- n->P[0] = 0.0f;
- n->P[1] = 0.0f;
- n->P[2] = 1.0f;
-
- n->V[0] = -12.0f;
- n->V[1] = 115.0f;
- n->V[2] = 10.613f;
-
- n->gK = 36.0f;
- n->gN = 120.0f;
- n->gL = 0.3f;
- n->C = 1.0f;
-
- n->rate[2] = n->gL/n->C;
+ tNeuron_initToPool(nr, &leaf.mempool);
}
void tNeuron_free(tNeuron* const nr)
{
- _tNeuron* n = *nr;
-
- tPoleZero_free(&n->f);
- leaf_free(n);
+ tNeuron_freeFromPool(nr, &leaf.mempool);
}
void tNeuron_initToPool (tNeuron* const nr, tMempool* const mp)
{
_tMempool* m = *mp;
- _tNeuron* n = *nr = (_tNeuron*) mpool_alloc(sizeof(_tNeuron), &m->pool);
+ _tNeuron* n = *nr = (_tNeuron*) mpool_alloc(sizeof(_tNeuron), m);
tPoleZero_initToPool(&n->f, mp);
@@ -691,7 +480,7 @@
_tNeuron* n = *nr;
tPoleZero_free(&n->f);
- mpool_free(n, &m->pool);
+ mpool_free(n, m);
}
void tNeuron_reset(tNeuron* const nr)
--- a/LEAF/Src/leaf-physical.c
+++ b/LEAF/Src/leaf-physical.c
@@ -19,18 +19,18 @@
/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ tPluck ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
void tPluck_init (tPluck* const pl, float lowestFrequency)
{
- tPluck_initToPool(pl, lowestFrequency, &leaf_mempool);
+ tPluck_initToPool(pl, lowestFrequency, &leaf.mempool);
}
void tPluck_free (tPluck* const pl)
{
- tPluck_freeFromPool(pl, &leaf_mempool);
+ tPluck_freeFromPool(pl, &leaf.mempool);
}
void tPluck_initToPool (tPluck* const pl, float lowestFrequency, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPluck* p = *pl = (_tPluck*) mpool_alloc(sizeof(_tPluck), &m->pool);
+ _tPluck* p = *pl = (_tPluck*) mpool_alloc(sizeof(_tPluck), m);
if ( lowestFrequency <= 0.0f ) lowestFrequency = 10.0f;
@@ -56,7 +56,7 @@
tOneZero_freeFromPool(&p->loopFilter, mp);
tAllpassDelay_freeFromPool(&p->delayLine, mp);
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
float tPluck_getLastOut (tPluck* const pl)
@@ -139,18 +139,18 @@
/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ tKarplusStrong ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */
void tKarplusStrong_init (tKarplusStrong* const pl, float lowestFrequency)
{
- tKarplusStrong_initToPool(pl, lowestFrequency, &leaf_mempool);
+ tKarplusStrong_initToPool(pl, lowestFrequency, &leaf.mempool);
}
void tKarplusStrong_free (tKarplusStrong* const pl)
{
- tKarplusStrong_freeFromPool(pl, &leaf_mempool);
+ tKarplusStrong_freeFromPool(pl, &leaf.mempool);
}
void tKarplusStrong_initToPool (tKarplusStrong* const pl, float lowestFrequency, tMempool* const mp)
{
_tMempool* m = *mp;
- _tKarplusStrong* p = *pl = (_tKarplusStrong*) mpool_alloc(sizeof(_tKarplusStrong), &m->pool);
+ _tKarplusStrong* p = *pl = (_tKarplusStrong*) mpool_alloc(sizeof(_tKarplusStrong), m);
if ( lowestFrequency <= 0.0f ) lowestFrequency = 8.0f;
@@ -194,7 +194,7 @@
tBiQuad_freeFromPool(&p->biquad[i], mp);
}
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
float tKarplusStrong_getLastOut (tKarplusStrong* const pl)
@@ -358,12 +358,12 @@
float decay, float targetLev, float levSmoothFactor,
float levStrength, int levMode)
{
- tSimpleLivingString_initToPool(pl, freq, dampFreq, decay, targetLev, levSmoothFactor, levStrength, levMode, &leaf_mempool);
+ tSimpleLivingString_initToPool(pl, freq, dampFreq, decay, targetLev, levSmoothFactor, levStrength, levMode, &leaf.mempool);
}
void tSimpleLivingString_free(tSimpleLivingString* const pl)
{
- tSimpleLivingString_freeFromPool(pl, &leaf_mempool);
+ tSimpleLivingString_freeFromPool(pl, &leaf.mempool);
}
void tSimpleLivingString_initToPool (tSimpleLivingString* const pl, float freq, float dampFreq,
@@ -371,7 +371,7 @@
float levStrength, int levMode, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSimpleLivingString* p = *pl = (_tSimpleLivingString*) mpool_alloc(sizeof(_tSimpleLivingString), &m->pool);
+ _tSimpleLivingString* p = *pl = (_tSimpleLivingString*) mpool_alloc(sizeof(_tSimpleLivingString), m);
p->curr=0.0f;
tExpSmooth_initToPool(&p->wlSmooth, leaf.sampleRate/freq, 0.01, mp); // smoother for string wavelength (not freq, to avoid expensive divisions)
@@ -396,7 +396,7 @@
tHighpass_freeFromPool(&p->DCblocker, mp);
tFeedbackLeveler_freeFromPool(&p->fbLev, mp);
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
void tSimpleLivingString_setFreq(tSimpleLivingString* const pl, float freq)
@@ -480,12 +480,12 @@
float dampFreq, float decay, float targetLev, float levSmoothFactor,
float levStrength, int levMode)
{
- tLivingString_initToPool(pl, freq, pickPos, prepIndex, dampFreq, decay, targetLev, levSmoothFactor, levStrength, levMode, &leaf_mempool);
+ tLivingString_initToPool(pl, freq, pickPos, prepIndex, dampFreq, decay, targetLev, levSmoothFactor, levStrength, levMode, &leaf.mempool);
}
void tLivingString_free(tLivingString* const pl)
{
- tLivingString_freeFromPool(pl, &leaf_mempool);
+ tLivingString_freeFromPool(pl, &leaf.mempool);
}
void tLivingString_initToPool (tLivingString* const pl, float freq, float pickPos, float prepIndex,
@@ -493,7 +493,7 @@
float levStrength, int levMode, tMempool* const mp)
{
_tMempool* m = *mp;
- _tLivingString* p = *pl = (_tLivingString*) mpool_alloc(sizeof(_tLivingString), &m->pool);
+ _tLivingString* p = *pl = (_tLivingString*) mpool_alloc(sizeof(_tLivingString), m);
p->curr=0.0f;
tExpSmooth_initToPool(&p->wlSmooth, leaf.sampleRate/freq, 0.01, mp); // smoother for string wavelength (not freq, to avoid expensive divisions)
@@ -544,7 +544,7 @@
tFeedbackLeveler_freeFromPool(&p->fbLevU, mp);
tFeedbackLeveler_freeFromPool(&p->fbLevL, mp);
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
void tLivingString_setFreq(tLivingString* const pl, float freq)
@@ -689,7 +689,7 @@
void tReedTable_initToPool (tReedTable* const pm, float offset, float slope, tMempool* const mp)
{
_tMempool* m = *mp;
- _tReedTable* p = *pm = (_tReedTable*) mpool_alloc(sizeof(_tReedTable), &m->pool);
+ _tReedTable* p = *pm = (_tReedTable*) mpool_alloc(sizeof(_tReedTable), m);
p->offset = offset;
p->slope = slope;
@@ -700,7 +700,7 @@
_tMempool* m = *mp;
_tReedTable* p = *pm;
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
float tReedTable_tick (tReedTable* const pm, float input)
--- a/LEAF/Src/leaf-reverb.c
+++ b/LEAF/Src/leaf-reverb.c
@@ -68,7 +68,7 @@
void tPRCReverb_initToPool (tPRCReverb* const rev, float t60, tMempool* const mp)
{
_tMempool* m = *mp;
- _tPRCReverb* r = *rev = (_tPRCReverb*) mpool_alloc(sizeof(_tPRCReverb), &m->pool);
+ _tPRCReverb* r = *rev = (_tPRCReverb*) mpool_alloc(sizeof(_tPRCReverb), m);
if (t60 <= 0.0f) t60 = 0.001f;
@@ -110,7 +110,7 @@
tDelay_freeFromPool(&r->allpassDelays[0], mp);
tDelay_freeFromPool(&r->allpassDelays[1], mp);
tDelay_freeFromPool(&r->combDelay, mp);
- mpool_free(r, &m->pool);
+ mpool_free(r, m);
}
void tPRCRevert_clear(tPRCReverb* const rev)
@@ -243,7 +243,7 @@
void tNReverb_initToPool (tNReverb* const rev, float t60, tMempool* const mp)
{
_tMempool* m = *mp;
- _tNReverb* r = *rev = (_tNReverb*) mpool_alloc(sizeof(_tNReverb), &m->pool);
+ _tNReverb* r = *rev = (_tNReverb*) mpool_alloc(sizeof(_tNReverb), m);
if (t60 <= 0.0f) t60 = 0.001f;
@@ -296,7 +296,7 @@
tLinearDelay_freeFromPool(&r->allpassDelays[i], mp);
}
- mpool_free(r, &m->pool);
+ mpool_free(r, m);
}
void tNReverb_setT60(tNReverb* const rev, float t60)
@@ -457,18 +457,18 @@
void tDattorroReverb_init (tDattorroReverb* const rev)
{
- tDattorroReverb_initToPool(rev, &leaf_mempool);
+ tDattorroReverb_initToPool(rev, &leaf.mempool);
}
void tDattorroReverb_free (tDattorroReverb* const rev)
{
- tDattorroReverb_freeFromPool(rev, &leaf_mempool);
+ tDattorroReverb_freeFromPool(rev, &leaf.mempool);
}
void tDattorroReverb_initToPool (tDattorroReverb* const rev, tMempool* const mp)
{
_tMempool* m = *mp;
- _tDattorroReverb* r = *rev = (_tDattorroReverb*) mpool_alloc(sizeof(_tDattorroReverb), &m->pool);
+ _tDattorroReverb* r = *rev = (_tDattorroReverb*) mpool_alloc(sizeof(_tDattorroReverb), m);
r->size_max = 2.0f;
r->size = 1.f;
@@ -567,7 +567,7 @@
tCycle_freeFromPool(&r->f2_lfo, mp);
- mpool_free(r, &m->pool);
+ mpool_free(r, m);
}
void tDattorroReverb_clear (tDattorroReverb* const rev)
--- a/LEAF/Src/leaf-sampling.c
+++ b/LEAF/Src/leaf-sampling.c
@@ -26,20 +26,20 @@
void tBuffer_init (tBuffer* const sb, uint32_t length)
{
- tBuffer_initToPool(sb, length, &leaf_mempool);
+ tBuffer_initToPool(sb, length, &leaf.mempool);
}
void tBuffer_free (tBuffer* const sb)
{
- tBuffer_freeFromPool(sb, &leaf_mempool);
+ tBuffer_freeFromPool(sb, &leaf.mempool);
}
void tBuffer_initToPool (tBuffer* const sb, uint32_t length, tMempool* const mp)
{
_tMempool* m = *mp;
- _tBuffer* s = *sb = (_tBuffer*) mpool_alloc(sizeof(_tBuffer), &m->pool);
+ _tBuffer* s = *sb = (_tBuffer*) mpool_alloc(sizeof(_tBuffer), m);
- s->buff = (float*) mpool_alloc( sizeof(float) * length, &m->pool);
+ s->buff = (float*) mpool_alloc( sizeof(float) * length, m);
s->bufferLength = length;
s->recordedLength = 0;
@@ -53,8 +53,8 @@
_tMempool* m = *mp;
_tBuffer* s = *sb;
- mpool_free(s->buff, &m->pool);
- mpool_free(s, &m->pool);
+ mpool_free(s->buff, m);
+ mpool_free(s, m);
}
void tBuffer_tick (tBuffer* const sb, float sample)
@@ -154,18 +154,18 @@
void tSampler_init(tSampler* const sp, tBuffer* const b)
{
- tSampler_initToPool(sp, b, &leaf_mempool);
+ tSampler_initToPool(sp, b, &leaf.mempool);
}
void tSampler_free (tSampler* const sp)
{
- tSampler_freeFromPool(sp, &leaf_mempool);
+ tSampler_freeFromPool(sp, &leaf.mempool);
}
void tSampler_initToPool(tSampler* const sp, tBuffer* const b, tMempool* const mp)
{
_tMempool* m = *mp;
- _tSampler* p = *sp = (_tSampler*) mpool_alloc(sizeof(_tSampler), &m->pool);
+ _tSampler* p = *sp = (_tSampler*) mpool_alloc(sizeof(_tSampler), m);
_tBuffer* s = *b;
p->samp = s;
@@ -202,7 +202,7 @@
_tSampler* p = *sp;
tRamp_freeFromPool(&p->gain, mp);
- mpool_free(p, &m->pool);
+ mpool_free(p, m);
}
void tSampler_setSample (tSampler* const sp, tBuffer* const b)
@@ -709,18 +709,18 @@
void tAutoSampler_init (tAutoSampler* const as, tBuffer* const b)
{
- tAutoSampler_initToPool(as, b, &leaf_mempool);
+ tAutoSampler_initToPool(as, b, &leaf.mempool);
}
void tAutoSampler_free (tAutoSampler* const as)
{
- tAutoSampler_freeFromPool(as, &leaf_mempool);
+ tAutoSampler_freeFromPool(as, &leaf.mempool);
}
void tAutoSampler_initToPool (tAutoSampler* const as, tBuffer* const b, tMempool* const mp)
{
_tMempool* m = *mp;
- _tAutoSampler* a = *as = (_tAutoSampler*) mpool_alloc(sizeof(_tAutoSampler), &m->pool);
+ _tAutoSampler* a = *as = (_tAutoSampler*) mpool_alloc(sizeof(_tAutoSampler), m);
tBuffer_setRecordMode(b, RecordOneShot);
tSampler_initToPool(&a->sampler, b, mp);
@@ -736,7 +736,7 @@
tEnvelopeFollower_freeFromPool(&a->ef, mp);
tSampler_freeFromPool(&a->sampler, mp);
- mpool_free(a, &m->pool);
+ mpool_free(a, m);
}
float tAutoSampler_tick (tAutoSampler* const as, float input)
--- a/LEAF/Src/leaf-tables.c
+++ b/LEAF/Src/leaf-tables.c
@@ -14,41 +14,41 @@
#include "stdlib.h"
-const float fir2XLow[32] = { 0.001067048115027622, -0.004557728776555209, -0.016711590887520535, -0.021065500881657994, -0.003828695019946828, 0.01865935152799254, 0.012036365576553658, -0.02064070362810112, -0.02682399333687091, 0.017862623081258543, 0.0492716766870816, -0.004310232755957251, -0.08571879958189704, -0.03828300159135686, 0.18420501161808442, 0.4054061613074031, 0.4054061613074031, 0.18420501161808442, -0.03828300159135686, -0.08571879958189704, -0.004310232755957251, 0.0492716766870816, 0.017862623081258543, -0.02682399333687091, -0.02064070362810112, 0.012036365576553658, 0.01865935152799254, -0.003828695019946828, -0.021065500881657994, -0.016711590887520535, -0.004557728776555209, 0.001067048115027622
+const float __leaf_table_fir2XLow[32] = { 0.001067048115027622, -0.004557728776555209, -0.016711590887520535, -0.021065500881657994, -0.003828695019946828, 0.01865935152799254, 0.012036365576553658, -0.02064070362810112, -0.02682399333687091, 0.017862623081258543, 0.0492716766870816, -0.004310232755957251, -0.08571879958189704, -0.03828300159135686, 0.18420501161808442, 0.4054061613074031, 0.4054061613074031, 0.18420501161808442, -0.03828300159135686, -0.08571879958189704, -0.004310232755957251, 0.0492716766870816, 0.017862623081258543, -0.02682399333687091, -0.02064070362810112, 0.012036365576553658, 0.01865935152799254, -0.003828695019946828, -0.021065500881657994, -0.016711590887520535, -0.004557728776555209, 0.001067048115027622
};
-const float fir4XLow[64] = { 0.0006952369848543607, -0.0021602595656775407, -0.005046940892783684, -0.009045400833780066, -0.01291169046367334, -0.015115999752735221, -0.014305643164290147, -0.009951858009311934, -0.0028258377448417927, 0.004999374847547033, 0.010750729432710248, 0.012011264580991868, 0.007846433846826574, -0.0005004296670167205, -0.009772888585453377, -0.015810363406761653, -0.01525350231205246, -0.007226084282741553, 0.005835838890105145, 0.018676910759237414, 0.025091142837250335, 0.02056199072613674, 0.004658087892329196, -0.017877850338462058, -0.03800800914197999, -0.04518029996599868, -0.031146769751981856, 0.006553281738260734, 0.06282284508297871, 0.1257919544316159, 0.18007204974638935, 0.21145499612282317, 0.21145499612282317, 0.18007204974638935, 0.1257919544316159, 0.06282284508297871, 0.006553281738260734, -0.031146769751981856, -0.04518029996599868, -0.03800800914197999, -0.017877850338462058, 0.004658087892329196, 0.02056199072613674, 0.025091142837250335, 0.018676910759237414, 0.005835838890105145, -0.007226084282741553, -0.01525350231205246, -0.015810363406761653, -0.009772888585453377, -0.0005004296670167205, 0.007846433846826574, 0.012011264580991868, 0.010750729432710248, 0.004999374847547033, -0.0028258377448417927, -0.009951858009311934, -0.014305643164290147, -0.015115999752735221, -0.01291169046367334, -0.009045400833780066, -0.005046940892783684, -0.0021602595656775407, 0.0006952369848543607
+const float __leaf_table_fir4XLow[64] = { 0.0006952369848543607, -0.0021602595656775407, -0.005046940892783684, -0.009045400833780066, -0.01291169046367334, -0.015115999752735221, -0.014305643164290147, -0.009951858009311934, -0.0028258377448417927, 0.004999374847547033, 0.010750729432710248, 0.012011264580991868, 0.007846433846826574, -0.0005004296670167205, -0.009772888585453377, -0.015810363406761653, -0.01525350231205246, -0.007226084282741553, 0.005835838890105145, 0.018676910759237414, 0.025091142837250335, 0.02056199072613674, 0.004658087892329196, -0.017877850338462058, -0.03800800914197999, -0.04518029996599868, -0.031146769751981856, 0.006553281738260734, 0.06282284508297871, 0.1257919544316159, 0.18007204974638935, 0.21145499612282317, 0.21145499612282317, 0.18007204974638935, 0.1257919544316159, 0.06282284508297871, 0.006553281738260734, -0.031146769751981856, -0.04518029996599868, -0.03800800914197999, -0.017877850338462058, 0.004658087892329196, 0.02056199072613674, 0.025091142837250335, 0.018676910759237414, 0.005835838890105145, -0.007226084282741553, -0.01525350231205246, -0.015810363406761653, -0.009772888585453377, -0.0005004296670167205, 0.007846433846826574, 0.012011264580991868, 0.010750729432710248, 0.004999374847547033, -0.0028258377448417927, -0.009951858009311934, -0.014305643164290147, -0.015115999752735221, -0.01291169046367334, -0.009045400833780066, -0.005046940892783684, -0.0021602595656775407, 0.0006952369848543607
};
-const float fir8XLow[64] = { 0.0006754949160790157, 0.0002779478357299437, 0.00016529299248029802, -0.00013134896547707938, -0.0006717131404275674, -0.0015110701381990592, -0.002691718323402088, -0.004233151560515273, -0.006122759810873029, -0.008309678451155357, -0.010700324896169348, -0.013154262594364387, -0.015486775440587882, -0.01748014690133886, -0.018887653514132675, -0.019456772349369558, -0.01894272181784527, -0.017131243827335194, -0.013858969256894846, -0.009032963777720983, -0.0026459262830678125, 0.00521276165394513, 0.01435273458276724, 0.024486845310977834, 0.03524172116254876, 0.04617574968276393, 0.05680505888194891, 0.06663123541320262, 0.07517390607705798, 0.08200222626654773, 0.0867639105153248, 0.08920930675382921, 0.08920930675382921, 0.0867639105153248, 0.08200222626654773, 0.07517390607705798, 0.06663123541320262, 0.05680505888194891, 0.04617574968276393, 0.03524172116254876, 0.024486845310977834, 0.01435273458276724, 0.00521276165394513, -0.0026459262830678125, -0.009032963777720983, -0.013858969256894846, -0.017131243827335194, -0.01894272181784527, -0.019456772349369558, -0.018887653514132675, -0.01748014690133886, -0.015486775440587882, -0.013154262594364387, -0.010700324896169348, -0.008309678451155357, -0.006122759810873029, -0.004233151560515273, -0.002691718323402088, -0.0015110701381990592, -0.0006717131404275674, -0.00013134896547707938, 0.00016529299248029802, 0.0002779478357299437, 0.0006754949160790157
+const float __leaf_table_fir8XLow[64] = { 0.0006754949160790157, 0.0002779478357299437, 0.00016529299248029802, -0.00013134896547707938, -0.0006717131404275674, -0.0015110701381990592, -0.002691718323402088, -0.004233151560515273, -0.006122759810873029, -0.008309678451155357, -0.010700324896169348, -0.013154262594364387, -0.015486775440587882, -0.01748014690133886, -0.018887653514132675, -0.019456772349369558, -0.01894272181784527, -0.017131243827335194, -0.013858969256894846, -0.009032963777720983, -0.0026459262830678125, 0.00521276165394513, 0.01435273458276724, 0.024486845310977834, 0.03524172116254876, 0.04617574968276393, 0.05680505888194891, 0.06663123541320262, 0.07517390607705798, 0.08200222626654773, 0.0867639105153248, 0.08920930675382921, 0.08920930675382921, 0.0867639105153248, 0.08200222626654773, 0.07517390607705798, 0.06663123541320262, 0.05680505888194891, 0.04617574968276393, 0.03524172116254876, 0.024486845310977834, 0.01435273458276724, 0.00521276165394513, -0.0026459262830678125, -0.009032963777720983, -0.013858969256894846, -0.017131243827335194, -0.01894272181784527, -0.019456772349369558, -0.018887653514132675, -0.01748014690133886, -0.015486775440587882, -0.013154262594364387, -0.010700324896169348, -0.008309678451155357, -0.006122759810873029, -0.004233151560515273, -0.002691718323402088, -0.0015110701381990592, -0.0006717131404275674, -0.00013134896547707938, 0.00016529299248029802, 0.0002779478357299437, 0.0006754949160790157
};
-const float fir16XLow[128] = { 0.0046126349429950276, 0.002418251320043122, 0.002998396982119693, 0.0036278090719021024, 0.0042975430005925104, 0.004996222179947315, 0.005711926725799716, 0.00643079625328543, 0.007135468516004265, 0.007808520869830334, 0.008432568881455365, 0.008987453845736109, 0.00945525638237626, 0.009815890031354925, 0.01005214318250272, 0.0101471696783731, 0.010086582032584102, 0.009858344528406827, 0.009453351108896472, 0.00886647074448095, 0.008096771309653635, 0.00714751717242796, 0.006026566967445846, 0.004745997071949807, 0.0033222377606249025, 0.0017766711441555428, 0.00013504407845816216, -0.0015717347700967995, -0.0033094088955885038, -0.005040712758495562, -0.0067262136355625045, -0.00832548062138737, -0.009796853749250854, -0.011097728611024173, -0.012187337326564303, -0.013023698103098556, -0.013573509920266506, -0.013801755448129987, -0.013685636499932173, -0.0132011750541409, -0.012328290422335804, -0.011059565013468301, -0.009397775060844537, -0.007349071952063118, -0.004920665178899413, -0.002134336426912994, 0.0009664872092121234, 0.00436478920287496, 0.008003553325930378, 0.011839210717492617, 0.015814297525442545, 0.01987142580304551, 0.023948983229671674, 0.0279823843957138, 0.03190689232743185, 0.03565816745288488, 0.03917373689862927, 0.042395392373465575, 0.04526788671987817, 0.0477424527036618, 0.04977580760639264, 0.051332653704811104, 0.05238580079738586, 0.05291690409987073, 0.05291690409987073, 0.05238580079738586, 0.051332653704811104, 0.04977580760639264, 0.0477424527036618, 0.04526788671987817, 0.042395392373465575, 0.03917373689862927, 0.03565816745288488, 0.03190689232743185, 0.0279823843957138, 0.023948983229671674, 0.01987142580304551, 0.015814297525442545, 0.011839210717492617, 0.008003553325930378, 0.00436478920287496, 0.0009664872092121234, -0.002134336426912994, -0.004920665178899413, -0.007349071952063118, -0.009397775060844537, -0.011059565013468301, -0.012328290422335804, -0.0132011750541409, -0.013685636499932173, -0.013801755448129987, -0.013573509920266506, -0.013023698103098556, -0.012187337326564303, -0.011097728611024173, -0.009796853749250854, -0.00832548062138737, -0.0067262136355625045, -0.005040712758495562, -0.0033094088955885038, -0.0015717347700967995, 0.00013504407845816216, 0.0017766711441555428, 0.0033222377606249025, 0.004745997071949807, 0.006026566967445846, 0.00714751717242796, 0.008096771309653635, 0.00886647074448095, 0.009453351108896472, 0.009858344528406827, 0.010086582032584102, 0.0101471696783731, 0.01005214318250272, 0.009815890031354925, 0.00945525638237626, 0.008987453845736109, 0.008432568881455365, 0.007808520869830334, 0.007135468516004265, 0.00643079625328543, 0.005711926725799716, 0.004996222179947315, 0.0042975430005925104, 0.0036278090719021024, 0.002998396982119693, 0.002418251320043122, 0.0046126349429950276
+const float __leaf_table_fir16XLow[128] = { 0.0046126349429950276, 0.002418251320043122, 0.002998396982119693, 0.0036278090719021024, 0.0042975430005925104, 0.004996222179947315, 0.005711926725799716, 0.00643079625328543, 0.007135468516004265, 0.007808520869830334, 0.008432568881455365, 0.008987453845736109, 0.00945525638237626, 0.009815890031354925, 0.01005214318250272, 0.0101471696783731, 0.010086582032584102, 0.009858344528406827, 0.009453351108896472, 0.00886647074448095, 0.008096771309653635, 0.00714751717242796, 0.006026566967445846, 0.004745997071949807, 0.0033222377606249025, 0.0017766711441555428, 0.00013504407845816216, -0.0015717347700967995, -0.0033094088955885038, -0.005040712758495562, -0.0067262136355625045, -0.00832548062138737, -0.009796853749250854, -0.011097728611024173, -0.012187337326564303, -0.013023698103098556, -0.013573509920266506, -0.013801755448129987, -0.013685636499932173, -0.0132011750541409, -0.012328290422335804, -0.011059565013468301, -0.009397775060844537, -0.007349071952063118, -0.004920665178899413, -0.002134336426912994, 0.0009664872092121234, 0.00436478920287496, 0.008003553325930378, 0.011839210717492617, 0.015814297525442545, 0.01987142580304551, 0.023948983229671674, 0.0279823843957138, 0.03190689232743185, 0.03565816745288488, 0.03917373689862927, 0.042395392373465575, 0.04526788671987817, 0.0477424527036618, 0.04977580760639264, 0.051332653704811104, 0.05238580079738586, 0.05291690409987073, 0.05291690409987073, 0.05238580079738586, 0.051332653704811104, 0.04977580760639264, 0.0477424527036618, 0.04526788671987817, 0.042395392373465575, 0.03917373689862927, 0.03565816745288488, 0.03190689232743185, 0.0279823843957138, 0.023948983229671674, 0.01987142580304551, 0.015814297525442545, 0.011839210717492617, 0.008003553325930378, 0.00436478920287496, 0.0009664872092121234, -0.002134336426912994, -0.004920665178899413, -0.007349071952063118, -0.009397775060844537, -0.011059565013468301, -0.012328290422335804, -0.0132011750541409, -0.013685636499932173, -0.013801755448129987, -0.013573509920266506, -0.013023698103098556, -0.012187337326564303, -0.011097728611024173, -0.009796853749250854, -0.00832548062138737, -0.0067262136355625045, -0.005040712758495562, -0.0033094088955885038, -0.0015717347700967995, 0.00013504407845816216, 0.0017766711441555428, 0.0033222377606249025, 0.004745997071949807, 0.006026566967445846, 0.00714751717242796, 0.008096771309653635, 0.00886647074448095, 0.009453351108896472, 0.009858344528406827, 0.010086582032584102, 0.0101471696783731, 0.01005214318250272, 0.009815890031354925, 0.00945525638237626, 0.008987453845736109, 0.008432568881455365, 0.007808520869830334, 0.007135468516004265, 0.00643079625328543, 0.005711926725799716, 0.004996222179947315, 0.0042975430005925104, 0.0036278090719021024, 0.002998396982119693, 0.002418251320043122, 0.0046126349429950276
};
-const float fir32XLow[256] = { 0.003135815035675548, 0.0008156232239328851, 0.000917068197598276, 0.0010233321389754753, 0.001134110218761504, 0.0012491667970169805, 0.0013680375075057851, 0.001490070275243389, 0.0016147643011084855, 0.0017417157238882276, 0.0018700914504121836, 0.0019991579415749683, 0.002128471863076254, 0.0022567566738769186, 0.002383672659264704, 0.002508166194956474, 0.002629506399721181, 0.0027467683378931368, 0.0028590361951993043, 0.0029653540222406116, 0.0030647286416823558, 0.00315623470697179, 0.003238837936508139, 0.0033114996375323753, 0.003373275427426179, 0.003423120728613286, 0.0034602078573979502, 0.00348370126489233, 0.0034928589363555137, 0.003487024926580723, 0.00346544617544127, 0.0034275901596743786, 0.003372744288160786, 0.003300374368830668, 0.0032100011629779615, 0.0031011259873207366, 0.0029734835473811155, 0.002826966057696581, 0.002661647372342504, 0.002477856491791658, 0.0022758592957851788, 0.002056324802981239, 0.0018188203182857804, 0.0015643564184398945, 0.0012926118931092972, 0.0010045690459120843, 0.0007018867678747181, 0.0003860391202902529, 0.00005849980158161824, -0.0002799696936324717, -0.0006296005356373679, -0.0009895247437558183, -0.0013546785675169304, -0.0017195561866995873, -0.0020963876502479964, -0.002468260301862593, -0.0028417218921490055, -0.0032120394918615683, -0.0035773608021516137, -0.003935505336691309, -0.004284369920502227, -0.004621670593236145, -0.004945031807804129, -0.005252279037886353, -0.005541035510098375, -0.0058089264241534076, -0.006054095814242929, -0.006274068947767563, -0.00646696244866887, -0.0066305675756926155, -0.006762900683506128, -0.0068620368760529005, -0.006926182735003765, -0.0069537046122919695, -0.006943019919480639, -0.006892771889917669, -0.006801741377343995, -0.006668838708546407, -0.006493264006045824, -0.006274267867821416, -0.006011320357808483, -0.0057040303527059145, -0.0053521596030233955, -0.004955865565614219, -0.0045153171035821945, -0.004031251472901679, -0.0035043462024212605, -0.002935495552851842, -0.0023258420785969196, -0.0016765768456949962, -0.0009892344368254917, -0.0002656979807816483, 0.0004919846584003508, 0.0012815018066687268, 0.0021009777555761797, 0.002947120990883713, 0.003818897132096946, 0.004711821532573362, 0.005623441877750917, 0.0065507318610126455, 0.00749007256295643, 0.008438601047417412, 0.009393231377415961, 0.010349728929990198, 0.011304034683748016, 0.012253787036798792, 0.0131957325172224, 0.014123534046112132, 0.015037407721547907, 0.015930638333497147, 0.016801083762848282, 0.017644931748342123, 0.018458926379618365, 0.019239740862760844, 0.0199842074278331, 0.02068926196032209, 0.021351902836904902, 0.021969538576994418, 0.022539688024890127, 0.02305979792910538, 0.023527892067270753, 0.023941757493848588, 0.02429975740762361, 0.024600378168866704, 0.02484241441905009, 0.025024893038415853, 0.025146995906550493, 0.025208214258904054, 0.025208214258904054, 0.025146995906550493, 0.025024893038415853, 0.02484241441905009, 0.024600378168866704, 0.02429975740762361, 0.023941757493848588, 0.023527892067270753, 0.02305979792910538, 0.022539688024890127, 0.021969538576994418, 0.021351902836904902, 0.02068926196032209, 0.0199842074278331, 0.019239740862760844, 0.018458926379618365, 0.017644931748342123, 0.016801083762848282, 0.015930638333497147, 0.015037407721547907, 0.014123534046112132, 0.0131957325172224, 0.012253787036798792, 0.011304034683748016, 0.010349728929990198, 0.009393231377415961, 0.008438601047417412, 0.00749007256295643, 0.0065507318610126455, 0.005623441877750917, 0.004711821532573362, 0.00381889
\ No newline at end of file
+const float __leaf_table_fir32XLow[256] = { 0.003135815035675548, 0.0008156232239328851, 0.000917068197598276, 0.0010233321389754753, 0.001134110218761504, 0.0012491667970169805, 0.0013680375075057851, 0.001490070275243389, 0.0016147643011084855, 0.0017417157238882276, 0.0018700914504121836, 0.0019991579415749683, 0.002128471863076254, 0.0022567566738769186, 0.002383672659264704, 0.002508166194956474, 0.002629506399721181, 0.0027467683378931368, 0.0028590361951993043, 0.0029653540222406116, 0.0030647286416823558, 0.00315623470697179, 0.003238837936508139, 0.0033114996375323753, 0.003373275427426179, 0.003423120728613286, 0.0034602078573979502, 0.00348370126489233, 0.0034928589363555137, 0.003487024926580723, 0.00346544617544127, 0.0034275901596743786, 0.003372744288160786, 0.003300374368830668, 0.0032100011629779615, 0.0031011259873207366, 0.0029734835473811155, 0.002826966057696581, 0.002661647372342504, 0.002477856491791658, 0.0022758592957851788, 0.002056324802981239, 0.0018188203182857804, 0.0015643564184398945, 0.0012926118931092972, 0.0010045690459120843, 0.0007018867678747181, 0.0003860391202902529, 0.00005849980158161824, -0.0002799696936324717, -0.0006296005356373679, -0.0009895247437558183, -0.0013546785675169304, -0.0017195561866995873, -0.0020963876502479964, -0.002468260301862593, -0.0028417218921490055, -0.0032120394918615683, -0.0035773608021516137, -0.003935505336691309, -0.004284369920502227, -0.004621670593236145, -0.004945031807804129, -0.005252279037886353, -0.005541035510098375, -0.0058089264241534076, -0.006054095814242929, -0.006274068947767563, -0.00646696244866887, -0.0066305675756926155, -0.006762900683506128, -0.0068620368760529005, -0.006926182735003765, -0.0069537046122919695, -0.006943019919480639, -0.006892771889917669, -0.006801741377343995, -0.006668838708546407, -0.006493264006045824, -0.006274267867821416, -0.006011320357808483, -0.0057040303527059145, -0.0053521596030233955, -0.004955865565614219, -0.0045153171035821945, -0.004031251472901679, -0.0035043462024212605, -0.002935495552851842, -0.0023258420785969196, -0.0016765768456949962, -0.0009892344368254917, -0.0002656979807816483, 0.0004919846584003508, 0.0012815018066687268, 0.0021009777555761797, 0.002947120990883713, 0.003818897132096946, 0.004711821532573362, 0.005623441877750917, 0.0065507318610126455, 0.00749007256295643, 0.008438601047417412, 0.009393231377415961, 0.010349728929990198, 0.011304034683748016, 0.012253787036798792, 0.0131957325172224, 0.014123534046112132, 0.015037407721547907, 0.015930638333497147, 0.016801083762848282, 0.017644931748342123, 0.018458926379618365, 0.019239740862760844, 0.0199842074278331, 0.02068926196032209, 0.021351902836904902, 0.021969538576994418, 0.022539688024890127, 0.02305979792910538, 0.023527892067270753, 0.023941757493848588, 0.02429975740762361, 0.024600378168866704, 0.02484241441905009, 0.025024893038415853, 0.025146995906550493, 0.025208214258904054, 0.025208214258904054, 0.025146995906550493, 0.025024893038415853, 0.02484241441905009, 0.024600378168866704, 0.02429975740762361, 0.023941757493848588, 0.023527892067270753, 0.02305979792910538, 0.022539688024890127, 0.021969538576994418, 0.021351902836904902, 0.02068926196032209, 0.0199842074278331, 0.019239740862760844, 0.018458926379618365, 0.017644931748342123, 0.016801083762848282, 0.015930638333497147, 0.015037407721547907, 0.014123534046112132, 0.0131957325172224, 0.012253787036798792, 0.011304034683748016, 0.010349728929990198, 0.009393231377415961, 0.008438601047417412, 0.00749007256295643, 0.0065507318610126455, 0.005623441877750917, 0.004711821532573362,
\ No newline at end of file
7132096946, 0.002947120990883713, 0.0021009777555761797, 0.0012815018066687268, 0.0004919846584003508, -0.0002656979807816483, -0.0009892344368254917, -0.0016765768456949962, -0.0023258420785969196, -0.002935495552851842, -0.0035043462024212605, -0.004031251472901679, -0.0045153171035821945, -0.004955865565614219, -0.0053521596030233955, -0.0057040303527059145, -0.006011320357808483, -0.006274267867821416, -0.006493264006045824, -0.006668838708546407, -0.006801741377343995, -0.006892771889917669, -0.006943019919480639, -0.0069537046122919695, -0.006926182735003765, -0.0068620368760529005, -0.006762900683506128, -0.0066305675756926155, -0.00646696244866887, -0.006274068947767563, -0.006054095814242929, -0.0058089264241534076, -0.005541035510098375, -0.005252279037886353, -0.004945031807804129, -0.004621670593236145, -0.004284369920502227, -0.003935505336691309, -0.0035773608021516137, -0.0032120394918615683, -0.0028417218921490055, -0.002468260301862593, -0.0020963876502479964, -0.0017195561866995873, -0.0013546785675169304, -0.0009895247437558183, -0.0006296005356373679, -0.0002799696936324717, 0.00005849980158161824, 0.0003860391202902529, 0.0007018867678747181, 0.0010045690459120843, 0.0012926118931092972, 0.0015643564184398945, 0.0018188203182857804, 0.002056324802981239, 0.0022758592957851788, 0.002477856491791658, 0.002661647372342504, 0.002826966057696581, 0.0029734835473811155, 0.0031011259873207366, 0.0032100011629779615, 0.003300374368830668, 0.003372744288160786, 0.0034275901596743786, 0.00346544617544127, 0.003487024926580723, 0.0034928589363555137, 0.00348370126489233, 0.0034602078573979502, 0.003423120728613286, 0.003373275427426179, 0.0033114996375323753, 0.003238837936508139, 0.00315623470697179, 0.0030647286416823558, 0.0029653540222406116, 0.0028590361951993043, 0.0027467683378931368, 0.002629506399721181, 0.002508166194956474, 0.002383672659264704, 0.0022567566738769186, 0.002128471863076254, 0.0019991579415749683, 0.0018700914504121836, 0.0017417157238882276, 0.0016147643011084855, 0.001490070275243389, 0.0013680375075057851, 0.0012491667970169805, 0.001134110218761504, 0.0010233321389754753, 0.000917068197598276, 0.0008156232239328851, 0.003135815035675548
-096946, 0.002947120990883713, 0.0021009777555761797, 0.0012815018066687268, 0.0004919846584003508, -0.0002656979807816483, -0.0009892344368254917, -0.0016765768456949962, -0.0023258420785969196, -0.002935495552851842, -0.0035043462024212605, -0.004031251472901679, -0.0045153171035821945, -0.004955865565614219, -0.0053521596030233955, -0.0057040303527059145, -0.006011320357808483, -0.006274267867821416, -0.006493264006045824, -0.006668838708546407, -0.006801741377343995, -0.006892771889917669, -0.006943019919480639, -0.0069537046122919695, -0.006926182735003765, -0.0068620368760529005, -0.006762900683506128, -0.0066305675756926155, -0.00646696244866887, -0.006274068947767563, -0.006054095814242929, -0.0058089264241534076, -0.005541035510098375, -0.005252279037886353, -0.004945031807804129, -0.004621670593236145, -0.004284369920502227, -0.003935505336691309, -0.0035773608021516137, -0.0032120394918615683, -0.0028417218921490055, -0.002468260301862593, -0.0020963876502479964, -0.0017195561866995873, -0.0013546785675169304, -0.0009895247437558183, -0.0006296005356373679, -0.0002799696936324717, 0.00005849980158161824, 0.0003860391202902529, 0.0007018867678747181, 0.0010045690459120843, 0.0012926118931092972, 0.0015643564184398945, 0.0018188203182857804, 0.002056324802981239, 0.0022758592957851788, 0.002477856491791658, 0.002661647372342504, 0.002826966057696581, 0.0029734835473811155, 0.0031011259873207366, 0.0032100011629779615, 0.003300374368830668, 0.003372744288160786, 0.0034275901596743786, 0.00346544617544127, 0.003487024926580723, 0.0034928589363555137, 0.00348370126489233, 0.0034602078573979502, 0.003423120728613286, 0.003373275427426179, 0.0033114996375323753, 0.003238837936508139, 0.00315623470697179, 0.0030647286416823558, 0.0029653540222406116, 0.0028590361951993043, 0.0027467683378931368, 0.002629506399721181, 0.002508166194956474, 0.002383672659264704, 0.0022567566738769186, 0.002128471863076254, 0.0019991579415749683, 0.0018700914504121836, 0.0017417157238882276, 0.0016147643011084855, 0.001490070275243389, 0.0013680375075057851, 0.0012491667970169805, 0.001134110218761504, 0.0010233321389754753, 0.000917068197598276, 0.0008156232239328851, 0.003135815035675548
+.003818897132096946, 0.002947120990883713, 0.0021009777555761797, 0.0012815018066687268, 0.0004919846584003508, -0.0002656979807816483, -0.0009892344368254917, -0.0016765768456949962, -0.0023258420785969196, -0.002935495552851842, -0.0035043462024212605, -0.004031251472901679, -0.0045153171035821945, -0.004955865565614219, -0.0053521596030233955, -0.0057040303527059145, -0.006011320357808483, -0.006274267867821416, -0.006493264006045824, -0.006668838708546407, -0.006801741377343995, -0.006892771889917669, -0.006943019919480639, -0.0069537046122919695, -0.006926182735003765, -0.0068620368760529005, -0.006762900683506128, -0.0066305675756926155, -0.00646696244866887, -0.006274068947767563, -0.006054095814242929, -0.0058089264241534076, -0.005541035510098375, -0.005252279037886353, -0.004945031807804129, -0.004621670593236145, -0.004284369920502227, -0.003935505336691309, -0.0035773608021516137, -0.0032120394918615683, -0.0028417218921490055, -0.002468260301862593, -0.0020963876502479964, -0.0017195561866995873, -0.0013546785675169304, -0.0009895247437558183, -0.0006296005356373679, -0.0002799696936324717, 0.00005849980158161824, 0.0003860391202902529, 0.0007018867678747181, 0.0010045690459120843, 0.0012926118931092972, 0.0015643564184398945, 0.0018188203182857804, 0.002056324802981239, 0.0022758592957851788, 0.002477856491791658, 0.002661647372342504, 0.002826966057696581, 0.0029734835473811155, 0.0031011259873207366, 0.0032100011629779615, 0.003300374368830668, 0.003372744288160786, 0.0034275901596743786, 0.00346544617544127, 0.003487024926580723, 0.0034928589363555137, 0.00348370126489233, 0.0034602078573979502, 0.003423120728613286, 0.003373275427426179, 0.0033114996375323753, 0.003238837936508139, 0.00315623470697179, 0.0030647286416823558, 0.0029653540222406116, 0.0028590361951993043, 0.0027467683378931368, 0.002629506399721181, 0.002508166194956474, 0.002383672659264704, 0.0022567566738769186, 0.002128471863076254, 0.0019991579415749683, 0.0018700914504121836, 0.0017417157238882276, 0.0016147643011084855, 0.001490070275243389, 0.0013680375075057851, 0.0012491667970169805, 0.001134110218761504, 0.0010233321389754753, 0.000917068197598276, 0.0008156232239328851, 0.003135815035675548
7, 0.005736960631925176, 0.005902264421456515, 0.006068673112862706, 0.006236075536115428, 0.006404404103216645, 0.006573347381526989, 0.006743241263261084, 0.006913918086775748, 0.007085185727911214, 0.007255841416075524, 0.007427788300814843, 0.007599440425756014, 0.007771491831017079, 0.007940210385740073, 0.008115982431613405, 0.008286230477311076, 0.008455728261315427, 0.008624828065636171, 0.0087938382520137, 0.008961934603559608, 0.009129309914478244, 0.009295705048569773, 0.009460895719293651, 0.009624512383898252, 0.009786590519239425, 0.009946995212091796, 0.010105592312872629, 0.010262212502414601, 0.010416818688520148, 0.010569268906811192, 0.010719396502249774, 0.010867082742078902, 0.011012274230511132, 0.011154883295408143, 0.01129473907939671, 0.011431766458575066, 0.011565861880187342, 0.011696890630696698, 0.011824548066976817, 0.011948823922340134, 0.012069629781346847, 0.012186937947306629, 0.012300432892104241, 0.01241055721228422, 0.012517086983512674, 0.012619772868365714, 0.01271694508250919, 0.012811738843612799, 0.012901614577029171, 0.012987520090940792, 0.013067705672196494, 0.013146659639966262, 0.013218602399208508, 0.013285987093409357, 0.013349032229359648, 0.013407929990549725, 0.013461999810303231, 0.013511437444384976, 0.013556082697096088, 0.013595835757053917, 0.013630499982440026, 0.01366023670087255, 0.013685042776887582, 0.013704903172994373, 0.013719772986706352, 0.013729721512429531, 0.01373472352074017, 0.01373472352074017, 0.013729721512429531, 0.013719772986706352, 0.013704903172994373, 0.013685042776887582, 0.01366023670087255, 0.013630499982440026, 0.013595835757053917, 0.013556082697096088, 0.013511437444384976, 0.013461999810303231, 0.013407929990549725, 0.013349032229359648, 0.013285987093409357, 0.013218602399208508, 0.013146659639966262, 0.013067705672196494, 0.012987520090940792, 0.012901614577029171, 0.012811738843612799, 0.01271694508250919, 0.012619772868365714, 0.012517086983512674, 0.01241055721228422, 0.012300432892104241, 0.012186937947306629, 0.012069629781346847, 0.011948823922340134, 0.011824548066976817, 0.011696890630696698, 0.011565861880187342, 0.011431766458575066, 0.01129473907939671, 0.011154883295408143, 0.011012274230511132, 0.010867082742078902, 0.010719396502249774, 0.010569268906811192, 0.010416818688520148, 0.010262212502414601, 0.010105592312872629, 0.009946995212091796, 0.009786590519239425, 0.009624512383898252, 0.009460895719293651, 0.009295705048569773, 0.009129309914478244, 0.008961934603559608, 0.0087938382520137, 0.008624828065636171, 0.008455728261315427, 0.008286230477311076, 0.008115982431613405, 0.007940210385740073, 0.007771491831017079, 0.007599440425756014, 0.007427788300814843, 0.007255841416075524, 0.007085185727911214, 0.006913918086775748, 0.006743241263261084, 0.006573347381526989, 0.006404404103216645, 0.006236075536115428, 0.006068673112862706, 0.005902264421456515, 0.005736960631925176, 0.00557279812512997, 0.005410043882397958, 0.005248795189805357, 0.005089107569792517, 0.004931017978539705, 0.00477464934326076, 0.004620059305184111, 0.004467271202856345, 0.004316384032044447, 0.004167535061341574, 0.004020837780560375, 0.003876285696289593, 0.00373401564369845, 0.003594116005810746, 0.00345667963318062, 0.0033216131163189126, 0.0031892620828723227, 0.003059760096689252, 0.0029332425986383416, 0.0028092893752555753, 0.0026886907797787993, 0.0025707750602413674, 0.0024546715656463027, 0.002324224442263978, 0.0022249923434846707, 0.002115750178775707, 0.0020102102191501834, 0.0019074086707092258, 0.0018082288964809644, 0.0017113538530254156
\ No newline at end of file
};
-0.005736960631925176, 0.005902264421456515, 0.006068673112862706, 0.006236075536115428, 0.006404404103216645, 0.006573347381526989, 0.006743241263261084, 0.006913918086775748, 0.007085185727911214, 0.007255841416075524, 0.007427788300814843, 0.007599440425756014, 0.007771491831017079, 0.007940210385740073, 0.008115982431613405, 0.008286230477311076, 0.008455728261315427, 0.008624828065636171, 0.0087938382520137, 0.008961934603559608, 0.009129309914478244, 0.009295705048569773, 0.009460895719293651, 0.009624512383898252, 0.009786590519239425, 0.009946995212091796, 0.010105592312872629, 0.010262212502414601, 0.010416818688520148, 0.010569268906811192, 0.010719396502249774, 0.010867082742078902, 0.011012274230511132, 0.011154883295408143, 0.01129473907939671, 0.011431766458575066, 0.011565861880187342, 0.011696890630696698, 0.011824548066976817, 0.011948823922340134, 0.012069629781346847, 0.012186937947306629, 0.012300432892104241, 0.01241055721228422, 0.012517086983512674, 0.012619772868365714, 0.01271694508250919, 0.012811738843612799, 0.012901614577029171, 0.012987520090940792, 0.013067705672196494, 0.013146659639966262, 0.013218602399208508, 0.013285987093409357, 0.013349032229359648, 0.013407929990549725, 0.013461999810303231, 0.013511437444384976, 0.013556082697096088, 0.013595835757053917, 0.013630499982440026, 0.01366023670087255, 0.013685042776887582, 0.013704903172994373, 0.013719772986706352, 0.013729721512429531, 0.01373472352074017, 0.01373472352074017, 0.013729721512429531, 0.013719772986706352, 0.013704903172994373, 0.013685042776887582, 0.01366023670087255, 0.013630499982440026, 0.013595835757053917, 0.013556082697096088, 0.013511437444384976, 0.013461999810303231, 0.013407929990549725, 0.013349032229359648, 0.013285987093409357, 0.013218602399208508, 0.013146659639966262, 0.013067705672196494, 0.012987520090940792, 0.012901614577029171, 0.012811738843612799, 0.01271694508250919, 0.012619772868365714, 0.012517086983512674, 0.01241055721228422, 0.012300432892104241, 0.012186937947306629, 0.012069629781346847, 0.011948823922340134, 0.011824548066976817, 0.011696890630696698, 0.011565861880187342, 0.011431766458575066, 0.01129473907939671, 0.011154883295408143, 0.011012274230511132, 0.010867082742078902, 0.010719396502249774, 0.010569268906811192, 0.010416818688520148, 0.010262212502414601, 0.010105592312872629, 0.009946995212091796, 0.009786590519239425, 0.009624512383898252, 0.009460895719293651, 0.009295705048569773, 0.009129309914478244, 0.008961934603559608, 0.0087938382520137, 0.008624828065636171, 0.008455728261315427, 0.008286230477311076, 0.008115982431613405, 0.007940210385740073, 0.007771491831017079, 0.007599440425756014, 0.007427788300814843, 0.007255841416075524, 0.007085185727911214, 0.006913918086775748, 0.006743241263261084, 0.006573347381526989, 0.006404404103216645, 0.006236075536115428, 0.006068673112862706, 0.005902264421456515, 0.005736960631925176, 0.00557279812512997, 0.005410043882397958, 0.005248795189805357, 0.005089107569792517, 0.004931017978539705, 0.00477464934326076, 0.004620059305184111, 0.004467271202856345, 0.004316384032044447, 0.004167535061341574, 0.004020837780560375, 0.003876285696289593, 0.00373401564369845, 0.003594116005810746, 0.00345667963318062, 0.0033216131163189126, 0.0031892620828723227, 0.003059760096689252, 0.0029332425986383416, 0.0028092893752555753, 0.0026886907797787993, 0.0025707750602413674, 0.0024546715656463027, 0.002324224442263978, 0.0022249923434846707, 0.002115750178775707, 0.0020102102191501834, 0.0019074086707092258, 0.0018082288964809644, 0.0017113538530254156, 0
\ No newline at end of file
+ 0.00557279812512997, 0.005736960631925176, 0.005902264421456515, 0.006068673112862706, 0.006236075536115428, 0.006404404103216645, 0.006573347381526989, 0.006743241263261084, 0.006913918086775748, 0.007085185727911214, 0.007255841416075524, 0.007427788300814843, 0.007599440425756014, 0.007771491831017079, 0.007940210385740073, 0.008115982431613405, 0.008286230477311076, 0.008455728261315427, 0.008624828065636171, 0.0087938382520137, 0.008961934603559608, 0.009129309914478244, 0.009295705048569773, 0.009460895719293651, 0.009624512383898252, 0.009786590519239425, 0.009946995212091796, 0.010105592312872629, 0.010262212502414601, 0.010416818688520148, 0.010569268906811192, 0.010719396502249774, 0.010867082742078902, 0.011012274230511132, 0.011154883295408143, 0.01129473907939671, 0.011431766458575066, 0.011565861880187342, 0.011696890630696698, 0.011824548066976817, 0.011948823922340134, 0.012069629781346847, 0.012186937947306629, 0.012300432892104241, 0.01241055721228422, 0.012517086983512674, 0.012619772868365714, 0.01271694508250919, 0.012811738843612799, 0.012901614577029171, 0.012987520090940792, 0.013067705672196494, 0.013146659639966262, 0.013218602399208508, 0.013285987093409357, 0.013349032229359648, 0.013407929990549725, 0.013461999810303231, 0.013511437444384976, 0.013556082697096088, 0.013595835757053917, 0.013630499982440026, 0.01366023670087255, 0.013685042776887582, 0.013704903172994373, 0.013719772986706352, 0.013729721512429531, 0.01373472352074017, 0.01373472352074017, 0.013729721512429531, 0.013719772986706352, 0.013704903172994373, 0.013685042776887582, 0.01366023670087255, 0.013630499982440026, 0.013595835757053917, 0.013556082697096088, 0.013511437444384976, 0.013461999810303231, 0.013407929990549725, 0.013349032229359648, 0.013285987093409357, 0.013218602399208508, 0.013146659639966262, 0.013067705672196494, 0.012987520090940792, 0.012901614577029171, 0.012811738843612799, 0.01271694508250919, 0.012619772868365714, 0.012517086983512674, 0.01241055721228422, 0.012300432892104241, 0.012186937947306629, 0.012069629781346847, 0.011948823922340134, 0.011824548066976817, 0.011696890630696698, 0.011565861880187342, 0.011431766458575066, 0.01129473907939671, 0.011154883295408143, 0.011012274230511132, 0.010867082742078902, 0.010719396502249774, 0.010569268906811192, 0.010416818688520148, 0.010262212502414601, 0.010105592312872629, 0.009946995212091796, 0.009786590519239425, 0.009624512383898252, 0.009460895719293651, 0.009295705048569773, 0.009129309914478244, 0.008961934603559608, 0.0087938382520137, 0.008624828065636171, 0.008455728261315427, 0.008286230477311076, 0.008115982431613405, 0.007940210385740073, 0.007771491831017079, 0.007599440425756014, 0.007427788300814843, 0.007255841416075524, 0.007085185727911214, 0.006913918086775748, 0.006743241263261084, 0.006573347381526989, 0.006404404103216645, 0.006236075536115428, 0.006068673112862706, 0.005902264421456515, 0.005736960631925176, 0.00557279812512997, 0.005410043882397958, 0.005248795189805357, 0.005089107569792517, 0.004931017978539705, 0.00477464934326076, 0.004620059305184111, 0.004467271202856345, 0.004316384032044447, 0.004167535061341574, 0.004020837780560375, 0.003876285696289593, 0.00373401564369845, 0.003594116005810746, 0.00345667963318062, 0.0033216131163189126, 0.0031892620828723227, 0.003059760096689252, 0.0029332425986383416, 0.0028092893752555753, 0.0026886907797787993, 0.0025707750602413674, 0.0024546715656463027, 0.002324224442263978, 0.0022249923434846707, 0.002115750178775707, 0.0020102102191501834, 0.0019074086707092258, 0.0018082288964809644, 0
\ No newline at end of file
7, 0.005089107569792517, 0.004931017978539705, 0.00477464934326076, 0.004620059305184111, 0.004467271202856345, 0.004316384032044447, 0.004167535061341574, 0.004020837780560375, 0.003876285696289593, 0.00373401564369845, 0.003594116005810746, 0.00345667963318062, 0.0033216131163189126, 0.0031892620828723227, 0.003059760096689252, 0.0029332425986383416, 0.0028092893752555753, 0.0026886907797787993, 0.0025707750602413674, 0.0024546715656463027, 0.002324224442263978, 0.0022249923434846707, 0.002115750178775707, 0.0020102102191501834, 0.0019074086707092258, 0.0018082288964809644, 0.0017113538530254156, 0.0016175658016292192, 0.0015269066196715306, 0.0014394035452673572, 0.0013547197757430203, 0.0012730564419046215, 0.0011944092399743605, 0.0011188000414977899, 0.001046184181770156, 0.000976697360607544, 0.0009103261049980538, 0.00084702149975344, 0.0007867375202056556, 0.0007295120216703175, 0.00067534060229161, 0.0006241866818625697, 0.0005760959724897604, 0.0005311398297784606, 0.0004893648798719514, 0.00045068714217736007, 0.00041517688767673063, 0.0003828493219762104, 0.0003537347795633787, 0.0003276748319944884, 0.00030498547559247845, 0.0002857208679875607, 0.0002699368701027846, 0.0002570861260137623, 0.0002481761013286244, 0.00024263723882202515, 0.00024079274850113426, -0.007573012406345277
- 0.005089107569792517, 0.004931017978539705, 0.00477464934326076, 0.004620059305184111, 0.004467271202856345, 0.004316384032044447, 0.004167535061341574, 0.004020837780560375, 0.003876285696289593, 0.00373401564369845, 0.003594116005810746, 0.00345667963318062, 0.0033216131163189126, 0.0031892620828723227, 0.003059760096689252, 0.0029332425986383416, 0.0028092893752555753, 0.0026886907797787993, 0.0025707750602413674, 0.0024546715656463027, 0.002324224442263978, 0.0022249923434846707, 0.002115750178775707, 0.0020102102191501834, 0.0019074086707092258, 0.0018082288964809644, 0.0017113538530254156, 0.0016175658016292192, 0.0015269066196715306, 0.0014394035452673572, 0.0013547197757430203, 0.0012730564419046215, 0.0011944092399743605, 0.0011188000414977899, 0.001046184181770156, 0.000976697360607544, 0.0009103261049980538, 0.00084702149975344, 0.0007867375202056556, 0.0007295120216703175, 0.00067534060229161, 0.0006241866818625697, 0.0005760959724897604, 0.0005311398297784606, 0.0004893648798719514, 0.00045068714217736007, 0.00041517688767673063, 0.0003828493219762104, 0.0003537347795633787, 0.0003276748319944884, 0.00030498547559247845, 0.0002857208679875607, 0.0002699368701027846, 0.0002570861260137623, 0.0002481761013286244, 0.00024263723882202515, 0.00024079274850113426, -0.007573012406345277
+5189805357, 0.005089107569792517, 0.004931017978539705, 0.00477464934326076, 0.004620059305184111, 0.004467271202856345, 0.004316384032044447, 0.004167535061341574, 0.004020837780560375, 0.003876285696289593, 0.00373401564369845, 0.003594116005810746, 0.00345667963318062, 0.0033216131163189126, 0.0031892620828723227, 0.003059760096689252, 0.0029332425986383416, 0.0028092893752555753, 0.0026886907797787993, 0.0025707750602413674, 0.0024546715656463027, 0.002324224442263978, 0.0022249923434846707, 0.002115750178775707, 0.0020102102191501834, 0.0019074086707092258, 0.0018082288964809644, 0.0017113538530254156, 0.0016175658016292192, 0.0015269066196715306, 0.0014394035452673572, 0.0013547197757430203, 0.0012730564419046215, 0.0011944092399743605, 0.0011188000414977899, 0.001046184181770156, 0.000976697360607544, 0.0009103261049980538, 0.00084702149975344, 0.0007867375202056556, 0.0007295120216703175, 0.00067534060229161, 0.0006241866818625697, 0.0005760959724897604, 0.0005311398297784606, 0.0004893648798719514, 0.00045068714217736007, 0.00041517688767673063, 0.0003828493219762104, 0.0003537347795633787, 0.0003276748319944884, 0.00030498547559247845, 0.0002857208679875607, 0.0002699368701027846, 0.0002570861260137623, 0.0002481761013286244, 0.00024263723882202515, 0.00024079274850113426, -0.007573012406345277
78994388, -0.00041922406056782083, 0.0012010034203710784, 0.0006552234666252462, -0.0007096577214822187, -0.0006850628390191059, 0.00032465365599127654, 0.0005862297350582802, -0.00006832501012358436, -0.0004344444061086839, -0.00007473591299809917, 0.00027753923597010266, 0.00012753607518766694, -0.0001504708418330321, -0.00012648324239817438, 0.00006083206665324362, 0.0000961395818492714, -0.00001118322316939516, -0.00006163665493961978, -0.000011636477685383897, 0.00003091988960026406, 0.000014692437654954816, -0.000012481751035611902, -0.000011653029986124283, 0.0000017841093721093506, 0.000005239591854415941, 5.807441351521463e-7, -0.00000213110629785921, -0.00000136947295895967, -2.84059575423864e-7
-4388, -0.00041922406056782083, 0.0012010034203710784, 0.0006552234666252462, -0.0007096577214822187, -0.0006850628390191059, 0.00032465365599127654, 0.0005862297350582802, -0.00006832501012358436, -0.0004344444061086839, -0.00007473591299809917, 0.00027753923597010266, 0.00012753607518766694, -0.0001504708418330321, -0.00012648324239817438, 0.00006083206665324362, 0.0000961395818492714, -0.00001118322316939516, -0.00006163665493961978, -0.000011636477685383897, 0.00003091988960026406, 0.000014692437654954816, -0.000012481751035611902, -0.000011653029986124283, 0.0000017841093721093506, 0.000005239591854415941, 5.807441351521463e-7, -0.00000213110629785921, -0.00000136947295895967, -2.84059575423864e-7
+336, -0.0017446179378994388, -0.00041922406056782083, 0.0012010034203710784, 0.0006552234666252462, -0.0007096577214822187, -0.0006850628390191059, 0.00032465365599127654, 0.0005862297350582802, -0.00006832501012358436, -0.0004344444061086839, -0.00007473591299809917, 0.00027753923597010266, 0.00012753607518766694, -0.0001504708418330321, -0.00012648324239817438, 0.00006083206665324362, 0.0000961395818492714, -0.00001118322316939516, -0.00006163665493961978, -0.000011636477685383897, 0.00003091988960026406, 0.000014692437654954816, -0.000012481751035611902, -0.000011653029986124283, 0.0000017841093721093506, 0.000005239591854415941, 5.807441351521463e-7, -0.00000213110629785921, -0.00000136947295895967, -2.84059575423864e-7
1779, -0.03735668670551693, -0.0005458966005379449, 0.0578178869957579, 0.12496957303698586, 0.18372600900451644, 0.21795911568314993, 0.21795911568314993, 0.18372600900451644, 0.12496957303698586, 0.0578178869957579, -0.0005458966005379449, -0.03735668670551693, -0.04790631293501779, -0.036160130412882435, -0.01233979307221452, 0.011414259133477645, 0.02555053211054643, 0.026109899142542758, 0.01526523041211863, -0.0005292356782833587, -0.013786276388279539, -0.019193722858760427, -0.015510462180576574, -0.00554207852540761, 0.0055655403444453775, 0.012810645017913123, 0.013466881500422878, 0.007998600315936934, -0.0004986705357686102, -0.007935453568187856, -0.011124936147882954, -0.00908888688929085, -0.003263596560752136, 0.003376641721920036, 0.00778770755309392, 0.008213402548972962, 0.004842595616255233, -0.0004583930086451031, -0.0051353491910507984, -0.0071497618238720055, -0.005843180111542266, -0.0021053850268023615, 0.002164099554982996, 0.004999101428335298, 0.005254266475282044, 0.003046185830666762, -0.0004124431830693066, -0.0034548726172607498, -0.004750945120551563, -0.003874469283244301, -0.001415068708295585, 0.0013786588356217962, 0.003219398725098763, 0.0033649169125380706, 0.0019025392919524162, -0.0003642960983689493, -0.0023436048910665127, -0.00317200799245191, -0.0025836938014065975, -0.0009743823002432432, 0.000837174097496827, 0.0020180799074488486, 0.0020968295391595774, 0.0011425257824338887, -0.00031822317984990035, -0.0015812527530506791, -0.0020995520812018714, -0.0017133793271509106, -0.0006853292543951153, 0.0004602570434921762, 0.0011981314765901019, 0.0012391753523202087, 0.0006358082850902164, -0.00027554321698262794, -0.0010555177901930952, -0.001368894036877941, -0.0011250441730682327, -0.0004919858457618222, 0.00020580176646200433, 0.0006504775398685704, 0.0006717577010285365, 0.00030790928383371996, -0.00023554905807185743, -0.0006955854650565154, -0.0008768456304295432, -0.0007303801286775824, -0.0003593242009009715, 0.00004577001768172358, 0.0003015617300329922, 0.00031390651451180623, 0.00010787721721971545, -0.0001968527747134386, -0.00045235278384860993, -0.000550680089032831, -0.0004679330143401381, -0.00026298229853436046, -0.000041503003504151876, 0.00009819903503597289, 0.00010675981100488967, 2.4069038430437714e-7, -0.00015737268974254042, -0.00028781004597914193, -0.00033660459070401045, -0.00029242213522170924, -0.0001870435534541462, -0.00007376494795165521, -0.000001824861163195929, 0.000005858218684625342, -0.00004241909459592675, -0.00011458014625437172, -0.0001738448733058993, -0.00019443471041769651, -0.00017229784061896603, -0.00012208654155480072, -0.00006864404983689099, -0.00003337527183661095, -0.000026338754429996997, -0.000043204247279965386, -0.000070350790919461, -0.00009207287115371104, -0.00009817726370665003, -0.00008704299086494871, -0.00006494904958257674, -0.00004148092321827023, -0.000024937785475375726, -0.000018929805847104457, -0.000021726870316473222, -0.000028580071407296435, -0.00003356141383522181, -0.00003403970018224806, -0.000028297461945285203, -0.000020341389435584184, -0.000010486216859223391, -0.000005005316694254475
-, -0.03735668670551693, -0.0005458966005379449, 0.0578178869957579, 0.12496957303698586, 0.18372600900451644, 0.21795911568314993, 0.21795911568314993, 0.18372600900451644, 0.12496957303698586, 0.0578178869957579, -0.0005458966005379449, -0.03735668670551693, -0.04790631293501779, -0.036160130412882435, -0.01233979307221452, 0.011414259133477645, 0.02555053211054643, 0.026109899142542758, 0.01526523041211863, -0.0005292356782833587, -0.013786276388279539, -0.019193722858760427, -0.015510462180576574, -0.00554207852540761, 0.0055655403444453775, 0.012810645017913123, 0.013466881500422878, 0.007998600315936934, -0.0004986705357686102, -0.007935453568187856, -0.011124936147882954, -0.00908888688929085, -0.003263596560752136, 0.003376641721920036, 0.00778770755309392, 0.008213402548972962, 0.004842595616255233, -0.0004583930086451031, -0.0051353491910507984, -0.0071497618238720055, -0.005843180111542266, -0.0021053850268023615, 0.002164099554982996, 0.004999101428335298, 0.005254266475282044, 0.003046185830666762, -0.0004124431830693066, -0.0034548726172607498, -0.004750945120551563, -0.003874469283244301, -0.001415068708295585, 0.0013786588356217962, 0.003219398725098763, 0.0033649169125380706, 0.0019025392919524162, -0.0003642960983689493, -0.0023436048910665127, -0.00317200799245191, -0.0025836938014065975, -0.0009743823002432432, 0.000837174097496827, 0.0020180799074488486, 0.0020968295391595774, 0.0011425257824338887, -0.00031822317984990035, -0.0015812527530506791, -0.0020995520812018714, -0.0017133793271509106, -0.0006853292543951153, 0.0004602570434921762, 0.0011981314765901019, 0.0012391753523202087, 0.0006358082850902164, -0.00027554321698262794, -0.0010555177901930952, -0.001368894036877941, -0.0011250441730682327, -0.0004919858457618222, 0.00020580176646200433, 0.0006504775398685704, 0.0006717577010285365, 0.00030790928383371996, -0.00023554905807185743, -0.0006955854650565154, -0.0008768456304295432, -0.0007303801286775824, -0.0003593242009009715, 0.00004577001768172358, 0.0003015617300329922, 0.00031390651451180623, 0.00010787721721971545, -0.0001968527747134386, -0.00045235278384860993, -0.000550680089032831, -0.0004679330143401381, -0.00026298229853436046, -0.000041503003504151876, 0.00009819903503597289, 0.00010675981100488967, 2.4069038430437714e-7, -0.00015737268974254042, -0.00028781004597914193, -0.00033660459070401045, -0.00029242213522170924, -0.0001870435534541462, -0.00007376494795165521, -0.000001824861163195929, 0.000005858218684625342, -0.00004241909459592675, -0.00011458014625437172, -0.0001738448733058993, -0.00019443471041769651, -0.00017229784061896603, -0.00012208654155480072, -0.00006864404983689099, -0.00003337527183661095, -0.000026338754429996997, -0.000043204247279965386, -0.000070350790919461, -0.00009207287115371104, -0.00009817726370665003, -0.00008704299086494871, -0.00006494904958257674, -0.00004148092321827023, -0.000024937785475375726, -0.000018929805847104457, -0.000021726870316473222, -0.000028580071407296435, -0.00003356141383522181, -0.00003403970018224806, -0.000028297461945285203, -0.000020341389435584184, -0.000010486216859223391, -0.000005005316694254475
+60130412882435, -0.04790631293501779, -0.03735668670551693, -0.0005458966005379449, 0.0578178869957579, 0.12496957303698586, 0.18372600900451644, 0.21795911568314993, 0.21795911568314993, 0.18372600900451644, 0.12496957303698586, 0.0578178869957579, -0.0005458966005379449, -0.03735668670551693, -0.04790631293501779, -0.036160130412882435, -0.01233979307221452, 0.011414259133477645, 0.02555053211054643, 0.026109899142542758, 0.01526523041211863, -0.0005292356782833587, -0.013786276388279539, -0.019193722858760427, -0.015510462180576574, -0.00554207852540761, 0.0055655403444453775, 0.012810645017913123, 0.013466881500422878, 0.007998600315936934, -0.0004986705357686102, -0.007935453568187856, -0.011124936147882954, -0.00908888688929085, -0.003263596560752136, 0.003376641721920036, 0.00778770755309392, 0.008213402548972962, 0.004842595616255233, -0.0004583930086451031, -0.0051353491910507984, -0.0071497618238720055, -0.005843180111542266, -0.0021053850268023615, 0.002164099554982996, 0.004999101428335298, 0.005254266475282044, 0.003046185830666762, -0.0004124431830693066, -0.0034548726172607498, -0.004750945120551563, -0.003874469283244301, -0.001415068708295585, 0.0013786588356217962, 0.003219398725098763, 0.0033649169125380706, 0.0019025392919524162, -0.0003642960983689493, -0.0023436048910665127, -0.00317200799245191, -0.0025836938014065975, -0.0009743823002432432, 0.000837174097496827, 0.0020180799074488486, 0.0020968295391595774, 0.0011425257824338887, -0.00031822317984990035, -0.0015812527530506791, -0.0020995520812018714, -0.0017133793271509106, -0.0006853292543951153, 0.0004602570434921762, 0.0011981314765901019, 0.0012391753523202087, 0.0006358082850902164, -0.00027554321698262794, -0.0010555177901930952, -0.001368894036877941, -0.0011250441730682327, -0.0004919858457618222, 0.00020580176646200433, 0.0006504775398685704, 0.0006717577010285365, 0.00030790928383371996, -0.00023554905807185743, -0.0006955854650565154, -0.0008768456304295432, -0.0007303801286775824, -0.0003593242009009715, 0.00004577001768172358, 0.0003015617300329922, 0.00031390651451180623, 0.00010787721721971545, -0.0001968527747134386, -0.00045235278384860993, -0.000550680089032831, -0.0004679330143401381, -0.00026298229853436046, -0.000041503003504151876, 0.00009819903503597289, 0.00010675981100488967, 2.4069038430437714e-7, -0.00015737268974254042, -0.00028781004597914193, -0.00033660459070401045, -0.00029242213522170924, -0.0001870435534541462, -0.00007376494795165521, -0.000001824861163195929, 0.000005858218684625342, -0.00004241909459592675, -0.00011458014625437172, -0.0001738448733058993, -0.00019443471041769651, -0.00017229784061896603, -0.00012208654155480072, -0.00006864404983689099, -0.00003337527183661095, -0.000026338754429996997, -0.000043204247279965386, -0.000070350790919461, -0.00009207287115371104, -0.00009817726370665003, -0.00008704299086494871, -0.00006494904958257674, -0.00004148092321827023, -0.000024937785475375726, -0.000018929805847104457, -0.000021726870316473222, -0.000028580071407296435, -0.00003356141383522181, -0.00003403970018224806, -0.000028297461945285203, -0.000020341389435584184, -0.000010486216859223391, -0.000005005316694254475
358005, -0.0004962768841556523, -0.0005966792410792791, -0.0006363992327126103, -0.0006072812580573203, -0.0005078006712943802, -0.00034391453642163835, -0.0001291740152058233, 0.00011608199926386939, 0.0003663883172395964, 0.0005935643814352129, 0.0007697197860148682, 0.0008705060394986916, 0.0008782421413312541, 0.0007845404678866458, 0.0005921472961030223, 0.0003155390021514345, -0.00001975662025403667, -0.0003792242746719516, -0.0007226903878816747, -0.0010085916592065419, -0.0011987843551975912, -0.0012633390417589486, -0.0011847927602402282, -0.0009612078105002279, -0.000607656728473499, -0.00015580100244720835, 0.0003485912201162041, 0.0008499567444557006, 0.0012888238057625968, 0.0016085750487669262, 0.0017624573232133487, 0.0017198572703654494, 0.0014712649629561752, 0.0010309092850789008, 0.0004369297346610886, -0.0002514846038907312, -0.0009595058667715721, -0.0016045955886596882, -0.002105611566700304, -0.002392827139552557, -0.0024168530933362325, -0.00215621955374809, -0.0016217376891380843, -0.0008577023023227786, 0.00006118480472750677, 0.0010364584424907685, 0.001956049351551786, 0.002706696800527712, 0.00318733017834542, 0.003322096376141488, 0.0030709922507173265, 0.0024373280210738995, 0.0014701293295941087, 0.0002616176696267551, -0.0010608870493178752, -0.002347699681593795, -0.0034429894732297774, -0.004203029219555798, -0.00451398893736866, -0.004307677839041472, -0.0035726927213363046, -0.0023597776381211666, -0.0007800969761600126, 0.00100380173046076, 0.0027935634872831047, 0.0043761562977185555, 0.005547954061740437, 0.006139532362567163, 0.006038187372164252, 0.005205193104614497, 0.003685832364921369, 0.001610065959141185, -0.000816509624547802, -0.003331179568244694, -0.005640769473740277, -0.007453565321222198, -0.008513609412918493, -0.008633348531283494, -0.0077207439401804495, -0.005797651634024999, -0.003006470630061831, 0.00039645931697321107, 0.004060688288708085, 0.007573881722373314, 0.010503477916637444, 0.012443852783009171, 0.013064660267980682, 0.012154652149365373, 0.009656403107118496, 0.005687627159122434, 0.000545686660735971, -0.0053060804504155646, -0.011269885881064536, -0.016661104177372186, -0.02076782817847515, -0.022917127850131423, -0.022542073972735464, -0.01924294503235089, -0.012836088871532723, -0.0033855865368634104, 0.008786222880026725, 0.023111259021133423, 0.038810833745067747, 0.05495087979175688, 0.0705128544598909, 0.08447430461530625, 0.0958915908436123, 0.10397774191970133, 0.10816816138474043, 0.10816816138474043, 0.10397774191970133, 0.0958915908436123, 0.08447430461530625, 0.0705128544598909, 0.05495087979175688, 0.038810833745067747, 0.023111259021133423, 0.008786222880026725, -0.0033855865368634104, -0.012836088871532723, -0.01924294503235089, -0.022542073972735464, -0.022917127850131423, -0.02076782817847515, -0.016661104177372186, -0.011269885881064536, -0.0053060804504155646, 0.000545686660735971, 0.005687627159122434, 0.009656403107118496, 0.012154652149365373, 0.013064660267980682, 0.012443852783009171, 0.010503477916637444, 0.007573881722373314, 0.004060688288708085, 0.00039645931697321107, -0.003006470630061831, -0.005797651634024999, -0.0077207439401804495, -0.008633348531283494, -0.008513609412918493, -0.007453565321222198, -0.005640769473740277, -0.003331179568244694, -0.000816509624547802, 0.001610065959141185, 0.003685832364921369, 0.005205193104614497, 0.006038187372164252, 0.006139532362567163, 0.005547954061740437, 0.0043761562977185555, 0.0027935634872831047, 0.00100380173046076, -0.0007800969761600126, -0.0023597776381211666, -0.0035726927213363046, -0.004307677
\ No newline at end of file
};
-, -0.0004962768841556523, -0.0005966792410792791, -0.0006363992327126103, -0.0006072812580573203, -0.0005078006712943802, -0.00034391453642163835, -0.0001291740152058233, 0.00011608199926386939, 0.0003663883172395964, 0.0005935643814352129, 0.0007697197860148682, 0.0008705060394986916, 0.0008782421413312541, 0.0007845404678866458, 0.0005921472961030223, 0.0003155390021514345, -0.00001975662025403667, -0.0003792242746719516, -0.0007226903878816747, -0.0010085916592065419, -0.0011987843551975912, -0.0012633390417589486, -0.0011847927602402282, -0.0009612078105002279, -0.000607656728473499, -0.00015580100244720835, 0.0003485912201162041, 0.0008499567444557006, 0.0012888238057625968, 0.0016085750487669262, 0.0017624573232133487, 0.0017198572703654494, 0.0014712649629561752, 0.0010309092850789008, 0.0004369297346610886, -0.0002514846038907312, -0.0009595058667715721, -0.0016045955886596882, -0.002105611566700304, -0.002392827139552557, -0.0024168530933362325, -0.00215621955374809, -0.0016217376891380843, -0.0008577023023227786, 0.00006118480472750677, 0.0010364584424907685, 0.001956049351551786, 0.002706696800527712, 0.00318733017834542, 0.003322096376141488, 0.0030709922507173265, 0.0024373280210738995, 0.0014701293295941087, 0.0002616176696267551, -0.0010608870493178752, -0.002347699681593795, -0.0034429894732297774, -0.004203029219555798, -0.00451398893736866, -0.004307677839041472, -0.0035726927213363046, -0.0023597776381211666, -0.0007800969761600126, 0.00100380173046076, 0.0027935634872831047, 0.0043761562977185555, 0.005547954061740437, 0.006139532362567163, 0.006038187372164252, 0.005205193104614497, 0.003685832364921369, 0.001610065959141185, -0.000816509624547802, -0.003331179568244694, -0.005640769473740277, -0.007453565321222198, -0.008513609412918493, -0.008633348531283494, -0.0077207439401804495, -0.005797651634024999, -0.003006470630061831, 0.00039645931697321107, 0.004060688288708085, 0.007573881722373314, 0.010503477916637444, 0.012443852783009171, 0.013064660267980682, 0.012154652149365373, 0.009656403107118496, 0.005687627159122434, 0.000545686660735971, -0.0053060804504155646, -0.011269885881064536, -0.016661104177372186, -0.02076782817847515, -0.022917127850131423, -0.022542073972735464, -0.01924294503235089, -0.012836088871532723, -0.0033855865368634104, 0.008786222880026725, 0.023111259021133423, 0.038810833745067747, 0.05495087979175688, 0.0705128544598909, 0.08447430461530625, 0.0958915908436123, 0.10397774191970133, 0.10816816138474043, 0.10816816138474043, 0.10397774191970133, 0.0958915908436123, 0.08447430461530625, 0.0705128544598909, 0.05495087979175688, 0.038810833745067747, 0.023111259021133423, 0.008786222880026725, -0.0033855865368634104, -0.012836088871532723, -0.01924294503235089, -0.022542073972735464, -0.022917127850131423, -0.02076782817847515, -0.016661104177372186, -0.011269885881064536, -0.0053060804504155646, 0.000545686660735971, 0.005687627159122434, 0.009656403107118496, 0.012154652149365373, 0.013064660267980682, 0.012443852783009171, 0.010503477916637444, 0.007573881722373314, 0.004060688288708085, 0.00039645931697321107, -0.003006470630061831, -0.005797651634024999, -0.0077207439401804495, -0.008633348531283494, -0.008513609412918493, -0.007453565321222198, -0.005640769473740277, -0.003331179568244694, -0.000816509624547802, 0.001610065959141185, 0.003685832364921369, 0.005205193104614497, 0.006038187372164252, 0.006139532362567163, 0.005547954061740437, 0.0043761562977185555, 0.0027935634872831047, 0.00100380173046076, -0.0007800969761600126, -0.0023597776381211666, -0.0035726927213363046, -0.004307677839041
\ No newline at end of file
+ -0.00017002451555728345, -0.00034851615605358005, -0.0004962768841556523, -0.0005966792410792791, -0.0006363992327126103, -0.0006072812580573203, -0.0005078006712943802, -0.00034391453642163835, -0.0001291740152058233, 0.00011608199926386939, 0.0003663883172395964, 0.0005935643814352129, 0.0007697197860148682, 0.0008705060394986916, 0.0008782421413312541, 0.0007845404678866458, 0.0005921472961030223, 0.0003155390021514345, -0.00001975662025403667, -0.0003792242746719516, -0.0007226903878816747, -0.0010085916592065419, -0.0011987843551975912, -0.0012633390417589486, -0.0011847927602402282, -0.0009612078105002279, -0.000607656728473499, -0.00015580100244720835, 0.0003485912201162041, 0.0008499567444557006, 0.0012888238057625968, 0.0016085750487669262, 0.0017624573232133487, 0.0017198572703654494, 0.0014712649629561752, 0.0010309092850789008, 0.0004369297346610886, -0.0002514846038907312, -0.0009595058667715721, -0.0016045955886596882, -0.002105611566700304, -0.002392827139552557, -0.0024168530933362325, -0.00215621955374809, -0.0016217376891380843, -0.0008577023023227786, 0.00006118480472750677, 0.0010364584424907685, 0.001956049351551786, 0.002706696800527712, 0.00318733017834542, 0.003322096376141488, 0.0030709922507173265, 0.0024373280210738995, 0.0014701293295941087, 0.0002616176696267551, -0.0010608870493178752, -0.002347699681593795, -0.0034429894732297774, -0.004203029219555798, -0.00451398893736866, -0.004307677839041472, -0.0035726927213363046, -0.0023597776381211666, -0.0007800969761600126, 0.00100380173046076, 0.0027935634872831047, 0.0043761562977185555, 0.005547954061740437, 0.006139532362567163, 0.006038187372164252, 0.005205193104614497, 0.003685832364921369, 0.001610065959141185, -0.000816509624547802, -0.003331179568244694, -0.005640769473740277, -0.007453565321222198, -0.008513609412918493, -0.008633348531283494, -0.0077207439401804495, -0.005797651634024999, -0.003006470630061831, 0.00039645931697321107, 0.004060688288708085, 0.007573881722373314, 0.010503477916637444, 0.012443852783009171, 0.013064660267980682, 0.012154652149365373, 0.009656403107118496, 0.005687627159122434, 0.000545686660735971, -0.0053060804504155646, -0.011269885881064536, -0.016661104177372186, -0.02076782817847515, -0.022917127850131423, -0.022542073972735464, -0.01924294503235089, -0.012836088871532723, -0.0033855865368634104, 0.008786222880026725, 0.023111259021133423, 0.038810833745067747, 0.05495087979175688, 0.0705128544598909, 0.08447430461530625, 0.0958915908436123, 0.10397774191970133, 0.10816816138474043, 0.10816816138474043, 0.10397774191970133, 0.0958915908436123, 0.08447430461530625, 0.0705128544598909, 0.05495087979175688, 0.038810833745067747, 0.023111259021133423, 0.008786222880026725, -0.0033855865368634104, -0.012836088871532723, -0.01924294503235089, -0.022542073972735464, -0.022917127850131423, -0.02076782817847515, -0.016661104177372186, -0.011269885881064536, -0.0053060804504155646, 0.000545686660735971, 0.005687627159122434, 0.009656403107118496, 0.012154652149365373, 0.013064660267980682, 0.012443852783009171, 0.010503477916637444, 0.007573881722373314, 0.004060688288708085, 0.00039645931697321107, -0.003006470630061831, -0.005797651634024999, -0.0077207439401804495, -0.008633348531283494, -0.008513609412918493, -0.007453565321222198, -0.005640769473740277, -0.003331179568244694, -0.000816509624547802, 0.001610065959141185, 0.003685832364921369, 0.005205193104614497, 0.006038187372164252, 0.006139532362567163, 0.005547954061740437, 0.0043761562977185555, 0.0027935634872831047, 0.00100380173046076, -0.0007800969761600126, -0.00235977763812116
\ No newline at end of file
472, -0.00451398893736866, -0.004203029219555798, -0.0034429894732297774, -0.002347699681593795, -0.0010608870493178752, 0.0002616176696267551, 0.0014701293295941087, 0.0024373280210738995, 0.0030709922507173265, 0.003322096376141488, 0.00318733017834542, 0.002706696800527712, 0.001956049351551786, 0.0010364584424907685, 0.00006118480472750677, -0.0008577023023227786, -0.0016217376891380843, -0.00215621955374809, -0.0024168530933362325, -0.002392827139552557, -0.002105611566700304, -0.0016045955886596882, -0.0009595058667715721, -0.0002514846038907312, 0.0004369297346610886, 0.0010309092850789008, 0.0014712649629561752, 0.0017198572703654494, 0.0017624573232133487, 0.0016085750487669262, 0.0012888238057625968, 0.0008499567444557006, 0.0003485912201162041, -0.00015580100244720835, -0.000607656728473499, -0.0009612078105002279, -0.0011847927602402282, -0.0012633390417589486, -0.0011987843551975912, -0.0010085916592065419, -0.0007226903878816747, -0.0003792242746719516, -0.00001975662025403667, 0.0003155390021514345, 0.0005921472961030223, 0.0007845404678866458, 0.0008782421413312541, 0.0008705060394986916, 0.0007697197860148682, 0.0005935643814352129, 0.0003663883172395964, 0.00011608199926386939, -0.0001291740152058233, -0.00034391453642163835, -0.0005078006712943802, -0.0006072812580573203, -0.0006363992327126103, -0.0005966792410792791, -0.0004962768841556523, -0.00034851615605358005, -0.00017002451555728345, 0.000021269501878054377, 0.00020804636935322743, 0.00037520607336543075, 0.0005111129662557197, 0.0006082918945412483, 0.0006636425833116022, 0.0006780841482803052, 0.0006561179367621888, 0.0006044238440905041, 0.0005319258847527823, 0.00044625388761023913, 0.0003584099608999308, 0.0002696485066015727, 0.00019849261073490482, 0.00011952623149469952, 0.00009875809063575779, 0.00003151783634577697
- -0.00451398893736866, -0.004203029219555798, -0.0034429894732297774, -0.002347699681593795, -0.0010608870493178752, 0.0002616176696267551, 0.0014701293295941087, 0.0024373280210738995, 0.0030709922507173265, 0.003322096376141488, 0.00318733017834542, 0.002706696800527712, 0.001956049351551786, 0.0010364584424907685, 0.00006118480472750677, -0.0008577023023227786, -0.0016217376891380843, -0.00215621955374809, -0.0024168530933362325, -0.002392827139552557, -0.002105611566700304, -0.0016045955886596882, -0.0009595058667715721, -0.0002514846038907312, 0.0004369297346610886, 0.0010309092850789008, 0.0014712649629561752, 0.0017198572703654494, 0.0017624573232133487, 0.0016085750487669262, 0.0012888238057625968, 0.0008499567444557006, 0.0003485912201162041, -0.00015580100244720835, -0.000607656728473499, -0.0009612078105002279, -0.0011847927602402282, -0.0012633390417589486, -0.0011987843551975912, -0.0010085916592065419, -0.0007226903878816747, -0.0003792242746719516, -0.00001975662025403667, 0.0003155390021514345, 0.0005921472961030223, 0.0007845404678866458, 0.0008782421413312541, 0.0008705060394986916, 0.0007697197860148682, 0.0005935643814352129, 0.0003663883172395964, 0.00011608199926386939, -0.0001291740152058233, -0.00034391453642163835, -0.0005078006712943802, -0.0006072812580573203, -0.0006363992327126103, -0.0005966792410792791, -0.0004962768841556523, -0.00034851615605358005, -0.00017002451555728345, 0.000021269501878054377, 0.00020804636935322743, 0.00037520607336543075, 0.0005111129662557197, 0.0006082918945412483, 0.0006636425833116022, 0.0006780841482803052, 0.0006561179367621888, 0.0006044238440905041, 0.0005319258847527823, 0.00044625388761023913, 0.0003584099608999308, 0.0002696485066015727, 0.00019849261073490482, 0.00011952623149469952, 0.00009875809063575779, 0.00003151783634577697
+ -0.0035726927213363046, -0.004307677839041472, -0.00451398893736866, -0.004203029219555798, -0.0034429894732297774, -0.002347699681593795, -0.0010608870493178752, 0.0002616176696267551, 0.0014701293295941087, 0.0024373280210738995, 0.0030709922507173265, 0.003322096376141488, 0.00318733017834542, 0.002706696800527712, 0.001956049351551786, 0.0010364584424907685, 0.00006118480472750677, -0.0008577023023227786, -0.0016217376891380843, -0.00215621955374809, -0.0024168530933362325, -0.002392827139552557, -0.002105611566700304, -0.0016045955886596882, -0.0009595058667715721, -0.0002514846038907312, 0.0004369297346610886, 0.0010309092850789008, 0.0014712649629561752, 0.0017198572703654494, 0.0017624573232133487, 0.0016085750487669262, 0.0012888238057625968, 0.0008499567444557006, 0.0003485912201162041, -0.00015580100244720835, -0.000607656728473499, -0.0009612078105002279, -0.0011847927602402282, -0.0012633390417589486, -0.0011987843551975912, -0.0010085916592065419, -0.0007226903878816747, -0.0003792242746719516, -0.00001975662025403667, 0.0003155390021514345, 0.0005921472961030223, 0.0007845404678866458, 0.0008782421413312541, 0.0008705060394986916, 0.0007697197860148682, 0.0005935643814352129, 0.0003663883172395964, 0.00011608199926386939, -0.0001291740152058233, -0.00034391453642163835, -0.0005078006712943802, -0.0006072812580573203, -0.0006363992327126103, -0.0005966792410792791, -0.0004962768841556523, -0.00034851615605358005, -0.00017002451555728345, 0.000021269501878054377, 0.00020804636935322743, 0.00037520607336543075, 0.0005111129662557197, 0.0006082918945412483, 0.0006636425833116022, 0.0006780841482803052, 0.0006561179367621888, 0.0006044238440905041, 0.0005319258847527823, 0.00044625388761023913, 0.0003584099608999308, 0.0002696485066015727, 0.00019849261073490482, 0.00011952623149469952, 0.00009875809063575779, 0.00003151783634577697
992854616, -0.00074329154026803, -0.00069943732077003, -0.0006283153390612298, -0.0005317674541381928, -0.0004122736350806254, -0.0002728965175373041, -0.00011721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106
\ No newline at end of file
};
-616, -0.00074329154026803, -0.00069943732077003, -0.0006283153390612298, -0.0005317674541381928, -0.0004122736350806254, -0.0002728965175373041, -0.00011721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767
\ No newline at end of file
+28976477190042, -0.0007451789241688792, -0.0007587025992854616, -0.00074329154026803, -0.00069943732077003, -0.0006283153390612298, -0.0005317674541381928, -0.0004122736350806254, -0.0002728965175373041, -0.00011721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.0
\ No newline at end of file
11721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.0016
\ No newline at end of file
};
-98154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.0016211002
\ No newline at end of file
+25151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214,
\ No newline at end of file
05829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.01495836587295
\ No newline at end of file
-829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.0149583658729532
\ No newline at end of file
+.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.0334441505881633
\ No newline at end of file
8623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.03344415058816331, 0.03684815553847075, 0.04002735371317269, 0.042931503142136666, 0.04551426282729147, 0.04773408588853776, 0.0495550301
\ No newline at end of file
};
@@ -3326,7 +3326,7 @@
072217f, 0.072136f, 0.072055f, 0.071974f,
0.071894f, 0.071813f, 0.071732f, 0.071652f, 0.071571f, 0.07149f, 0.07141f, 0.071329f, 0.071248f, 0.071168f, 0.071087f, 0.071006f, 0.070926f, 0.070845f, 0.070764f, 0.070684f, 0.070603f, 0.070522f, 0.070442f, 0.070361f,
0.070281f, 0.0702f, 0.070119f, 0.070039f, 0.069958f, 0.069878f, 0.069797f, 0.069716f, 0.069636f, 0.069555f, 0.069475f, 0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
- 0.068991f, 0.068911f, 0.06883f, 0.06875f,
+6f, 0.069636f, 0.069555f, 0.069475f, 0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
0.068669f, 0.068589f, 0.068508f, 0.068428f, 0.068347f, 0.068267f, 0.068186f, 0.068106f, 0.068025f, 0.067945f, 0.067864f, 0.067784f, 0.067703f, 0.067623f, 0.067542f, 0.067462f, 0.067381f, 0.067301f, 0.06722f, 0.06714f,
0.06706f, 0.066979f, 0.066899f, 0.066818f, 0.066738f, 0.066657f, 0.066577f, 0.066497f, 0.066416f, 0.066336f, 0.066255f, 0.066175f, 0.066095f, 0.066014f, 0.065934f, 0.065853f, 0.065773f, 0.065693f, 0.065612f, 0.065532f,
0.065452f, 0.065371f, 0.065291f, 0.065211f, 0.06513f, 0.06505f, 0.06497f, 0.064889f, 0.064809f, 0.064729f, 0.064648f, 0.064568f, 0.064488f, 0.064408f, 0.064327f, 0.064247f, 0.064167f, 0.064086f, 0.064006f, 0.063926f,
@@ -3376,7 +3376,7 @@
94188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
-0.195015f, -0.195066f, -0.195118f, -0.19517f, -0.195221f, -0.195273f, -0.195324f, -0.195376f, -0.195427f, -0.195479f, -0.19553f, -0.195582f, -0.195633f, -0.195685f, -0.195736f, -0.195788f, -0.195839f, -0.19589f, -0.195942f, -0.195993f,
-0.196045f, -0.196096f, -0.196147f, -0.196199f, -0.19625f, -0.196301f, -0.196353f, -0.196404f, -0.196455f, -0.196507f, -0.196558f, -0.196609f, -0.196661f, -0.196712f, -0.196763f, -0.196814f, -0.196866f, -0.196917f, -0.196968f, -0.197019f,
--0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
+77f, -0.193929f,
f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
-0.195015f, -0.195066f, -0.195118f, -0.19517f, -0.195221f, -0.195273f, -0.195324f, -0.195376f, -0.195427f, -0.195479f, -0.19553f, -0.195582f, -0.195633f, -0.195685f, -0.195736f, -0.195788f, -0.195839f, -0.19589f, -0.195942f, -0.195993f,
-0.196045f, -0.196096f, -0.196147f, -0.196199f, -0.19625f, -0.196301f, -0.196353f, -0.196404f, -0.196455f, -0.196507f, -0.196558f, -0.196609f, -0.196661f, -0.196712f, -0.196763f, -0.196814f, -0.196866f, -0.196917f, -0.196968f, -0.197019f,
@@ -3424,7 +3424,7 @@
05985f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.491856f, 0.493845f, 0.49
\ No newline at end of file
},
-507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.491856f, 0.493845f, 0.494333f, 0.4939
\ No newline at end of file
+20079f, 0.201276f, 0.202755f, 0.20363f, 0.203659f, 0.204495f, 0.205985f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488
\ No newline at end of file
, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.491856f, 0.493845f, 0.494333f, 0.493941f, 0.495268f, 0.497065f, 0.497019f, 0.496949
\ No newline at end of file
},
@@ -3473,7 +3473,7 @@
2f, 0.108576f, 0.108825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.3940
\ No newline at end of file
},
-8576f, 0.108825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.3
\ No newline at end of file
+6839f, 0.107696f, 0.108228f, 0.108477f, 0.108533f, 0.10852f, 0.108576f, 0.108825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.39
\ No newline at end of file
0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.394747f, 0.395923f, 0.397478f, 0.399273f, 0.401129f
\ No newline at end of file
},
@@ -6753,7 +6753,7 @@
f, 0.919797f, 0.919768f, 0.919739f, 0.91971f, 0.91968f, 0.919651f, 0.919622f, 0.919593f, 0.919563f, 0.919534f, 0.919505f, 0.919475f, 0.919446f, 0.919417f, 0.919388f, 0.919358f, 0.919329f,
0.9193f, 0.919271f, 0.919241f, 0.919212f, 0.919183f, 0.919154f, 0.919124f, 0.919095f, 0.919066f, 0.919037f, 0.919007f, 0.918978f, 0.918949f, 0.91892f, 0.91889f, 0.918861f, 0.918832f, 0.918803f, 0.918773f, 0.918744f,
0.918715f, 0.918686f, 0.918656f, 0.918627f, 0.918598f, 0.918569f, 0.918539f, 0.91851f, 0.918481f, 0.918452f, 0.918422f, 0.918393f, 0.918364f, 0.918335f, 0.918305f, 0.918276f, 0.918247f, 0.918218f, 0.918188f, 0.918159f,
-9534f, 0.919505f, 0.919475f, 0.919446f, 0.919417f, 0.919388f, 0.919358f, 0.919329f,
+ 0.919768f, 0.919739f, 0.91971f, 0.91968f, 0.919651f, 0.919622f, 0.919593f, 0.919563f, 0.919534f, 0.919505f, 0.919475f, 0.919446f, 0.919417f, 0.919388f, 0.919358f, 0.919329f,
.919358f, 0.919329f,
0.9193f, 0.919271f, 0.919241f, 0.919212f, 0.919183f, 0.919154f, 0.919124f, 0.919095f, 0.919066f, 0.919037f, 0.919007f, 0.918978f, 0.918949f, 0.91892f, 0.91889f, 0.918861f, 0.918832f, 0.918803f, 0.918773f, 0.918744f,
0.918715f, 0.918686f, 0.918656f, 0.918627f, 0.918598f, 0.918569f, 0.918539f, 0.91851f, 0.918481f, 0.918452f, 0.918422f, 0.918393f, 0.918364f, 0.918335f, 0.918305f, 0.918276f, 0.918247f, 0.918218f, 0.918188f, 0.918159f,
@@ -10033,7 +10033,7 @@
3.96467f, 3.963232f, 3.961794f, 3.960358f, 3.958922f,
3.957488f, 3.956055f, 3.954622f, 3.953191f, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
3.929017f, 3.927604f, 3.926192f, 3.924781f, 3.923372f, 3.921963f, 3.920555f, 3.919148f, 3.917743f, 3.916338f, 3.914934f, 3.913532f, 3.91213f, 3.910729f, 3.90933f, 3.907931f, 3.906533f, 3.905136f, 3.903741f, 3.902346f,
-778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
+.953191f, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
3.934678f, 3.933261f, 3.931845f, 3.930431f,
3.929017f, 3.927604f, 3.926192f, 3.924781f, 3.923372f, 3.921963f, 3.920555f, 3.919148f, 3.917743f, 3.916338f, 3.914934f, 3.913532f, 3.91213f, 3.910729f, 3.90933f, 3.907931f, 3.906533f, 3.905136f, 3.903741f, 3.902346f,
3.900952f, 3.89956f, 3.898168f, 3.896777f, 3.895388f, 3.893999f, 3.892611f, 3.891224f, 3.889839f, 3.888454f, 3.88707f, 3.885687f, 3.884305f, 3.882925f, 3.881545f, 3.880166f, 3.878788f, 3.877411f, 3.876035f, 3.87466f,
@@ -13936,7 +13936,7 @@
.932255f,
-0.932247f, -0.932239f, -0.932231f, -0.932223f, -0.932215f, -0.932207f, -0.932199f, -0.932191f, -0.932183f, -0.932175f, -0.932167f, -0.932159f, -0.932151f, -0.932143f, -0.932135f, -0.932127f, -0.932119f, -0.932111f, -0.932103f, -0.932095f,
-0.932087f, -0.932079f, -0.932071f, -0.932063f, -0.932055f, -0.932047f, -0.932039f, -0.932031f, -0.932023f, -0.932015f, -0.932007f, -0.931999f, -0.931991f, -0.931983f, -0.931975f, -0.931967f, -0.931959f, -0.931951f, -0.931943f, -0.931935f,
-0.932247f, -0.932239f, -0.932231f, -0.932223f, -0.932215f, -0.932207f, -0.932199f, -0.932191f, -0.932183f, -0.932175f, -0.932167f, -0.932159f, -0.932151f, -0.932143f, -0.932135f, -0.932127f, -0.932119f, -0.932111f, -0.932103f, -0.932095f,
+11f, -0.932303f, -0.932295f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
f,
-0.932087f, -0.932079f, -0.932071f, -0.932063f, -0.932055f, -0.932047f, -0.932039f, -0.932031f, -0.932023f, -0.932015f, -0.932007f, -0.931999f, -0.931991f, -0.931983f, -0.931975f, -0.931967f, -0.931959f, -0.931951f, -0.931943f, -0.931935f,
-0.931927f, -0.931919f, -0.931911f, -0.931903f, -0.931895f, -0.931887f, -0.931879f, -0.931871f, -0.931863f, -0.931855f, -0.931847f, -0.931839f, -0.931831f, -0.931823f, -0.931815f, -0.931807f, -0.931798f, -0.93179f, -0.931782f, -0.931774f,