@@ -27,6 +27,7 @@ | |||
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) | |||
# pragma GCC diagnostic push | |||
# pragma GCC diagnostic ignored "-Wconversion" | |||
# pragma GCC diagnostic ignored "-Wdouble-promotion" | |||
# pragma GCC diagnostic ignored "-Weffc++" | |||
# pragma GCC diagnostic ignored "-Wfloat-equal" | |||
@@ -28,6 +28,7 @@ | |||
#ifdef USING_JUCE | |||
# if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) | |||
# pragma GCC diagnostic push | |||
# pragma GCC diagnostic ignored "-Wconversion" | |||
# pragma GCC diagnostic ignored "-Wdouble-promotion" | |||
# pragma GCC diagnostic ignored "-Weffc++" | |||
# pragma GCC diagnostic ignored "-Wfloat-equal" | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -69,22 +69,22 @@ public: | |||
class BigEndian | |||
{ | |||
public: | |||
template <class SampleFormatType> static inline float getAsFloat (SampleFormatType& s) noexcept { return s.getAsFloatBE(); } | |||
template <class SampleFormatType> static inline void setAsFloat (SampleFormatType& s, float newValue) noexcept { s.setAsFloatBE (newValue); } | |||
template <class SampleFormatType> static inline int32 getAsInt32 (SampleFormatType& s) noexcept { return s.getAsInt32BE(); } | |||
template <class SampleFormatType> static inline void setAsInt32 (SampleFormatType& s, int32 newValue) noexcept { s.setAsInt32BE (newValue); } | |||
template <class SourceType, class DestType> static inline void copyFrom (DestType& dest, SourceType& source) noexcept { dest.copyFromBE (source); } | |||
template <class SampleFormatType> static float getAsFloat (SampleFormatType& s) noexcept { return s.getAsFloatBE(); } | |||
template <class SampleFormatType> static void setAsFloat (SampleFormatType& s, float newValue) noexcept { s.setAsFloatBE (newValue); } | |||
template <class SampleFormatType> static int32 getAsInt32 (SampleFormatType& s) noexcept { return s.getAsInt32BE(); } | |||
template <class SampleFormatType> static void setAsInt32 (SampleFormatType& s, int32 newValue) noexcept { s.setAsInt32BE (newValue); } | |||
template <class SourceType, class DestType> static void copyFrom (DestType& dest, SourceType& source) noexcept { dest.copyFromBE (source); } | |||
enum { isBigEndian = 1 }; | |||
}; | |||
class LittleEndian | |||
{ | |||
public: | |||
template <class SampleFormatType> static inline float getAsFloat (SampleFormatType& s) noexcept { return s.getAsFloatLE(); } | |||
template <class SampleFormatType> static inline void setAsFloat (SampleFormatType& s, float newValue) noexcept { s.setAsFloatLE (newValue); } | |||
template <class SampleFormatType> static inline int32 getAsInt32 (SampleFormatType& s) noexcept { return s.getAsInt32LE(); } | |||
template <class SampleFormatType> static inline void setAsInt32 (SampleFormatType& s, int32 newValue) noexcept { s.setAsInt32LE (newValue); } | |||
template <class SourceType, class DestType> static inline void copyFrom (DestType& dest, SourceType& source) noexcept { dest.copyFromLE (source); } | |||
template <class SampleFormatType> static float getAsFloat (SampleFormatType& s) noexcept { return s.getAsFloatLE(); } | |||
template <class SampleFormatType> static void setAsFloat (SampleFormatType& s, float newValue) noexcept { s.setAsFloatLE (newValue); } | |||
template <class SampleFormatType> static int32 getAsInt32 (SampleFormatType& s) noexcept { return s.getAsInt32LE(); } | |||
template <class SampleFormatType> static void setAsInt32 (SampleFormatType& s, int32 newValue) noexcept { s.setAsInt32LE (newValue); } | |||
template <class SourceType, class DestType> static void copyFrom (DestType& dest, SourceType& source) noexcept { dest.copyFromLE (source); } | |||
enum { isBigEndian = 0 }; | |||
}; | |||
@@ -284,7 +284,7 @@ public: | |||
template <class SampleFormatType> inline void advanceData (SampleFormatType& s) noexcept { s.advance(); } | |||
template <class SampleFormatType> inline void advanceDataBy (SampleFormatType& s, int numSamples) noexcept { s.skip (numSamples); } | |||
template <class SampleFormatType> inline void clear (SampleFormatType& s, int numSamples) noexcept { s.clearMultiple (numSamples); } | |||
template <class SampleFormatType> inline static int getNumBytesBetweenSamples (const SampleFormatType&) noexcept { return SampleFormatType::bytesPerSample; } | |||
template <class SampleFormatType> static int getNumBytesBetweenSamples (const SampleFormatType&) noexcept { return SampleFormatType::bytesPerSample; } | |||
enum { isInterleavedType = 0, numInterleavedChannels = 1 }; | |||
}; | |||
@@ -309,7 +309,7 @@ public: | |||
{ | |||
public: | |||
using VoidType = void; | |||
static inline void* toVoidPtr (VoidType* v) noexcept { return v; } | |||
static void* toVoidPtr (VoidType* v) noexcept { return v; } | |||
enum { isConst = 0 }; | |||
}; | |||
@@ -317,7 +317,7 @@ public: | |||
{ | |||
public: | |||
using VoidType = const void; | |||
static inline void* toVoidPtr (VoidType* v) noexcept { return const_cast<void*> (v); } | |||
static void* toVoidPtr (VoidType* v) noexcept { return const_cast<void*> (v); } | |||
enum { isConst = 1 }; | |||
}; | |||
#endif | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -30,7 +30,7 @@ namespace FloatVectorHelpers | |||
#define JUCE_INCREMENT_DEST dest += (16 / sizeof (*dest)); | |||
#if JUCE_USE_SSE_INTRINSICS | |||
inline static bool isAligned (const void* p) noexcept | |||
static bool isAligned (const void* p) noexcept | |||
{ | |||
return (((pointer_sized_int) p) & 15) == 0; | |||
} | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -59,7 +59,8 @@ | |||
#include "buffers/juce_AudioProcessLoadMeasurer.cpp" | |||
#include "utilities/juce_IIRFilter.cpp" | |||
#include "utilities/juce_LagrangeInterpolator.cpp" | |||
#include "utilities/juce_CatmullRomInterpolator.cpp" | |||
#include "utilities/juce_WindowedSincInterpolator.cpp" | |||
#include "utilities/juce_Interpolators.cpp" | |||
#include "utilities/juce_SmoothedValue.cpp" | |||
#include "midi/juce_MidiBuffer.cpp" | |||
#include "midi/juce_MidiFile.cpp" | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -88,8 +88,8 @@ | |||
#include "buffers/juce_AudioProcessLoadMeasurer.h" | |||
#include "utilities/juce_Decibels.h" | |||
#include "utilities/juce_IIRFilter.h" | |||
#include "utilities/juce_LagrangeInterpolator.h" | |||
#include "utilities/juce_CatmullRomInterpolator.h" | |||
#include "utilities/juce_GenericInterpolator.h" | |||
#include "utilities/juce_Interpolators.h" | |||
#include "utilities/juce_SmoothedValue.h" | |||
#include "utilities/juce_Reverb.h" | |||
#include "utilities/juce_ADSR.h" | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -24,7 +24,7 @@ namespace juce | |||
{ | |||
MemoryAudioSource::MemoryAudioSource (AudioBuffer<float>& bufferToUse, bool copyMemory, bool shouldLoop) | |||
: isLooping (shouldLoop) | |||
: isCurrentlyLooping (shouldLoop) | |||
{ | |||
if (copyMemory) | |||
buffer.makeCopyOf (bufferToUse); | |||
@@ -50,7 +50,7 @@ void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferT | |||
auto n = buffer.getNumSamples(), m = bufferToFill.numSamples; | |||
int i; | |||
for (i = position; (i < n || isLooping) && (pos < m); i += max) | |||
for (i = position; (i < n || isCurrentlyLooping) && (pos < m); i += max) | |||
{ | |||
max = jmin (m - pos, n - (i % n)); | |||
@@ -70,4 +70,31 @@ void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferT | |||
position = (i % n); | |||
} | |||
//============================================================================== | |||
void MemoryAudioSource::setNextReadPosition (int64 newPosition) | |||
{ | |||
position = (int) newPosition; | |||
} | |||
int64 MemoryAudioSource::getNextReadPosition() const | |||
{ | |||
return position; | |||
} | |||
int64 MemoryAudioSource::getTotalLength() const | |||
{ | |||
return buffer.getNumSamples(); | |||
} | |||
//============================================================================== | |||
bool MemoryAudioSource::isLooping() const | |||
{ | |||
return isCurrentlyLooping; | |||
} | |||
void MemoryAudioSource::setLooping (bool shouldLoop) | |||
{ | |||
isCurrentlyLooping = shouldLoop; | |||
} | |||
} // namespace juce |
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -29,7 +29,7 @@ namespace juce | |||
@tags{Audio} | |||
*/ | |||
class JUCE_API MemoryAudioSource : public AudioSource | |||
class JUCE_API MemoryAudioSource : public PositionableAudioSource | |||
{ | |||
public: | |||
//============================================================================== | |||
@@ -52,11 +52,28 @@ public: | |||
/** Implementation of the AudioSource method. */ | |||
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override; | |||
//============================================================================== | |||
/** Implementation of the PositionableAudioSource method. */ | |||
void setNextReadPosition (int64 newPosition) override; | |||
/** Implementation of the PositionableAudioSource method. */ | |||
int64 getNextReadPosition() const override; | |||
/** Implementation of the PositionableAudioSource method. */ | |||
int64 getTotalLength() const override; | |||
//============================================================================== | |||
/** Implementation of the PositionableAudioSource method. */ | |||
bool isLooping() const override; | |||
/** Implementation of the PositionableAudioSource method. */ | |||
void setLooping (bool shouldLoop) override; | |||
private: | |||
//============================================================================== | |||
AudioBuffer<float> buffer; | |||
int position = 0; | |||
bool isLooping; | |||
bool isCurrentlyLooping; | |||
//============================================================================== | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryAudioSource) | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -1,75 +0,0 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
The code included in this file is provided under the terms of the ISC license | |||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission | |||
To use, copy, modify, and/or distribute this software for any purpose with or | |||
without fee is hereby granted provided that the above copyright notice and | |||
this permission notice appear in all copies. | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
namespace juce | |||
{ | |||
struct CatmullRomAlgorithm | |||
{ | |||
static forcedinline float valueAtOffset (const float* const inputs, const float offset) noexcept | |||
{ | |||
auto y0 = inputs[3]; | |||
auto y1 = inputs[2]; | |||
auto y2 = inputs[1]; | |||
auto y3 = inputs[0]; | |||
auto halfY0 = 0.5f * y0; | |||
auto halfY3 = 0.5f * y3; | |||
return y1 + offset * ((0.5f * y2 - halfY0) | |||
+ (offset * (((y0 + 2.0f * y2) - (halfY3 + 2.5f * y1)) | |||
+ (offset * ((halfY3 + 1.5f * y1) - (halfY0 + 1.5f * y2)))))); | |||
} | |||
}; | |||
CatmullRomInterpolator::CatmullRomInterpolator() noexcept { reset(); } | |||
CatmullRomInterpolator::~CatmullRomInterpolator() noexcept {} | |||
void CatmullRomInterpolator::reset() noexcept | |||
{ | |||
subSamplePos = 1.0; | |||
for (auto& s : lastInputSamples) | |||
s = 0; | |||
} | |||
int CatmullRomInterpolator::process (double actualRatio, const float* in, float* out, int numOut, int available, int wrap) noexcept | |||
{ | |||
return interpolate<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap); | |||
} | |||
int CatmullRomInterpolator::process (double actualRatio, const float* in, float* out, int numOut) noexcept | |||
{ | |||
return interpolate<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut); | |||
} | |||
int CatmullRomInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, int available, int wrap, float gain) noexcept | |||
{ | |||
return interpolateAdding<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap, gain); | |||
} | |||
int CatmullRomInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, float gain) noexcept | |||
{ | |||
return interpolateAdding<CatmullRomAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, gain); | |||
} | |||
} // namespace juce |
@@ -1,146 +0,0 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
The code included in this file is provided under the terms of the ISC license | |||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission | |||
To use, copy, modify, and/or distribute this software for any purpose with or | |||
without fee is hereby granted provided that the above copyright notice and | |||
this permission notice appear in all copies. | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
namespace juce | |||
{ | |||
/** | |||
Interpolator for resampling a stream of floats using Catmull-Rom interpolation. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own CatmullRomInterpolator | |||
object. | |||
@see LagrangeInterpolator | |||
@tags{Audio} | |||
*/ | |||
class JUCE_API CatmullRomInterpolator | |||
{ | |||
public: | |||
CatmullRomInterpolator() noexcept; | |||
~CatmullRomInterpolator() noexcept; | |||
CatmullRomInterpolator (CatmullRomInterpolator&&) noexcept = default; | |||
CatmullRomInterpolator& operator= (CatmullRomInterpolator&&) noexcept = default; | |||
/** Resets the state of the interpolator. | |||
Call this when there's a break in the continuity of the input data stream. | |||
*/ | |||
void reset() noexcept; | |||
/** Resamples a stream of samples. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results into | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int process (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce) noexcept; | |||
/** Resamples a stream of samples. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results into | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param available the number of available input samples. If it needs more samples | |||
than available, it either wraps back for wrapAround samples, or | |||
it feeds zeroes | |||
@param wrapAround if the stream exceeds available samples, it wraps back for | |||
wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int process (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
int available, | |||
int wrapAround) noexcept; | |||
/** Resamples a stream of samples, adding the results to the output data | |||
with a gain. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results to - the result values will be added | |||
to any pre-existing data in this buffer after being multiplied by | |||
the gain factor | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param gain a gain factor to multiply the resulting samples by before | |||
adding them to the destination buffer | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int processAdding (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
float gain) noexcept; | |||
/** Resamples a stream of samples, adding the results to the output data | |||
with a gain. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results to - the result values will be added | |||
to any pre-existing data in this buffer after being multiplied by | |||
the gain factor | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param available the number of available input samples. If it needs more samples | |||
than available, it either wraps back for wrapAround samples, or | |||
it feeds zeroes | |||
@param wrapAround if the stream exceeds available samples, it wraps back for | |||
wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
@param gain a gain factor to multiply the resulting samples by before | |||
adding them to the destination buffer | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int processAdding (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
int available, | |||
int wrapAround, | |||
float gain) noexcept; | |||
private: | |||
float lastInputSamples[5]; | |||
double subSamplePos; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CatmullRomInterpolator) | |||
}; | |||
} // namespace juce |
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -0,0 +1,493 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE 6 technical preview. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
You may use this code under the terms of the GPL v3 | |||
(see www.gnu.org/licenses). | |||
For this technical preview, this file is not subject to commercial licensing. | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
namespace juce | |||
{ | |||
/** | |||
An interpolator base class for resampling streams of floats. | |||
Note that the resamplers are stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own interpolator object. | |||
@see LagrangeInterpolator, CatmullRomInterpolator, WindowedSincInterpolator, | |||
LinearInterpolator, ZeroOrderHoldInterpolator | |||
@tags{Audio} | |||
*/ | |||
template <class InterpolatorTraits, int memorySize> | |||
class JUCE_API GenericInterpolator | |||
{ | |||
public: | |||
GenericInterpolator() noexcept { reset(); } | |||
GenericInterpolator (GenericInterpolator&&) noexcept = default; | |||
GenericInterpolator& operator= (GenericInterpolator&&) noexcept = default; | |||
/** Returns the latency of the interpolation algorithm in isolation. | |||
In the context of resampling the total latency of a process using | |||
the interpolator is the base latency divided by the speed ratio. | |||
*/ | |||
static constexpr float getBaseLatency() noexcept | |||
{ | |||
return InterpolatorTraits::algorithmicLatency; | |||
} | |||
/** Resets the state of the interpolator. | |||
Call this when there's a break in the continuity of the input data stream. | |||
*/ | |||
void reset() noexcept | |||
{ | |||
indexBuffer = 0; | |||
subSamplePos = 1.0; | |||
std::fill (std::begin (lastInputSamples), std::end (lastInputSamples), 0.0f); | |||
} | |||
/** Resamples a stream of samples. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results into | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int process (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce) noexcept | |||
{ | |||
return interpolate (speedRatio, inputSamples, outputSamples, numOutputSamplesToProduce); | |||
} | |||
/** Resamples a stream of samples. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results into | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param numInputSamplesAvailable the number of available input samples. If it needs more samples | |||
than available, it either wraps back for wrapAround samples, or | |||
it feeds zeroes | |||
@param wrapAround if the stream exceeds available samples, it wraps back for | |||
wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int process (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
int numInputSamplesAvailable, | |||
int wrapAround) noexcept | |||
{ | |||
return interpolate (speedRatio, inputSamples, outputSamples, | |||
numOutputSamplesToProduce, numInputSamplesAvailable, wrapAround); | |||
} | |||
/** Resamples a stream of samples, adding the results to the output data | |||
with a gain. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results to - the result values will be added | |||
to any pre-existing data in this buffer after being multiplied by | |||
the gain factor | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param gain a gain factor to multiply the resulting samples by before | |||
adding them to the destination buffer | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int processAdding (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
float gain) noexcept | |||
{ | |||
return interpolateAdding (speedRatio, inputSamples, outputSamples, numOutputSamplesToProduce, gain); | |||
} | |||
/** Resamples a stream of samples, adding the results to the output data | |||
with a gain. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results to - the result values will be added | |||
to any pre-existing data in this buffer after being multiplied by | |||
the gain factor | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param numInputSamplesAvailable the number of available input samples. If it needs more samples | |||
than available, it either wraps back for wrapAround samples, or | |||
it feeds zeroes | |||
@param wrapAround if the stream exceeds available samples, it wraps back for | |||
wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
@param gain a gain factor to multiply the resulting samples by before | |||
adding them to the destination buffer | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int processAdding (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
int numInputSamplesAvailable, | |||
int wrapAround, | |||
float gain) noexcept | |||
{ | |||
return interpolateAdding (speedRatio, inputSamples, outputSamples, | |||
numOutputSamplesToProduce, numInputSamplesAvailable, wrapAround, gain); | |||
} | |||
private: | |||
//============================================================================== | |||
forcedinline void pushInterpolationSample (float newValue) noexcept | |||
{ | |||
lastInputSamples[indexBuffer] = newValue; | |||
if (++indexBuffer == memorySize) | |||
indexBuffer = 0; | |||
} | |||
forcedinline void pushInterpolationSamples (const float* input, | |||
int numOutputSamplesToProduce) noexcept | |||
{ | |||
if (numOutputSamplesToProduce >= memorySize) | |||
{ | |||
const auto* const offsetInput = input + (numOutputSamplesToProduce - memorySize); | |||
for (int i = 0; i < memorySize; ++i) | |||
pushInterpolationSample (offsetInput[i]); | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOutputSamplesToProduce; ++i) | |||
pushInterpolationSample (input[i]); | |||
} | |||
} | |||
forcedinline void pushInterpolationSamples (const float* input, | |||
int numOutputSamplesToProduce, | |||
int numInputSamplesAvailable, | |||
int wrapAround) noexcept | |||
{ | |||
if (numOutputSamplesToProduce >= memorySize) | |||
{ | |||
if (numInputSamplesAvailable >= memorySize) | |||
{ | |||
pushInterpolationSamples (input, | |||
numOutputSamplesToProduce); | |||
} | |||
else | |||
{ | |||
pushInterpolationSamples (input + ((numOutputSamplesToProduce - numInputSamplesAvailable) - 1), | |||
numInputSamplesAvailable); | |||
if (wrapAround > 0) | |||
{ | |||
numOutputSamplesToProduce -= wrapAround; | |||
pushInterpolationSamples (input + ((numOutputSamplesToProduce - (memorySize - numInputSamplesAvailable)) - 1), | |||
memorySize - numInputSamplesAvailable); | |||
} | |||
else | |||
{ | |||
for (int i = numInputSamplesAvailable; i < memorySize; ++i) | |||
pushInterpolationSample (0.0f); | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
if (numOutputSamplesToProduce > numInputSamplesAvailable) | |||
{ | |||
for (int i = 0; i < numInputSamplesAvailable; ++i) | |||
pushInterpolationSample (input[i]); | |||
const auto extraSamples = numOutputSamplesToProduce - numInputSamplesAvailable; | |||
if (wrapAround > 0) | |||
{ | |||
const auto* const offsetInput = input + (numInputSamplesAvailable - wrapAround); | |||
for (int i = 0; i < extraSamples; ++i) | |||
pushInterpolationSample (offsetInput[i]); | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < extraSamples; ++i) | |||
pushInterpolationSample (0.0f); | |||
} | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOutputSamplesToProduce; ++i) | |||
pushInterpolationSample (input[i]); | |||
} | |||
} | |||
} | |||
//============================================================================== | |||
int interpolate (double speedRatio, | |||
const float* input, | |||
float* output, | |||
int numOutputSamplesToProduce) noexcept | |||
{ | |||
auto pos = subSamplePos; | |||
int numUsed = 0; | |||
while (numOutputSamplesToProduce > 0) | |||
{ | |||
while (pos >= 1.0) | |||
{ | |||
pushInterpolationSample (input[numUsed++]); | |||
pos -= 1.0; | |||
} | |||
*output++ = InterpolatorTraits::valueAtOffset (lastInputSamples, (float) pos, indexBuffer); | |||
pos += speedRatio; | |||
--numOutputSamplesToProduce; | |||
} | |||
subSamplePos = pos; | |||
return numUsed; | |||
} | |||
int interpolate (double speedRatio, | |||
const float* input, float* output, | |||
int numOutputSamplesToProduce, | |||
int numInputSamplesAvailable, | |||
int wrap) noexcept | |||
{ | |||
auto originalIn = input; | |||
auto pos = subSamplePos; | |||
bool exceeded = false; | |||
if (speedRatio < 1.0) | |||
{ | |||
for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
{ | |||
if (pos >= 1.0) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (0.0f); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (*input++); | |||
if (--numInputSamplesAvailable <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
input -= wrap; | |||
numInputSamplesAvailable += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos -= 1.0; | |||
} | |||
*output++ = InterpolatorTraits::valueAtOffset (lastInputSamples, (float) pos, indexBuffer); | |||
pos += speedRatio; | |||
} | |||
} | |||
else | |||
{ | |||
for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
{ | |||
while (pos < speedRatio) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (*input++); | |||
if (--numInputSamplesAvailable <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
input -= wrap; | |||
numInputSamplesAvailable += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos += 1.0; | |||
} | |||
pos -= speedRatio; | |||
*output++ = InterpolatorTraits::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos), indexBuffer); | |||
} | |||
} | |||
subSamplePos = pos; | |||
if (wrap == 0) | |||
return (int) (input - originalIn); | |||
return ((int) (input - originalIn) + wrap) % wrap; | |||
} | |||
int interpolateAdding (double speedRatio, | |||
const float* input, | |||
float* output, | |||
int numOutputSamplesToProduce, | |||
int numInputSamplesAvailable, | |||
int wrap, | |||
float gain) noexcept | |||
{ | |||
auto originalIn = input; | |||
auto pos = subSamplePos; | |||
bool exceeded = false; | |||
if (speedRatio < 1.0) | |||
{ | |||
for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
{ | |||
if (pos >= 1.0) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (0.0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (*input++); | |||
if (--numInputSamplesAvailable <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
input -= wrap; | |||
numInputSamplesAvailable += wrap; | |||
} | |||
else | |||
{ | |||
numInputSamplesAvailable = true; | |||
} | |||
} | |||
} | |||
pos -= 1.0; | |||
} | |||
*output++ += gain * InterpolatorTraits::valueAtOffset ((float) pos); | |||
pos += speedRatio; | |||
} | |||
} | |||
else | |||
{ | |||
for (int i = numOutputSamplesToProduce; --i >= 0;) | |||
{ | |||
while (pos < speedRatio) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (0.0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (*input++); | |||
if (--numInputSamplesAvailable <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
input -= wrap; | |||
numInputSamplesAvailable += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos += 1.0; | |||
} | |||
pos -= speedRatio; | |||
*output++ += gain * InterpolatorTraits::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos), indexBuffer); | |||
} | |||
} | |||
subSamplePos = pos; | |||
if (wrap == 0) | |||
return (int) (input - originalIn); | |||
return ((int) (input - originalIn) + wrap) % wrap; | |||
} | |||
int interpolateAdding (double speedRatio, | |||
const float* input, | |||
float* output, | |||
int numOutputSamplesToProduce, | |||
float gain) noexcept | |||
{ | |||
auto pos = subSamplePos; | |||
int numUsed = 0; | |||
while (numOutputSamplesToProduce > 0) | |||
{ | |||
while (pos >= 1.0) | |||
{ | |||
pushInterpolationSample (input[numUsed++]); | |||
pos -= 1.0; | |||
} | |||
*output++ += gain * InterpolatorTraits::valueAtOffset (lastInputSamples, (float) pos, indexBuffer); | |||
pos += speedRatio; | |||
--numOutputSamplesToProduce; | |||
} | |||
subSamplePos = pos; | |||
return numUsed; | |||
} | |||
//============================================================================== | |||
float lastInputSamples[(size_t) memorySize]; | |||
double subSamplePos = 1.0; | |||
int indexBuffer = 0; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GenericInterpolator) | |||
}; | |||
} // namespace juce |
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -0,0 +1,184 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE 6 technical preview. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
You may use this code under the terms of the GPL v3 | |||
(see www.gnu.org/licenses). | |||
For this technical preview, this file is not subject to commercial licensing. | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
namespace juce | |||
{ | |||
#if JUCE_UNIT_TESTS | |||
class InterpolatorTests : public UnitTest | |||
{ | |||
public: | |||
InterpolatorTests() | |||
: UnitTest ("InterpolatorTests", UnitTestCategories::audio) | |||
{ | |||
} | |||
private: | |||
template<typename InterpolatorType> | |||
void runInterplatorTests (const String& interpolatorName) | |||
{ | |||
auto createGaussian = [](std::vector<float>& destination, float scale, float centreInSamples, float width) | |||
{ | |||
for (size_t i = 0; i < destination.size(); ++i) | |||
{ | |||
auto x = (((float) i) - centreInSamples) * width; | |||
destination[i] = std::exp (-(x * x)); | |||
} | |||
FloatVectorOperations::multiply (destination.data(), scale, (int) destination.size()); | |||
}; | |||
auto findGaussianPeak = [](const std::vector<float>& input) -> float | |||
{ | |||
auto max = std::max_element (std::begin (input), std::end (input)); | |||
auto maxPrev = max - 1; | |||
jassert (maxPrev >= std::begin (input)); | |||
auto maxNext = max + 1; | |||
jassert (maxNext < std::end (input)); | |||
auto quadraticMaxLoc = (*maxPrev - *maxNext) / (2.0f * ((*maxNext + *maxPrev) - (2.0f * *max))); | |||
return quadraticMaxLoc + (float) std::distance (std::begin (input), max); | |||
}; | |||
auto expectAllElementsWithin = [this](const std::vector<float>& v1, const std::vector<float>& v2, float tolerance) | |||
{ | |||
expectEquals ((int) v1.size(), (int) v2.size()); | |||
for (size_t i = 0; i < v1.size(); ++i) | |||
expectWithinAbsoluteError (v1[i], v2[i], tolerance); | |||
}; | |||
InterpolatorType interpolator; | |||
constexpr size_t inputSize = 1001; | |||
static_assert (inputSize > 800 + InterpolatorType::getBaseLatency(), | |||
"The test InterpolatorTests input buffer is too small"); | |||
std::vector<float> input (inputSize); | |||
constexpr auto inputGaussianMidpoint = (float) (inputSize - 1) / 2.0f; | |||
constexpr auto inputGaussianValueAtEnds = 0.000001f; | |||
const auto inputGaussianWidth = std::sqrt (-std::log (inputGaussianValueAtEnds)) / inputGaussianMidpoint; | |||
createGaussian (input, 1.0f, inputGaussianMidpoint, inputGaussianWidth); | |||
for (auto speedRatio : { 0.4, 0.8263, 1.0, 1.05, 1.2384, 1.6 }) | |||
{ | |||
const auto expectedGaussianMidpoint = (inputGaussianMidpoint + InterpolatorType::getBaseLatency()) / (float) speedRatio; | |||
const auto expectedGaussianWidth = inputGaussianWidth * (float) speedRatio; | |||
const auto outputBufferSize = (size_t) std::floor ((float) input.size() / speedRatio); | |||
for (int numBlocks : { 1, 5 }) | |||
{ | |||
const auto inputBlockSize = (float) input.size() / (float) numBlocks; | |||
const auto outputBlockSize = (int) std::floor (inputBlockSize / speedRatio); | |||
std::vector<float> output (outputBufferSize, std::numeric_limits<float>::min()); | |||
beginTest (interpolatorName + " process " + String (numBlocks) + " blocks ratio " + String (speedRatio)); | |||
interpolator.reset(); | |||
{ | |||
auto* inputPtr = input.data(); | |||
auto* outputPtr = output.data(); | |||
for (int i = 0; i < numBlocks; ++i) | |||
{ | |||
auto numInputSamplesRead = interpolator.process (speedRatio, inputPtr, outputPtr, outputBlockSize); | |||
inputPtr += numInputSamplesRead; | |||
outputPtr += outputBlockSize; | |||
} | |||
} | |||
expectWithinAbsoluteError (findGaussianPeak (output), expectedGaussianMidpoint, 0.1f); | |||
std::vector<float> expectedOutput (output.size()); | |||
createGaussian (expectedOutput, 1.0f, expectedGaussianMidpoint, expectedGaussianWidth); | |||
expectAllElementsWithin (output, expectedOutput, 0.02f); | |||
beginTest (interpolatorName + " process adding " + String (numBlocks) + " blocks ratio " + String (speedRatio)); | |||
interpolator.reset(); | |||
constexpr float addingGain = 0.7384f; | |||
{ | |||
auto* inputPtr = input.data(); | |||
auto* outputPtr = output.data(); | |||
for (int i = 0; i < numBlocks; ++i) | |||
{ | |||
auto numInputSamplesRead = interpolator.processAdding (speedRatio, inputPtr, outputPtr, outputBlockSize, addingGain); | |||
inputPtr += numInputSamplesRead; | |||
outputPtr += outputBlockSize; | |||
} | |||
} | |||
expectWithinAbsoluteError (findGaussianPeak (output), expectedGaussianMidpoint, 0.1f); | |||
std::vector<float> additionalOutput (output.size()); | |||
createGaussian (additionalOutput, addingGain, expectedGaussianMidpoint, expectedGaussianWidth); | |||
FloatVectorOperations::add (expectedOutput.data(), additionalOutput.data(), (int) additionalOutput.size()); | |||
expectAllElementsWithin (output, expectedOutput, 0.02f); | |||
} | |||
beginTest (interpolatorName + " process wrap 0 ratio " + String (speedRatio)); | |||
std::vector<float> doubleLengthOutput (2 * outputBufferSize, std::numeric_limits<float>::min()); | |||
interpolator.reset(); | |||
interpolator.process (speedRatio, input.data(), doubleLengthOutput.data(), (int) doubleLengthOutput.size(), | |||
(int) input.size(), 0); | |||
std::vector<float> expectedDoubleLengthOutput (doubleLengthOutput.size()); | |||
createGaussian (expectedDoubleLengthOutput, 1.0f, expectedGaussianMidpoint, expectedGaussianWidth); | |||
expectAllElementsWithin (doubleLengthOutput, expectedDoubleLengthOutput, 0.02f); | |||
beginTest (interpolatorName + " process wrap double ratio " + String (speedRatio)); | |||
interpolator.reset(); | |||
interpolator.process (speedRatio, input.data(), doubleLengthOutput.data(), (int) doubleLengthOutput.size(), | |||
(int) input.size(), (int) input.size()); | |||
std::vector<float> secondGaussian (doubleLengthOutput.size()); | |||
createGaussian (secondGaussian, 1.0f, expectedGaussianMidpoint + outputBufferSize, expectedGaussianWidth); | |||
FloatVectorOperations::add (expectedDoubleLengthOutput.data(), secondGaussian.data(), (int) expectedDoubleLengthOutput.size()); | |||
expectAllElementsWithin (doubleLengthOutput, expectedDoubleLengthOutput, 0.02f); | |||
} | |||
} | |||
public: | |||
void runTest() override | |||
{ | |||
runInterplatorTests<WindowedSincInterpolator> ("WindowedSincInterpolator"); | |||
runInterplatorTests<LagrangeInterpolator> ("LagrangeInterpolator"); | |||
runInterplatorTests<CatmullRomInterpolator> ("CatmullRomInterpolator"); | |||
runInterplatorTests<LinearInterpolator> ("LinearInterpolator"); | |||
} | |||
}; | |||
static InterpolatorTests interpolatorTests; | |||
#endif | |||
} // namespace juce |
@@ -0,0 +1,228 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE 6 technical preview. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
You may use this code under the terms of the GPL v3 | |||
(see www.gnu.org/licenses). | |||
For this technical preview, this file is not subject to commercial licensing. | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
namespace juce | |||
{ | |||
class Interpolators | |||
{ | |||
private: | |||
struct WindowedSincTraits | |||
{ | |||
static constexpr float algorithmicLatency = 100.0f; | |||
static forcedinline float windowedSinc (float firstFrac, int index) noexcept | |||
{ | |||
auto index2 = index + 1; | |||
auto frac = firstFrac; | |||
auto value1 = lookupTable[index]; | |||
auto value2 = lookupTable[index2]; | |||
return value1 + (frac * (value2 - value1)); | |||
} | |||
static forcedinline float valueAtOffset (const float* const inputs, const float offset, int indexBuffer) noexcept | |||
{ | |||
int numCrossings = 100; | |||
float result = 0.0f; | |||
auto samplePosition = indexBuffer; | |||
float firstFrac = 0.0f; | |||
float lastSincPosition = -1.0f; | |||
int index = 0, sign = -1; | |||
for (int i = -numCrossings; i <= numCrossings; ++i) | |||
{ | |||
auto sincPosition = (1.0f - offset) + (float) i; | |||
if (i == -numCrossings || (sincPosition >= 0 && lastSincPosition < 0)) | |||
{ | |||
auto indexFloat = (sincPosition >= 0.f ? sincPosition : -sincPosition) * 100.0f; | |||
index = (int) std::floor (indexFloat); | |||
firstFrac = indexFloat - index; | |||
sign = (sincPosition < 0 ? -1 : 1); | |||
} | |||
if (sincPosition == 0.0f) | |||
result += inputs[samplePosition]; | |||
else if (sincPosition < numCrossings && sincPosition > -numCrossings) | |||
result += inputs[samplePosition] * windowedSinc (firstFrac, index); | |||
if (++samplePosition == numCrossings * 2) | |||
samplePosition = 0; | |||
lastSincPosition = sincPosition; | |||
index += 100 * sign; | |||
} | |||
return result; | |||
} | |||
static const float lookupTable[10001]; | |||
}; | |||
struct LagrangeTraits | |||
{ | |||
static constexpr float algorithmicLatency = 2.0f; | |||
static float valueAtOffset (const float*, float, int) noexcept; | |||
}; | |||
struct CatmullRomTraits | |||
{ | |||
//============================================================================== | |||
static constexpr float algorithmicLatency = 2.0f; | |||
static forcedinline float valueAtOffset (const float* const inputs, const float offset, int index) noexcept | |||
{ | |||
auto y0 = inputs[index]; if (++index == 4) index = 0; | |||
auto y1 = inputs[index]; if (++index == 4) index = 0; | |||
auto y2 = inputs[index]; if (++index == 4) index = 0; | |||
auto y3 = inputs[index]; | |||
auto halfY0 = 0.5f * y0; | |||
auto halfY3 = 0.5f * y3; | |||
return y1 + offset * ((0.5f * y2 - halfY0) | |||
+ (offset * (((y0 + 2.0f * y2) - (halfY3 + 2.5f * y1)) | |||
+ (offset * ((halfY3 + 1.5f * y1) - (halfY0 + 1.5f * y2)))))); | |||
} | |||
}; | |||
struct LinearTraits | |||
{ | |||
static constexpr float algorithmicLatency = 1.0f; | |||
static forcedinline float valueAtOffset (const float* const inputs, const float offset, int index) noexcept | |||
{ | |||
auto y0 = inputs[index]; | |||
auto y1 = inputs[index == 0 ? 1 : 0]; | |||
return y1 * offset + y0 * (1.0f - offset); | |||
} | |||
}; | |||
struct ZeroOrderHoldTraits | |||
{ | |||
static constexpr float algorithmicLatency = 0.0f; | |||
static forcedinline float valueAtOffset (const float* const inputs, const float, int) noexcept | |||
{ | |||
return inputs[0]; | |||
} | |||
}; | |||
public: | |||
using WindowedSinc = GenericInterpolator<WindowedSincTraits, 200>; | |||
using Lagrange = GenericInterpolator<LagrangeTraits, 5>; | |||
using CatmullRom = GenericInterpolator<CatmullRomTraits, 4>; | |||
using Linear = GenericInterpolator<LinearTraits, 2>; | |||
using ZeroOrderHold = GenericInterpolator<ZeroOrderHoldTraits, 1>; | |||
}; | |||
//============================================================================== | |||
/** | |||
An interpolator for resampling a stream of floats using high order windowed | |||
(hann) sinc interpolation, recommended for high quality resampling. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own LinearInterpolator object. | |||
@see GenericInterpolator | |||
@see LagrangeInterpolator, CatmullRomInterpolator, LinearInterpolator, | |||
ZeroOrderHoldInterpolator | |||
@tags{Audio} | |||
*/ | |||
using WindowedSincInterpolator = Interpolators::WindowedSinc; | |||
/** | |||
An interpolator for resampling a stream of floats using 4-point lagrange interpolation. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own LagrangeInterpolator object. | |||
@see GenericInterpolator | |||
@see CatmullRomInterpolator, WindowedSincInterpolator, LinearInterpolator, | |||
ZeroOrderHoldInterpolator | |||
@tags{Audio} | |||
*/ | |||
using LagrangeInterpolator = Interpolators::Lagrange; | |||
/** | |||
An interpolator for resampling a stream of floats using Catmull-Rom interpolation. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own CatmullRomInterpolator object. | |||
@see GenericInterpolator | |||
@see LagrangeInterpolator, WindowedSincInterpolator, LinearInterpolator, | |||
ZeroOrderHoldInterpolator | |||
@tags{Audio} | |||
*/ | |||
using CatmullRomInterpolator = Interpolators::CatmullRom; | |||
/** | |||
An interpolator for resampling a stream of floats using linear interpolation. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own LinearInterpolator object. | |||
@see GenericInterpolator | |||
@see LagrangeInterpolator, CatmullRomInterpolator, WindowedSincInterpolator, | |||
ZeroOrderHoldInterpolator | |||
@tags{Audio} | |||
*/ | |||
using LinearInterpolator = Interpolators::Linear; | |||
/** | |||
An interpolator for resampling a stream of floats using zero order hold | |||
interpolation. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own ZeroOrderHoldInterpolator | |||
object. | |||
@see GenericInterpolator | |||
@see LagrangeInterpolator, CatmullRomInterpolator, WindowedSincInterpolator, | |||
LinearInterpolator | |||
@tags{Audio} | |||
*/ | |||
using ZeroOrderHoldInterpolator = Interpolators::ZeroOrderHold; | |||
} // namespace juce |
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -23,381 +23,6 @@ | |||
namespace juce | |||
{ | |||
namespace | |||
{ | |||
static forcedinline void pushInterpolationSample (float* lastInputSamples, float newValue) noexcept | |||
{ | |||
lastInputSamples[4] = lastInputSamples[3]; | |||
lastInputSamples[3] = lastInputSamples[2]; | |||
lastInputSamples[2] = lastInputSamples[1]; | |||
lastInputSamples[1] = lastInputSamples[0]; | |||
lastInputSamples[0] = newValue; | |||
} | |||
static forcedinline void pushInterpolationSamples (float* lastInputSamples, const float* input, int numOut) noexcept | |||
{ | |||
if (numOut >= 5) | |||
{ | |||
for (int i = 0; i < 5; ++i) | |||
lastInputSamples[i] = input[--numOut]; | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOut; ++i) | |||
pushInterpolationSample (lastInputSamples, input[i]); | |||
} | |||
} | |||
static forcedinline void pushInterpolationSamples (float* lastInputSamples, const float* input, | |||
int numOut, int available, int wrapAround) noexcept | |||
{ | |||
if (numOut >= 5) | |||
{ | |||
if (available >= 5) | |||
{ | |||
for (int i = 0; i < 5; ++i) | |||
lastInputSamples[i] = input[--numOut]; | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < available; ++i) | |||
lastInputSamples[i] = input[--numOut]; | |||
if (wrapAround > 0) | |||
{ | |||
numOut -= wrapAround; | |||
for (int i = available; i < 5; ++i) | |||
lastInputSamples[i] = input[--numOut]; | |||
} | |||
else | |||
{ | |||
for (int i = available; i < 5; ++i) | |||
lastInputSamples[i] = 0.0f; | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
if (numOut > available) | |||
{ | |||
for (int i = 0; i < available; ++i) | |||
pushInterpolationSample (lastInputSamples, input[i]); | |||
if (wrapAround > 0) | |||
{ | |||
for (int i = 0; i < numOut - available; ++i) | |||
pushInterpolationSample (lastInputSamples, input[i + available - wrapAround]); | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOut - available; ++i) | |||
pushInterpolationSample (lastInputSamples, 0); | |||
} | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOut; ++i) | |||
pushInterpolationSample (lastInputSamples, input[i]); | |||
} | |||
} | |||
} | |||
template <typename InterpolatorType> | |||
static int interpolate (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
const float* in, float* out, int numOut) noexcept | |||
{ | |||
auto pos = subSamplePos; | |||
if (actualRatio == 1.0 && pos == 1.0) | |||
{ | |||
memcpy (out, in, (size_t) numOut * sizeof (float)); | |||
pushInterpolationSamples (lastInputSamples, in, numOut); | |||
return numOut; | |||
} | |||
int numUsed = 0; | |||
while (numOut > 0) | |||
{ | |||
while (pos >= 1.0) | |||
{ | |||
pushInterpolationSample (lastInputSamples, in[numUsed++]); | |||
pos -= 1.0; | |||
} | |||
*out++ = InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
pos += actualRatio; | |||
--numOut; | |||
} | |||
subSamplePos = pos; | |||
return numUsed; | |||
} | |||
template <typename InterpolatorType> | |||
static int interpolate (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
const float* in, float* out, int numOut, int available, int wrap) noexcept | |||
{ | |||
if (actualRatio == 1.0) | |||
{ | |||
if (available >= numOut) | |||
{ | |||
memcpy (out, in, (size_t) numOut * sizeof (float)); | |||
pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
} | |||
else | |||
{ | |||
memcpy (out, in, (size_t) available * sizeof (float)); | |||
pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
if (wrap > 0) | |||
{ | |||
memcpy (out + available, in + available - wrap, (size_t) (numOut - available) * sizeof (float)); | |||
pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOut - available; ++i) | |||
pushInterpolationSample (lastInputSamples, 0); | |||
} | |||
} | |||
return numOut; | |||
} | |||
auto originalIn = in; | |||
auto pos = subSamplePos; | |||
bool exceeded = false; | |||
if (actualRatio < 1.0) | |||
{ | |||
for (int i = numOut; --i >= 0;) | |||
{ | |||
if (pos >= 1.0) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (lastInputSamples, 0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (lastInputSamples, *in++); | |||
if (--available <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
in -= wrap; | |||
available += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos -= 1.0; | |||
} | |||
*out++ = InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
pos += actualRatio; | |||
} | |||
} | |||
else | |||
{ | |||
for (int i = numOut; --i >= 0;) | |||
{ | |||
while (pos < actualRatio) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (lastInputSamples, 0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (lastInputSamples, *in++); | |||
if (--available <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
in -= wrap; | |||
available += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos += 1.0; | |||
} | |||
pos -= actualRatio; | |||
*out++ = InterpolatorType::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos)); | |||
} | |||
} | |||
subSamplePos = pos; | |||
if (wrap == 0) | |||
return (int) (in - originalIn); | |||
return ((int) (in - originalIn) + wrap) % wrap; | |||
} | |||
template <typename InterpolatorType> | |||
static int interpolateAdding (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
const float* in, float* out, int numOut, | |||
int available, int wrap, float gain) noexcept | |||
{ | |||
if (actualRatio == 1.0) | |||
{ | |||
if (available >= numOut) | |||
{ | |||
FloatVectorOperations::addWithMultiply (out, in, gain, numOut); | |||
pushInterpolationSamples (lastInputSamples, in, numOut, available, wrap); | |||
} | |||
else | |||
{ | |||
FloatVectorOperations::addWithMultiply (out, in, gain, available); | |||
pushInterpolationSamples (lastInputSamples, in, available, available, wrap); | |||
if (wrap > 0) | |||
{ | |||
FloatVectorOperations::addWithMultiply (out, in - wrap, gain, numOut - available); | |||
pushInterpolationSamples (lastInputSamples, in - wrap, numOut - available, available, wrap); | |||
} | |||
else | |||
{ | |||
for (int i = 0; i < numOut-available; ++i) | |||
pushInterpolationSample (lastInputSamples, 0.0); | |||
} | |||
} | |||
return numOut; | |||
} | |||
auto originalIn = in; | |||
auto pos = subSamplePos; | |||
bool exceeded = false; | |||
if (actualRatio < 1.0) | |||
{ | |||
for (int i = numOut; --i >= 0;) | |||
{ | |||
if (pos >= 1.0) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (lastInputSamples, 0.0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (lastInputSamples, *in++); | |||
if (--available <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
in -= wrap; | |||
available += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos -= 1.0; | |||
} | |||
*out++ += gain * InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
pos += actualRatio; | |||
} | |||
} | |||
else | |||
{ | |||
for (int i = numOut; --i >= 0;) | |||
{ | |||
while (pos < actualRatio) | |||
{ | |||
if (exceeded) | |||
{ | |||
pushInterpolationSample (lastInputSamples, 0.0); | |||
} | |||
else | |||
{ | |||
pushInterpolationSample (lastInputSamples, *in++); | |||
if (--available <= 0) | |||
{ | |||
if (wrap > 0) | |||
{ | |||
in -= wrap; | |||
available += wrap; | |||
} | |||
else | |||
{ | |||
exceeded = true; | |||
} | |||
} | |||
} | |||
pos += 1.0; | |||
} | |||
pos -= actualRatio; | |||
*out++ += gain * InterpolatorType::valueAtOffset (lastInputSamples, jmax (0.0f, 1.0f - (float) pos)); | |||
} | |||
} | |||
subSamplePos = pos; | |||
if (wrap == 0) | |||
return (int) (in - originalIn); | |||
return ((int) (in - originalIn) + wrap) % wrap; | |||
} | |||
template <typename InterpolatorType> | |||
static int interpolateAdding (float* lastInputSamples, double& subSamplePos, double actualRatio, | |||
const float* in, float* out, int numOut, float gain) noexcept | |||
{ | |||
auto pos = subSamplePos; | |||
if (actualRatio == 1.0 && pos == 1.0) | |||
{ | |||
FloatVectorOperations::addWithMultiply (out, in, gain, numOut); | |||
pushInterpolationSamples (lastInputSamples, in, numOut); | |||
return numOut; | |||
} | |||
int numUsed = 0; | |||
while (numOut > 0) | |||
{ | |||
while (pos >= 1.0) | |||
{ | |||
pushInterpolationSample (lastInputSamples, in[numUsed++]); | |||
pos -= 1.0; | |||
} | |||
*out++ += gain * InterpolatorType::valueAtOffset (lastInputSamples, (float) pos); | |||
pos += actualRatio; | |||
--numOut; | |||
} | |||
subSamplePos = pos; | |||
return numUsed; | |||
} | |||
} | |||
//============================================================================== | |||
template <int k> | |||
struct LagrangeResampleHelper | |||
{ | |||
@@ -410,58 +35,28 @@ struct LagrangeResampleHelper<0> | |||
static forcedinline void calc (float&, float) noexcept {} | |||
}; | |||
struct LagrangeAlgorithm | |||
{ | |||
static forcedinline float valueAtOffset (const float* inputs, float offset) noexcept | |||
{ | |||
return calcCoefficient<0> (inputs[4], offset) | |||
+ calcCoefficient<1> (inputs[3], offset) | |||
+ calcCoefficient<2> (inputs[2], offset) | |||
+ calcCoefficient<3> (inputs[1], offset) | |||
+ calcCoefficient<4> (inputs[0], offset); | |||
} | |||
template <int k> | |||
static forcedinline float calcCoefficient (float input, float offset) noexcept | |||
{ | |||
LagrangeResampleHelper<0 - k>::calc (input, -2.0f - offset); | |||
LagrangeResampleHelper<1 - k>::calc (input, -1.0f - offset); | |||
LagrangeResampleHelper<2 - k>::calc (input, 0.0f - offset); | |||
LagrangeResampleHelper<3 - k>::calc (input, 1.0f - offset); | |||
LagrangeResampleHelper<4 - k>::calc (input, 2.0f - offset); | |||
return input; | |||
} | |||
}; | |||
LagrangeInterpolator::LagrangeInterpolator() noexcept { reset(); } | |||
LagrangeInterpolator::~LagrangeInterpolator() noexcept {} | |||
void LagrangeInterpolator::reset() noexcept | |||
{ | |||
subSamplePos = 1.0; | |||
for (auto& s : lastInputSamples) | |||
s = 0; | |||
} | |||
int LagrangeInterpolator::process (double actualRatio, const float* in, float* out, int numOut, int available, int wrap) noexcept | |||
{ | |||
return interpolate<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap); | |||
template <int k> | |||
static float calcCoefficient (float input, float offset) noexcept | |||
{ | |||
LagrangeResampleHelper<0 - k>::calc (input, -2.0f - offset); | |||
LagrangeResampleHelper<1 - k>::calc (input, -1.0f - offset); | |||
LagrangeResampleHelper<2 - k>::calc (input, 0.0f - offset); | |||
LagrangeResampleHelper<3 - k>::calc (input, 1.0f - offset); | |||
LagrangeResampleHelper<4 - k>::calc (input, 2.0f - offset); | |||
return input; | |||
} | |||
int LagrangeInterpolator::process (double actualRatio, const float* in, float* out, int numOut) noexcept | |||
float Interpolators::LagrangeTraits::valueAtOffset (const float* inputs, float offset, int index) noexcept | |||
{ | |||
return interpolate<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut); | |||
} | |||
float result = 0.0f; | |||
int LagrangeInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, int available, int wrap, float gain) noexcept | |||
{ | |||
return interpolateAdding<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, available, wrap, gain); | |||
} | |||
result += calcCoefficient<0> (inputs[index], offset); if (++index == 5) index = 0; | |||
result += calcCoefficient<1> (inputs[index], offset); if (++index == 5) index = 0; | |||
result += calcCoefficient<2> (inputs[index], offset); if (++index == 5) index = 0; | |||
result += calcCoefficient<3> (inputs[index], offset); if (++index == 5) index = 0; | |||
result += calcCoefficient<4> (inputs[index], offset); | |||
int LagrangeInterpolator::processAdding (double actualRatio, const float* in, float* out, int numOut, float gain) noexcept | |||
{ | |||
return interpolateAdding<LagrangeAlgorithm> (lastInputSamples, subSamplePos, actualRatio, in, out, numOut, gain); | |||
return result; | |||
} | |||
} // namespace juce |
@@ -1,146 +0,0 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
The code included in this file is provided under the terms of the ISC license | |||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission | |||
To use, copy, modify, and/or distribute this software for any purpose with or | |||
without fee is hereby granted provided that the above copyright notice and | |||
this permission notice appear in all copies. | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
namespace juce | |||
{ | |||
/** | |||
Interpolator for resampling a stream of floats using 4-point lagrange interpolation. | |||
Note that the resampler is stateful, so when there's a break in the continuity | |||
of the input stream you're feeding it, you should call reset() before feeding | |||
it any new data. And like with any other stateful filter, if you're resampling | |||
multiple channels, make sure each one uses its own LagrangeInterpolator | |||
object. | |||
@see CatmullRomInterpolator | |||
@tags{Audio} | |||
*/ | |||
class JUCE_API LagrangeInterpolator | |||
{ | |||
public: | |||
LagrangeInterpolator() noexcept; | |||
~LagrangeInterpolator() noexcept; | |||
LagrangeInterpolator (LagrangeInterpolator&&) noexcept = default; | |||
LagrangeInterpolator& operator= (LagrangeInterpolator&&) noexcept = default; | |||
/** Resets the state of the interpolator. | |||
Call this when there's a break in the continuity of the input data stream. | |||
*/ | |||
void reset() noexcept; | |||
/** Resamples a stream of samples. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results into | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int process (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce) noexcept; | |||
/** Resamples a stream of samples. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results into | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param available the number of available input samples. If it needs more samples | |||
than available, it either wraps back for wrapAround samples, or | |||
it feeds zeroes | |||
@param wrapAround if the stream exceeds available samples, it wraps back for | |||
wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int process (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
int available, | |||
int wrapAround) noexcept; | |||
/** Resamples a stream of samples, adding the results to the output data | |||
with a gain. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results to - the result values will be added | |||
to any pre-existing data in this buffer after being multiplied by | |||
the gain factor | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param gain a gain factor to multiply the resulting samples by before | |||
adding them to the destination buffer | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int processAdding (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
float gain) noexcept; | |||
/** Resamples a stream of samples, adding the results to the output data | |||
with a gain. | |||
@param speedRatio the number of input samples to use for each output sample | |||
@param inputSamples the source data to read from. This must contain at | |||
least (speedRatio * numOutputSamplesToProduce) samples. | |||
@param outputSamples the buffer to write the results to - the result values will be added | |||
to any pre-existing data in this buffer after being multiplied by | |||
the gain factor | |||
@param numOutputSamplesToProduce the number of output samples that should be created | |||
@param available the number of available input samples. If it needs more samples | |||
than available, it either wraps back for wrapAround samples, or | |||
it feeds zeroes | |||
@param wrapAround if the stream exceeds available samples, it wraps back for | |||
wrapAround samples. If wrapAround is set to 0, it will feed zeroes. | |||
@param gain a gain factor to multiply the resulting samples by before | |||
adding them to the destination buffer | |||
@returns the actual number of input samples that were used | |||
*/ | |||
int processAdding (double speedRatio, | |||
const float* inputSamples, | |||
float* outputSamples, | |||
int numOutputSamplesToProduce, | |||
int available, | |||
int wrapAround, | |||
float gain) noexcept; | |||
private: | |||
float lastInputSamples[5]; | |||
double subSamplePos; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LagrangeInterpolator) | |||
}; | |||
} // namespace juce |
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2018 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -24,320 +24,319 @@ namespace juce | |||
{ | |||
//============================================================================== | |||
// This byte-code is generated from native/java/com/roli/juce/JuceMidiSupport.java with min sdk version 23 | |||
// This byte-code is generated from native/java/com/rmsl/juce/JuceMidiSupport.java with min sdk version 23 | |||
// See juce_core/native/java/README.txt on how to generate this byte-code. | |||
static const uint8 javaMidiByteCode[] = | |||
{31,139,8,8,116,138,97,92,0,3,74,97,118,97,68,101,120,66,121,116,101,67,111,100,101,46,100,101,120,0,149,124,9,124,219,197, | |||
149,255,155,223,33,201,178,108,203,178,19,59,142,45,203,142,29,43,36,190,226,28,78,236,28,62,146,216,137,115,96,43,161,196,252,161, | |||
138,173,36,10,182,228,88,114,14,216,46,161,7,9,45,44,148,35,77,41,165,180,92,225,40,176,20,10,109,129,210,66,91,216,101,129, | |||
109,217,54,244,164,45,252,75,11,165,244,96,129,150,146,253,190,153,145,252,75,98,72,155,124,190,122,243,123,243,230,205,204,155, | |||
55,111,222,252,164,100,56,182,207,219,212,178,144,238,255,216,139,247,126,127,96,206,252,159,157,251,212,223,22,175,248,196, | |||
61,193,55,6,163,75,42,189,255,218,116,38,209,24,17,237,219,178,32,64,250,207,135,55,17,157,45,20,127,21,240,188,77,116,22,232, | |||
43,46,162,16,232,187,94,162,123,152,230,18,229,128,166,11,137,174,95,78,116,13,52,188,93,79,244,87,224,239,128,209,64,100,3, | |||
115,129,6,160,21,88,9,116,3,107,129,77,192,54,224,6,224,23,192,223,128,247,0,163,145,200,13,132,129,141,64,63,240,33,224,124,224, | |||
34,224,114,224,38,224,86,224,14,224,30,224,126,224,235,192,163,192,227,192,83,192,31,128,226,38,162,197,192,54,224,106,224, | |||
49,224,85,192,223,76,212,6,156,11,92,12,220,13,252,0,120,29,40,152,79,180,12,216,6,92,10,124,25,248,57,80,210,66,180,4,56,23,184, | |||
24,56,12,220,5,124,7,120,1,248,61,96,44,128,237,128,79,1,143,2,127,2,66,11,137,18,192,253,192,111,128,105,139,136,22,1,91,129, | |||
11,128,207,3,15,3,199,128,63,0,198,98,244,5,204,5,86,0,91,128,52,112,53,112,59,240,24,96,183,18,53,1,221,192,135,128,81,224, | |||
98,224,48,112,23,240,8,240,44,96,45,65,127,64,24,88,1,244,3,215,2,183,3,15,2,63,7,126,9,188,12,252,14,120,3,120,27,120,23, | |||
16,75,177,14,64,62,80,4,148,2,65,160,6,152,11,204,7,22,1,75,128,101,64,7,176,10,136,3,71,128,71,129,31,0,175,0,111,2,162,141,200, | |||
11,20,0,165,192,108,160,5,88,1,172,1,206,6,38,128,75,129,207,1,255,14,60,14,60,3,28,3,126,7,252,9,120,7,112,183,67,15,80,9, | |||
204,6,234,129,69,64,23,176,30,216,10,12,1,187,129,125,192,133,192,65,224,10,224,179,192,77,192,125,192,55,129,103,128,31,3,47,3, | |||
127,4,222,1,172,101,208,15,172,0,122,129,17,224,114,224,26,224,75,192,221,192,253,192,55,129,39,128,231,128,159,1,239,0,211, | |||
177,23,234,129,78,224,28,32,5,124,4,184,18,248,28,112,39,240,32,240,24,240,42,240,39,224,29,192,88,129,185,0,27,129,253,192,53, | |||
192,93,192,3,192,183,129,255,6,126,13,252,30,120,23,200,91,137,249,3,97,96,49,176,18,88,11,108,2,6,129,115,129,33,32,14,140, | |||
1,23,2,135,128,107,129,27,128,219,128,251,129,71,129,39,129,31,2,63,1,126,13,252,1,120,27,120,15,240,118,16,85,0,245,192,82,96, | |||
57,208,5,244,0,27,128,205,192,121,64,12,216,5,140,3,151,0,95,0,30,0,158,6,94,6,222,2,188,157,68,51,128,57,192,74,224,76,96, | |||
39,176,27,184,8,248,52,112,39,240,53,224,123,192,179,192,203,192,95,1,87,23,124,25,104,0,122,128,115,128,17,96,47,112,49,112,25, | |||
112,53,240,5,224,86,224,27,192,143,128,55,128,255,5,222,5,220,221,68,133,192,76,96,46,176,16,232,6,54,0,231,2,49,96,23,240, | |||
81,224,147,192,97,224,38,224,81,224,187,192,179,192,143,128,159,1,191,2,222,4,188,8,146,69,64,5,80,11,204,5,214,0,103,2,219,128, | |||
36,112,17,112,25,112,21,240,89,224,102,224,43,192,55,128,111,1,255,9,252,16,248,41,240,18,240,7,224,109,192,88,13,123,1,11, | |||
128,13,192,102,160,0,49,183,24,168,6,102,1,53,64,45,48,27,168,3,194,192,28,224,12,96,46,48,15,64,56,38,132,86,66,72,36,132,63,66, | |||
152,35,132,52,66,200,34,132,40,66,88,34,132,30,66,104,33,132,13,194,246,39,108,89,194,86,35,108,7,130,91,19,92,142,176,132, | |||
132,165,32,152,146,186,245,249,128,33,209,26,160,7,232,5,214,2,235,128,62,96,61,176,1,216,8,224,88,33,28,55,212,15,12,0,17,96,11, | |||
240,33,96,16,248,127,192,121,124,254,0,219,128,97,32,6,108,7,70,128,127,1,46,2,14,0,23,3,31,5,62,6,124,156,148,77,50,127, | |||
252,154,142,97,226,133,186,188,15,229,50,80,67,63,115,217,212,229,74,93,30,211,50,150,230,87,233,242,1,205,247,56,228,113,4,210,101, | |||
154,159,171,249,51,129,60,224,26,205,207,119,244,85,224,40,7,28,242,197,90,158,203,165,142,182,101,142,190,202,245,216,88, | |||
38,168,101,42,117,121,76,151,25,215,107,153,106,45,83,161,203,55,207,83,178,92,190,75,203,215,56,218,214,234,182,220,15,251,208, | |||
67,122,12,13,142,113,54,58,198,214,228,24,27,151,31,155,167,242,2,46,63,57,111,146,159,177,103,179,67,79,179,99,252,92,126, | |||
206,81,206,204,113,129,163,175,86,71,95,236,147,199,52,127,169,230,179,95,44,211,229,81,93,230,182,9,93,126,17,229,164,46,191,50, | |||
79,229,52,92,254,11,202,187,117,217,194,230,216,167,203,62,148,199,117,185,20,229,148,46,135,80,222,163,203,243,80,222,171, | |||
203,11,28,229,149,245,147,58,251,28,229,235,29,125,69,28,252,115,28,253,14,59,248,99,142,242,62,71,191,7,28,252,67,142,182,87,162, | |||
188,63,211,151,67,254,40,202,23,232,242,189,142,182,207,57,198,195,107,151,145,127,210,193,31,115,148,31,118,244,245,4,202, | |||
19,25,61,40,95,168,203,199,28,182,122,17,229,180,46,191,86,175,246,237,114,189,70,31,209,101,94,163,127,213,101,182,127,166,252, | |||
152,131,159,241,159,14,221,150,203,157,14,127,232,114,248,67,183,230,207,212,229,107,164,207,55,209,131,164,232,10,193,109, | |||
10,232,50,217,182,153,174,144,116,49,93,37,169,135,150,9,246,225,82,250,20,175,53,122,127,69,82,65,191,151,180,150,170,100,253, | |||
108,154,43,56,46,20,75,185,42,205,175,210,252,89,250,153,233,38,193,123,204,162,207,16,83,63,253,69,82,85,95,163,235,107, | |||
245,120,106,17,121,15,75,218,73,119,74,90,66,127,146,116,1,189,165,235,203,133,162,65,161,246,232,237,196,116,57,253,142,116,220, | |||
23,28,251,43,233,211,92,134,228,155,196,177,206,67,79,72,106,210,119,37,181,233,199,196,177,206,77,95,144,180,154,30,209, | |||
244,121,94,7,156,24,159,215,244,30,73,45,250,158,164,27,104,33,244,219,224,187,137,227,96,15,245,10,166,139,104,189,224,59,128,226, | |||
123,179,212,75,71,36,205,161,85,168,247,105,61,121,186,62,15,156,35,146,230,82,151,80,180,91,112,140,204,163,111,17,211,42, | |||
250,9,113,28,87,227,241,35,146,62,35,105,1,149,8,166,126,154,41,56,182,171,113,115,140,255,161,166,63,37,21,95,255,75,210,126,58, | |||
38,105,33,189,160,249,92,95,172,245,22,227,148,90,9,61,211,244,184,74,112,42,61,37,105,19,77,19,76,151,210,116,73,151,81,179, | |||
164,237,180,69,112,156,86,237,75,97,255,27,52,101,123,205,208,122,202,48,254,135,137,227,105,128,190,70,28,135,13,186,69,250, | |||
225,42,89,207,126,167,168,160,199,37,173,165,255,148,116,51,125,95,210,53,36,164,191,206,165,66,73,231,81,64,210,51,169,70, | |||
210,181,180,86,210,213,180,89,250,229,74,169,47,164,199,197,244,126,73,149,125,66,136,228,63,147,116,61,189,170,235,243,100,187, | |||
62,42,146,116,29,117,10,197,239,209,180,79,250,245,10,169,183,74,235,173,210,122,171,180,222,42,173,175,74,183,175,210,237, | |||
171,116,251,106,221,174,90,203,87,107,249,106,45,95,173,229,171,181,252,44,236,116,238,111,22,178,18,67,62,47,32,83,83,75,210,249, | |||
100,75,186,144,92,154,186,53,63,95,211,2,73,155,201,175,105,177,220,111,157,82,111,13,250,191,78,210,106,250,182,164,46,250, | |||
15,82,103,225,211,146,158,65,75,229,62,83,235,83,171,231,91,11,79,121,64,210,25,244,85,73,103,211,163,146,170,245,171,133,223, | |||
60,41,233,22,122,86,210,205,244,156,166,255,45,105,17,253,64,210,26,250,31,73,103,210,143,36,93,66,30,217,95,43,229,104,234, | |||
21,138,159,43,105,27,249,132,138,7,165,146,78,167,25,146,150,82,153,164,27,169,90,210,70,154,37,105,23,181,72,186,154,34,50,78, | |||
212,203,121,204,70,230,117,175,142,19,191,144,241,225,12,204,92,81,183,164,211,232,155,146,150,209,99,196,103,253,92,201,111, | |||
212,242,208,78,3,130,105,5,125,72,240,217,174,218,53,105,251,52,193,211,191,67,124,134,171,126,154,97,231,223,18,231,150,221, | |||
82,174,5,158,207,251,97,129,110,183,0,114,135,244,243,245,250,249,70,73,235,232,53,253,60,95,168,60,96,141,164,17,234,23,156, | |||
163,134,233,114,226,60,85,233,89,164,219,47,130,252,23,37,173,148,253,44,66,246,251,134,164,33,106,18,138,207,250,22,235,118, | |||
139,117,255,139,117,63,139,117,63,139,117,63,173,24,255,207,137,105,144,222,35,206,59,212,184,150,106,218,166,245,180,33,219, | |||
93,46,56,63,86,207,237,218,191,248,108,2,91,190,27,33,25,23,112,150,33,17,63,130,68,248,218,13,42,15,19,174,201,60,138,235,175, | |||
68,253,51,27,212,115,72,183,103,254,135,231,41,122,35,234,127,167,235,171,116,125,147,163,254,33,212,207,222,168,234,103,105, | |||
189,182,67,255,115,168,239,215,245,53,154,223,238,168,127,17,245,151,234,250,90,173,127,26,176,83,235,127,3,245,247,234,250,217, | |||
186,157,115,252,43,33,23,222,164,158,235,28,227,203,212,111,66,125,167,174,231,28,252,195,184,24,236,88,175,228,198,53,189, | |||
120,253,100,221,85,142,242,13,186,254,118,7,239,62,93,126,4,244,9,71,249,217,245,42,151,103,153,31,3,47,235,182,111,104,42,54,40, | |||
26,208,180,78,211,118,77,7,52,29,222,48,217,215,94,205,251,232,6,214,109,200,242,185,171,213,61,99,204,159,135,231,106,248, | |||
206,152,255,75,120,30,244,91,136,250,131,126,131,6,3,6,206,45,150,103,61,201,213,234,158,16,65,205,110,255,37,196,167,98,34,52, | |||
130,181,246,202,187,129,165,229,246,172,86,119,136,221,178,23,159,72,132,12,236,39,200,250,109,249,204,231,129,137,58,150,253, | |||
216,106,117,230,69,66,22,69,170,44,200,220,130,26,175,152,133,11,110,34,116,43,198,231,131,47,118,75,25,91,102,1,200,27,209, | |||
102,58,219,220,127,59,250,244,137,113,255,109,220,198,104,53,242,192,59,138,50,183,241,81,32,144,104,90,2,79,10,191,145,175, | |||
71,134,117,88,173,236,192,247,26,151,156,25,238,217,171,213,189,49,80,56,191,216,166,64,85,75,113,33,198,81,136,254,124,216,63, | |||
185,20,105,230,113,241,45,202,103,36,66,55,193,119,3,29,45,197,149,136,95,211,168,204,56,159,118,135,154,193,155,108,17,56, | |||
169,197,205,178,214,210,182,104,71,36,205,151,115,225,190,191,179,90,221,107,156,182,234,128,22,68,79,173,255,43,90,127,64,20,136, | |||
72,179,178,188,144,146,255,34,45,21,126,211,11,77,172,253,127,86,171,119,156,129,146,128,75,235,131,30,47,149,89,208,99,231, | |||
73,61,17,244,157,144,151,75,159,88,34,50,117,62,93,23,254,83,107,206,66,170,54,188,240,4,182,89,153,101,161,191,38,182,178,149, | |||
8,249,113,6,85,155,121,168,11,192,114,137,80,49,178,101,230,79,195,45,215,103,5,106,185,20,161,89,233,149,232,161,0,173,125, | |||
246,122,219,114,237,246,95,167,218,251,139,208,202,103,39,86,230,82,199,39,194,143,36,66,62,220,128,195,95,163,172,127,229,172, | |||
81,119,210,19,253,235,34,248,87,62,242,52,151,242,249,53,234,30,58,230,111,64,155,193,89,57,52,88,227,162,193,90,47,109,157, | |||
237,129,229,207,9,185,229,218,218,210,191,4,205,94,163,98,73,192,140,116,184,168,85,184,137,105,194,63,23,117,145,142,28,112,114, | |||
36,141,116,122,209,215,191,194,206,131,93,208,217,229,130,150,60,189,2,1,189,2,225,87,84,60,98,221,66,212,227,248,18,114,76, | |||
109,232,131,99,103,194,207,25,127,210,127,153,246,175,140,143,119,173,81,113,52,18,66,63,85,220,207,184,244,235,66,25,71,132,244, | |||
203,222,53,106,175,6,96,57,161,121,27,215,76,250,106,62,230,207,119,247,205,107,212,222,90,150,235,163,129,139,61,228,62,224, | |||
190,90,220,44,30,176,190,187,199,211,161,101,45,125,251,143,57,218,27,122,44,187,215,168,152,24,241,231,40,79,245,195,42,144, | |||
216,236,119,75,95,225,231,68,104,30,198,23,240,159,227,119,159,208,246,130,15,104,219,154,109,91,207,109,41,211,150,199,194, | |||
99,248,152,94,219,49,63,223,58,6,133,143,6,141,92,26,132,55,229,103,215,234,106,199,90,229,234,181,202,133,85,103,201,181,242, | |||
233,181,242,97,173,242,178,107,5,61,93,185,255,196,90,29,205,174,85,239,148,107,117,111,118,173,208,79,85,222,148,107,245, | |||
213,204,90,193,19,221,122,134,15,131,87,196,237,154,245,200,65,19,43,107,168,35,54,57,182,14,161,199,246,150,122,39,163,199,230, | |||
205,172,247,15,28,235,149,225,189,224,224,153,114,148,200,103,214,168,247,56,131,162,0,246,100,171,14,26,249,50,78,171,183, | |||
65,175,58,218,100,124,225,205,41,120,162,199,25,11,45,57,167,188,30,21,143,3,161,22,187,0,62,144,128,207,154,176,6,71,13,15,239, | |||
95,196,157,143,200,219,204,164,158,242,158,83,117,135,167,224,45,152,130,183,178,231,196,249,241,159,190,41,120,91,28,60,91, | |||
90,14,231,90,15,71,8,182,67,17,236,240,101,105,7,156,91,102,33,13,90,60,66,75,90,209,164,221,61,234,61,80,185,81,67,21,70,64,12, | |||
54,7,176,242,119,163,6,62,219,236,199,122,21,72,154,128,207,10,93,226,104,195,146,126,60,23,66,194,43,105,194,95,170,249,133, | |||
20,52,112,215,19,65,163,78,228,137,240,91,60,155,25,168,171,148,227,51,101,254,225,146,62,53,231,162,250,121,115,116,217,160, | |||
127,235,81,57,105,185,137,177,152,145,126,232,54,102,17,211,132,127,6,199,76,145,240,87,203,211,44,176,160,165,115,58,184,85, | |||
28,237,141,50,235,106,248,98,35,34,48,159,109,38,246,155,39,123,194,4,205,66,160,12,203,23,126,55,15,165,58,67,229,15,179,209, | |||
178,94,251,146,192,253,43,227,191,119,245,168,250,136,223,159,245,107,174,185,175,39,115,190,171,209,200,248,235,87,111,10, | |||
213,249,174,246,233,67,61,124,143,196,28,4,230,32,34,77,1,140,38,143,34,77,133,124,7,32,126,142,204,135,134,208,30,68,238,160,96, | |||
255,15,138,58,82,125,22,201,190,138,177,111,212,89,254,120,143,122,135,26,176,198,252,181,176,220,96,164,152,6,183,20,195,34, | |||
197,84,102,254,25,90,74,112,35,242,25,149,70,9,13,246,151,128,95,66,75,112,62,149,25,216,81,230,78,185,219,113,115,194,153,181, | |||
8,62,240,57,62,19,250,103,224,105,1,158,174,146,79,165,39,212,149,157,240,52,77,234,75,248,103,179,229,169,202,12,24,11,231, | |||
123,105,53,166,153,8,165,17,235,142,25,6,214,86,202,52,205,161,126,43,252,180,71,159,85,111,244,168,220,51,50,84,138,246,135,121, | |||
103,88,156,135,88,228,53,91,205,38,153,135,88,114,220,65,138,32,168,85,154,126,105,83,115,114,133,205,192,194,150,129,223,28, | |||
215,43,108,150,217,106,133,7,178,43,252,194,113,189,194,102,34,244,111,56,107,89,243,179,199,11,141,128,17,126,207,165,199,49, | |||
173,87,189,31,143,116,150,65,255,23,120,30,198,184,255,14,77,111,3,229,86,51,229,120,12,169,185,145,34,93,144,13,221,32,199, | |||
82,137,53,76,248,135,228,8,184,151,1,41,255,210,241,66,17,16,225,247,56,206,40,239,105,234,85,239,218,203,237,90,170,176,35,105, | |||
158,245,17,158,173,53,171,179,147,207,130,180,178,3,230,236,18,50,35,115,161,174,213,154,46,123,118,65,123,165,25,164,99,136, | |||
119,17,92,137,42,45,101,13,206,11,214,91,134,16,34,252,155,160,93,104,228,89,65,187,206,98,191,104,144,189,54,74,63,225,191,59, | |||
122,213,59,250,114,11,253,195,87,70,57,215,50,7,7,166,83,208,154,92,237,68,232,124,138,241,76,212,138,152,60,14,83,142,35,40, | |||
199,161,102,60,91,70,245,105,50,119,185,26,59,42,225,255,40,175,135,181,219,127,169,206,116,152,27,254,85,158,25,180,234,76,158, | |||
39,91,113,86,19,103,164,159,101,43,98,46,200,72,77,30,39,71,140,197,217,61,182,136,92,122,55,93,165,215,165,220,192,120,141, | |||
72,135,178,142,152,28,147,104,21,165,153,49,97,85,130,242,182,91,41,148,93,100,126,231,175,148,249,93,203,153,175,28,15,26,28, | |||
111,2,20,254,187,138,56,106,47,213,201,158,194,196,121,39,247,123,103,175,250,14,162,220,139,62,189,173,254,98,10,204,72,52, | |||
165,232,250,60,31,214,116,3,69,190,53,3,51,248,60,114,113,238,221,141,85,11,122,11,41,48,39,252,122,127,243,76,26,11,237,198,29, | |||
216,231,110,117,47,161,200,30,140,197,133,200,232,106,129,84,43,252,181,191,185,2,109,103,34,239,246,33,207,206,193,109,33, | |||
68,238,111,89,47,237,113,241,27,210,86,204,128,181,87,91,45,208,115,37,172,152,104,186,145,154,173,160,55,252,28,70,236,173,19, | |||
170,125,25,183,247,180,122,126,123,188,26,231,224,24,130,255,99,173,225,95,5,189,152,217,195,36,239,243,93,152,17,127,247, | |||
162,178,160,53,210,255,120,253,231,129,201,239,23,3,174,72,10,187,49,116,6,246,131,242,133,72,106,26,108,118,61,159,82,41,181,7, | |||
212,202,223,33,179,77,182,182,45,125,186,68,90,219,150,30,208,168,100,177,7,138,228,106,242,30,216,6,249,240,111,213,154,7, | |||
204,65,212,7,161,123,198,201,26,29,187,188,204,177,203,103,147,148,133,198,89,82,99,11,218,125,90,182,171,52,171,33,183,137,181, | |||
255,122,112,207,12,200,77,21,49,170,51,186,148,47,152,130,90,17,49,152,86,154,150,60,153,76,199,147,75,62,101,162,74,41,235, | |||
254,137,210,123,13,202,156,213,112,246,197,121,204,28,216,111,129,206,111,176,139,169,64,223,21,182,173,85,239,167,39,247,78,228, | |||
135,211,169,106,71,192,20,11,23,78,180,96,175,185,236,132,63,196,209,199,83,117,41,184,11,22,94,83,131,200,232,65,30,31,148, | |||
209,171,229,215,211,169,218,59,59,115,66,228,6,138,90,150,195,155,138,18,254,10,174,247,141,173,60,64,95,127,156,247,210,151,232, | |||
152,105,9,177,32,252,139,128,25,254,227,49,211,22,98,97,248,153,66,195,214,123,251,208,90,181,87,2,161,114,129,21,133,231,95, | |||
193,86,49,150,24,33,120,83,28,62,193,62,135,155,153,63,200,39,245,252,105,210,139,59,229,141,207,141,179,37,252,191,234,132,25, | |||
11,237,210,178,22,115,95,13,138,128,204,3,121,190,51,49,38,158,77,142,180,67,69,54,167,253,252,90,229,119,1,255,88,40,33,111, | |||
142,133,217,186,155,50,117,161,201,186,128,30,243,237,107,213,247,123,30,240,54,123,202,169,213,179,1,247,46,181,243,60,200,143, | |||
34,185,176,230,195,1,143,184,116,225,83,107,97,183,220,156,128,161,119,180,135,219,244,231,205,164,150,99,75,136,109,12,205, | |||
121,85,63,15,120,22,190,210,76,171,173,60,15,91,24,243,119,181,236,97,235,86,72,15,145,109,10,42,168,229,207,229,224,149,179,167, | |||
216,108,39,248,54,246,83,126,38,79,240,148,229,252,77,158,34,71,80,95,105,55,243,14,183,3,117,225,251,143,121,60,34,252,220, | |||
49,79,142,16,151,134,31,12,122,203,144,28,135,255,156,231,193,222,244,112,6,217,143,214,31,206,198,177,243,178,119,227,226,117, | |||
234,59,56,142,172,93,50,42,201,40,230,184,115,23,56,238,220,179,101,44,133,55,24,45,253,111,28,103,107,241,25,98,105,159,155, | |||
179,78,221,221,248,252,227,220,43,208,220,226,55,225,167,17,156,241,1,145,88,25,166,166,64,248,29,126,167,109,200,28,170,5,242, | |||
55,114,60,203,131,85,243,210,98,6,239,86,15,91,209,3,235,4,220,129,28,190,241,69,124,101,184,45,126,146,207,152,124,246,139, | |||
215,224,123,75,124,231,202,94,32,231,11,44,111,121,173,137,35,33,44,228,33,159,175,44,95,157,179,175,73,11,225,156,181,213,237, | |||
28,145,193,82,250,148,127,245,161,109,171,175,157,38,121,55,128,231,115,87,186,45,7,239,139,224,85,231,214,72,142,7,254,230, | |||
49,144,139,158,21,165,220,170,83,198,134,136,248,90,110,117,126,27,246,219,157,152,117,107,78,19,21,249,158,115,95,252,152,237, | |||
231,156,17,59,121,229,93,244,168,63,152,151,159,25,143,143,117,240,14,120,140,124,222,86,47,188,234,46,65,238,199,42,97,77, | |||
55,226,180,71,198,5,183,140,7,110,74,227,60,41,162,96,94,248,151,121,190,96,94,157,175,200,55,76,225,239,231,249,194,111,241,89, | |||
49,129,21,226,239,215,216,155,14,103,115,185,35,226,162,250,27,196,17,193,121,159,33,115,237,7,215,169,239,225,202,221,176, | |||
185,155,207,34,47,78,116,182,57,206,115,35,114,88,205,199,224,117,128,141,46,193,58,180,186,16,77,15,35,246,132,174,165,91,241, | |||
188,196,85,75,39,202,221,0,57,159,171,210,197,81,118,88,230,2,39,214,127,17,245,172,161,218,19,164,177,166,249,116,212,228, | |||
168,113,9,5,221,249,164,71,96,241,234,113,110,81,230,81,171,119,137,140,227,88,61,81,46,173,37,100,174,42,169,139,45,22,199,234, | |||
182,218,240,173,1,21,51,91,77,143,142,162,42,122,114,212,244,82,248,217,60,87,248,191,242,92,65,119,157,75,157,169,156,87,140, | |||
233,120,185,87,238,7,68,169,139,234,211,123,104,143,180,17,199,6,119,159,250,158,191,28,51,173,144,182,241,146,215,230,243,243, | |||
108,249,254,103,125,54,54,71,4,122,23,22,5,138,3,211,90,144,248,4,172,200,181,234,68,177,229,217,116,135,166,242,140,194,138, | |||
190,126,92,159,81,242,68,233,175,155,73,90,187,167,229,224,235,199,101,91,88,179,86,122,174,58,97,108,89,86,39,12,34,100,113, | |||
248,233,86,225,209,55,25,117,139,137,92,203,107,243,25,212,6,93,200,197,237,160,171,206,86,115,61,91,238,245,173,217,119,99, | |||
107,251,78,188,15,242,253,185,191,47,27,31,55,93,72,243,35,62,153,109,24,178,238,156,62,117,15,229,119,113,1,99,172,255,66,234, | |||
242,115,125,142,220,239,6,13,247,169,223,84,4,138,56,246,241,174,225,53,226,111,45,57,35,51,169,192,80,39,56,191,67,116,195, | |||
130,173,54,162,185,21,126,19,119,24,171,206,136,140,79,35,221,202,14,184,120,247,244,187,34,227,197,224,77,151,217,109,96,90,181, | |||
107,22,252,101,11,237,113,39,86,226,4,140,249,144,213,96,197,29,237,100,43,17,180,196,252,240,127,240,189,245,32,133,255,170, | |||
222,121,122,49,83,254,158,117,174,180,65,105,54,70,93,222,167,222,15,100,98,82,29,98,146,186,135,42,43,29,214,246,136,248,103, | |||
200,221,207,239,166,148,95,88,244,133,62,245,219,15,158,163,87,238,12,142,110,106,39,69,14,171,168,114,171,228,227,30,115,88, | |||
69,148,91,229,90,195,63,13,181,106,134,92,53,67,215,127,17,245,124,170,221,46,189,57,128,186,24,123,138,204,86,236,236,46,163, | |||
236,46,98,207,135,44,172,11,223,235,58,225,214,225,74,132,246,98,87,168,108,33,232,14,223,175,188,62,79,148,185,112,147,242, | |||
20,201,155,212,37,56,19,212,123,154,110,88,101,131,190,127,159,169,227,197,89,58,223,53,104,224,162,250,45,3,217,119,59,127,238, | |||
115,190,219,57,91,204,164,115,140,114,58,219,172,144,111,173,212,173,211,92,175,222,201,7,196,18,196,220,2,156,35,151,203,204, | |||
137,41,103,242,45,243,223,58,238,222,196,39,72,127,103,5,245,163,109,203,252,215,143,111,238,44,167,205,102,57,202,175,28,239, | |||
239,156,9,62,78,205,249,191,58,30,40,12,255,34,243,142,15,231,197,122,245,125,68,53,238,11,253,29,51,233,251,129,3,160,21,84, | |||
100,30,160,133,205,69,178,124,111,213,88,232,32,199,88,255,33,121,62,109,238,192,153,141,157,18,248,227,125,85,5,162,72,92,68, | |||
225,63,64,235,95,213,13,25,103,227,122,237,247,176,89,37,16,196,92,50,239,144,26,215,171,156,66,205,55,95,199,82,131,22,172, | |||
215,239,175,196,228,219,87,147,10,133,126,223,138,179,242,111,199,203,141,58,220,7,182,137,32,45,17,200,162,69,37,214,172,5,25, | |||
121,28,156,160,228,135,95,201,228,248,133,82,135,208,223,149,8,153,193,152,186,175,13,235,213,119,52,101,164,238,200,134,236, | |||
205,146,223,19,151,35,23,170,16,219,80,191,132,56,83,175,69,31,59,208,150,103,18,148,252,240,235,153,59,121,158,238,163,34,219, | |||
71,185,252,13,172,252,158,65,219,130,231,122,99,64,125,199,116,20,244,222,236,175,108,213,159,135,245,115,70,158,127,99,245, | |||
36,120,207,157,196,95,171,249,63,61,169,253,43,39,61,255,37,160,250,204,252,134,137,223,57,90,69,234,183,69,197,69,234,187,152, | |||
242,34,245,155,9,31,232,78,173,55,14,90,131,231,243,65,231,21,169,223,126,44,0,109,47,58,81,127,207,73,207,130,244,247,89,164, | |||
98,25,83,254,45,143,33,105,179,140,149,5,200,150,109,93,87,238,152,147,32,149,211,24,250,201,212,116,57,77,254,78,43,243,61, | |||
146,33,105,147,124,158,173,249,93,89,57,159,110,171,126,101,162,250,90,145,109,47,247,80,22,211,101,236,50,180,141,76,135,173, | |||
20,207,165,121,46,201,83,101,119,86,87,142,166,126,77,3,90,38,160,245,50,175,136,38,191,63,147,239,25,100,6,173,108,207,178, | |||
252,125,242,108,221,47,127,151,59,91,239,197,90,252,181,52,245,235,248,176,68,183,89,162,239,36,44,215,174,247,210,114,93,183, | |||
66,143,223,202,150,229,172,195,100,134,123,113,135,153,67,53,77,45,157,173,77,171,22,118,212,175,234,94,213,90,191,160,179,165, | |||
165,190,99,241,194,230,250,69,93,171,90,22,172,234,90,208,181,184,9,166,69,190,214,62,52,18,79,196,211,203,201,213,174,168, | |||
177,188,141,172,229,109,115,182,240,39,202,254,206,145,137,88,58,153,76,239,92,31,77,68,119,196,198,105,233,201,156,80,108,124, | |||
60,57,190,52,52,148,156,24,25,14,37,146,233,208,142,88,58,148,149,10,245,173,10,165,134,162,137,4,218,174,248,199,218,14,199, | |||
182,71,39,70,156,58,162,195,209,177,52,20,148,117,79,140,142,238,207,242,215,68,211,233,174,232,200,200,182,232,208,249,36,122, | |||
201,232,237,35,179,183,175,143,42,123,55,134,86,237,27,138,141,165,227,73,4,243,157,241,145,88,104,104,36,153,138,39,118,132, | |||
198,146,227,105,170,237,221,248,126,245,163,241,225,56,134,176,39,62,20,35,177,150,172,181,155,187,86,81,225,218,137,161,216, | |||
122,212,244,38,198,38,210,155,88,69,32,195,218,56,145,206,240,124,25,158,124,42,206,60,13,76,140,113,175,13,187,162,123,162, | |||
36,250,200,232,235,37,179,175,87,126,160,7,124,32,179,192,176,205,62,124,88,125,125,91,251,168,166,47,154,24,30,79,198,135,27, | |||
183,101,102,219,152,157,119,135,50,71,27,205,250,32,169,110,57,135,54,170,250,32,33,54,97,27,205,57,157,72,198,202,109,212, | |||
120,90,209,157,209,241,232,16,134,23,79,165,227,67,109,52,247,116,13,186,99,169,161,241,248,88,58,57,62,245,64,70,98,147,242,125, | |||
177,1,229,75,83,207,29,162,92,63,57,218,247,209,199,66,171,227,35,24,100,77,231,68,124,100,152,245,77,101,166,19,68,63,80,164, | |||
63,150,130,203,78,61,91,45,50,16,75,167,225,96,169,201,46,63,96,10,25,225,54,154,145,21,26,74,38,210,177,68,186,177,139,233, | |||
62,116,86,153,173,26,141,13,199,163,141,236,186,141,236,112,153,165,159,247,193,2,189,137,237,201,26,118,85,46,56,135,243,190, | |||
210,109,84,251,193,66,3,233,104,122,2,163,174,126,63,177,236,6,114,186,210,73,50,58,58,212,40,149,147,171,185,248,116,13,54, | |||
38,84,147,141,99,177,68,108,184,15,30,24,147,190,18,58,77,195,15,152,251,228,238,118,174,255,73,66,253,177,161,88,124,15,235, | |||
41,202,138,36,83,141,157,19,137,225,17,44,67,177,147,217,19,101,38,68,75,156,220,77,209,241,161,216,200,230,137,248,112,27,5, | |||
178,21,19,233,248,72,99,95,114,199,41,188,77,209,248,184,163,175,44,175,141,54,159,202,108,63,141,155,156,54,62,224,32,104, | |||
234,27,74,142,54,142,39,71,226,141,187,16,213,26,79,10,109,53,39,71,246,54,106,62,77,139,83,34,106,27,205,255,7,155,56,215,100, | |||
222,63,216,70,73,247,157,70,122,210,42,89,31,124,223,19,167,141,186,255,105,109,147,28,118,209,72,52,117,254,233,13,117,138, | |||
150,211,79,58,51,225,77,209,244,78,14,19,31,40,205,155,117,56,58,178,39,126,126,35,66,107,18,27,24,135,98,227,170,132,62,16,187, | |||
70,162,41,108,232,224,20,50,189,28,137,117,125,213,20,245,235,99,163,219,180,64,12,34,21,83,136,12,196,119,36,16,49,198,177, | |||
75,202,166,168,142,236,28,79,238,69,211,105,125,124,118,54,198,147,141,142,131,187,141,10,21,123,36,154,216,209,168,199,81,228, | |||
96,245,34,78,74,123,5,28,204,141,219,118,197,134,210,39,242,6,210,227,152,105,182,27,201,147,93,71,183,241,254,45,119,176,199, | |||
99,219,27,207,138,69,207,239,143,109,143,141,199,18,72,18,42,62,168,150,55,191,172,150,187,177,99,124,60,186,159,195,82,166, | |||
167,19,185,109,212,53,21,187,253,159,89,237,229,124,232,77,169,228,148,233,46,207,26,97,82,52,117,34,175,39,154,194,142,30, | |||
203,88,213,201,59,85,16,103,214,41,130,224,157,104,130,94,156,164,81,121,214,23,56,184,210,38,254,147,24,109,212,114,18,167,253, | |||
180,7,240,242,19,245,202,238,11,29,140,72,124,148,29,98,218,201,44,181,21,11,79,217,107,212,113,10,107,234,164,213,113,154, | |||
132,82,251,113,240,140,134,82,177,113,153,69,6,78,221,245,228,115,46,26,213,58,143,252,134,174,142,190,190,206,142,174,117,231, | |||
69,206,222,180,234,188,245,29,145,174,158,243,250,54,14,68,72,108,33,99,11,178,198,45,200,115,173,45,189,91,123,201,181,101, | |||
45,242,200,181,96,35,123,220,130,180,210,218,194,121,165,189,69,114,193,145,31,44,221,167,42,81,182,249,115,173,34,200,69,183, | |||
108,37,129,244,19,202,12,228,157,198,96,39,85,15,158,62,21,170,31,252,167,82,139,154,127,64,28,123,119,112,138,125,122,2,51, | |||
179,81,115,163,67,67,177,84,106,245,72,116,71,138,188,72,55,39,162,35,50,231,118,103,174,10,102,116,120,152,159,134,199,33,71, | |||
62,221,123,111,98,56,182,15,173,213,147,108,225,141,142,141,233,140,138,92,209,148,242,196,109,39,165,218,84,150,229,244,173, | |||
146,123,79,173,237,230,205,189,221,20,216,118,74,122,234,208,144,113,164,226,73,78,118,218,41,135,220,121,250,206,145,179,45, | |||
221,161,71,237,217,150,86,114,16,211,165,20,31,232,48,1,185,182,165,249,48,34,123,27,103,147,228,27,210,167,82,100,255,88,140, | |||
92,24,5,210,9,202,31,58,33,25,39,123,104,36,22,29,103,146,76,197,200,141,132,50,1,27,83,174,46,72,133,30,78,51,163,241,68,74, | |||
178,101,105,93,108,191,20,150,54,242,233,66,36,185,25,58,108,236,130,68,154,196,48,121,135,179,121,60,185,244,92,60,138,194, | |||
70,153,210,48,229,101,74,74,65,238,112,214,1,82,153,186,140,201,188,234,81,38,59,57,195,241,113,12,17,97,31,236,120,42,51,116, | |||
87,108,55,150,62,69,57,114,83,118,37,135,97,192,88,230,128,160,134,237,81,92,237,134,67,233,100,104,104,60,22,77,199,66,219, | |||
38,70,244,157,82,233,14,109,31,79,142,134,50,110,226,217,30,79,68,71,226,23,196,168,10,165,225,201,133,90,157,28,119,220,190,148, | |||
112,37,139,100,54,244,84,2,246,246,248,56,156,201,183,29,38,26,206,44,184,151,59,84,110,76,214,14,54,120,14,127,42,99,152,136, | |||
36,228,197,71,70,69,46,151,71,164,107,167,168,140,31,148,231,158,114,45,159,57,89,119,106,12,155,198,149,99,99,35,241,33,121, | |||
170,102,188,189,8,236,83,6,93,234,100,58,115,122,169,229,212,139,24,121,192,150,103,47,21,162,212,173,238,238,153,109,147,35, | |||
89,210,23,242,179,69,181,214,222,236,115,138,220,40,75,231,155,131,66,207,196,40,135,115,108,100,28,190,202,82,83,90,23,162,112, | |||
44,73,134,165,6,214,75,213,40,240,1,121,138,49,54,68,71,153,217,219,157,162,186,83,101,100,22,122,138,96,248,84,65,149,123, | |||
158,34,57,3,146,92,125,242,48,49,185,233,186,170,59,235,204,152,142,30,50,107,144,139,204,43,44,31,242,50,15,19,156,59,145,95,63, | |||
242,49,193,205,186,165,189,149,63,72,209,241,228,88,108,60,29,71,63,5,120,236,143,141,38,211,177,76,208,0,99,64,30,69,58,90, | |||
201,46,101,128,200,219,41,111,33,250,222,66,238,157,209,212,6,118,9,15,10,59,229,46,178,118,38,225,187,57,252,169,124,83,196,201, | |||
140,15,239,35,43,206,102,182,227,114,17,115,226,217,247,33,185,241,84,118,242,252,208,165,118,104,12,19,141,167,86,141,142, | |||
165,247,115,65,218,153,171,39,95,164,120,226,58,37,32,15,167,55,61,220,175,111,151,243,69,138,121,62,2,144,11,31,156,97,120,71, | |||
146,136,117,42,144,187,71,181,135,91,124,158,144,119,52,107,102,42,28,61,101,27,228,143,158,176,10,148,59,234,8,196,198,232, | |||
40,153,163,169,29,248,72,79,144,149,224,181,176,249,19,81,33,17,219,203,123,0,70,73,176,145,204,228,182,93,228,74,110,223,158, | |||
194,112,2,201,68,103,52,61,180,115,50,7,73,81,9,246,216,9,129,23,79,137,29,176,68,241,201,21,236,230,52,237,100,238,89,227, | |||
48,137,212,162,108,136,61,43,251,87,106,200,159,76,76,190,51,145,26,10,157,28,213,58,47,169,239,194,112,68,244,156,159,60,225,106, | |||
204,125,58,159,187,99,35,209,253,96,23,100,216,236,72,123,156,114,42,8,100,38,226,78,38,86,143,76,164,118,146,47,153,88,159, | |||
158,200,176,49,50,30,143,242,194,254,84,42,78,165,204,25,137,243,86,150,227,234,74,142,142,33,2,67,22,45,101,66,33,35,116,230, | |||
73,89,16,198,69,54,148,144,246,210,174,155,234,230,152,143,43,54,100,139,224,242,137,147,98,20,121,153,169,203,121,92,158,116, | |||
176,18,126,60,225,170,121,86,60,189,19,91,169,52,83,49,121,161,212,53,129,76,141,131,151,207,60,199,203,190,28,126,86,59,209, | |||
147,204,228,117,57,153,18,2,20,6,199,135,88,114,178,137,157,220,203,33,179,104,12,238,119,242,4,202,166,96,14,164,99,99,145, | |||
189,73,42,57,161,110,50,152,144,53,198,233,163,37,223,105,230,140,201,116,139,247,133,103,76,103,94,170,36,3,75,126,166,164,35, | |||
150,172,145,217,103,94,166,164,54,186,172,144,81,34,63,83,138,36,87,227,172,35,123,76,206,214,228,45,60,125,60,182,131,223, | |||
175,140,159,248,146,134,92,227,210,115,200,171,168,10,13,170,172,242,173,25,227,56,178,99,169,244,164,111,111,26,143,39,225,27, | |||
251,185,173,92,126,247,184,222,72,96,164,247,68,71,200,26,103,95,50,199,39,18,84,152,202,102,161,250,61,26,21,165,28,217,115, | |||
134,233,206,188,116,246,164,134,118,198,134,113,236,147,43,21,67,218,48,76,86,138,125,171,140,63,213,219,222,157,209,225,80,239, | |||
198,208,100,222,224,225,58,54,51,21,96,143,119,57,83,171,92,48,216,83,215,115,144,204,231,7,157,9,78,196,135,81,185,147,47, | |||
5,216,43,152,168,149,226,68,194,78,201,135,28,73,184,33,229,169,98,58,57,38,31,93,41,117,188,90,41,112,208,115,134,159,3,239,201, | |||
172,114,122,103,28,198,224,207,154,38,84,224,194,130,70,163,99,228,78,39,229,173,141,60,233,164,206,41,166,77,36,166,242,174, | |||
25,39,177,29,62,84,58,145,120,159,181,180,97,251,9,156,14,146,108,220,78,203,197,205,194,157,111,188,65,109,251,140,43,47,106, | |||
171,167,141,226,147,96,80,175,36,7,77,58,44,44,254,71,96,249,116,155,16,100,89,15,25,75,135,221,249,199,77,122,208,200,219, | |||
106,19,125,74,136,251,88,254,10,97,92,39,30,52,220,249,231,247,153,116,84,88,245,71,108,90,182,175,207,69,13,135,47,128,216,126, | |||
169,238,144,84,215,176,47,68,17,241,61,195,61,15,162,87,8,179,193,168,216,107,236,168,232,51,197,167,69,78,195,39,27,182,154, | |||
198,195,70,238,103,182,154,230,35,70,254,186,173,203,30,239,221,104,27,182,73,151,8,169,228,48,61,40,172,119,196,65,241,101,227, | |||
87,120,108,175,199,159,118,250,181,32,119,197,134,15,175,219,95,95,111,76,84,84,154,244,21,209,64,223,6,51,191,189,157,14,25, | |||
60,129,167,248,137,222,147,159,111,11,235,175,226,98,227,22,241,125,12,185,254,22,250,152,97,170,103,212,61,203,18,79,108,93, | |||
70,47,100,10,215,26,166,234,80,117,71,79,24,83,116,118,131,161,58,123,65,118,118,139,252,124,96,82,237,134,243,140,11,51,162, | |||
119,202,202,123,229,231,39,77,131,222,65,125,125,123,61,221,96,26,223,16,215,243,24,174,51,77,46,61,141,30,233,122,71,249,211, | |||
92,126,218,120,15,50,203,214,125,134,110,228,199,219,84,213,151,28,229,163,92,254,155,42,223,202,229,175,27,178,124,51,119, | |||
32,75,71,178,165,127,55,45,250,178,56,42,30,134,206,173,60,187,175,155,24,215,178,118,44,206,215,140,21,125,91,7,151,111,56,119, | |||
121,189,77,198,190,54,23,209,11,178,178,47,110,138,151,69,209,254,199,229,130,214,159,107,147,45,102,86,46,161,223,113,45,189, | |||
46,63,255,34,37,15,238,11,150,211,71,45,246,178,10,227,144,213,102,188,115,225,188,250,39,250,140,252,189,198,158,138,125,251, | |||
246,237,143,163,27,209,165,244,45,93,110,11,122,219,150,203,44,2,126,203,120,83,84,118,28,116,118,245,61,238,201,54,232,144, | |||
75,9,77,247,155,116,187,104,130,204,13,70,237,81,174,164,215,220,220,239,33,211,248,255,162,43,104,210,75,66,8,183,77,166,64,225, | |||
113,203,100,141,194,176,133,139,68,174,77,46,81,105,155,245,82,227,147,150,184,27,230,88,22,175,28,180,140,59,141,133,131,162, | |||
216,111,138,219,141,186,125,198,254,111,179,196,42,151,129,177,254,93,172,162,191,186,197,29,188,0,34,80,96,17,43,252,101,200, | |||
166,153,149,103,208,79,44,243,118,241,75,241,42,87,182,155,57,247,24,162,207,52,161,162,241,160,81,51,207,216,92,97,155,118, | |||
206,66,151,233,202,217,101,185,239,70,187,134,117,166,235,168,40,108,128,91,252,65,204,106,216,101,26,95,52,102,212,99,120,180, | |||
205,54,176,117,110,109,198,140,76,219,101,187,141,221,48,62,90,186,92,238,93,166,231,55,98,154,148,18,166,139,12,95,5,132,32, | |||
98,123,42,233,58,11,142,57,184,108,80,76,47,192,216,69,211,119,108,177,180,189,146,159,140,55,68,29,76,106,27,13,108,88,236,208, | |||
202,142,190,125,23,92,106,211,96,59,253,208,45,167,142,121,223,107,44,220,122,216,36,216,251,126,158,123,32,126,203,158,37, | |||
125,115,108,177,9,91,248,136,92,151,138,101,187,226,139,140,125,21,7,155,91,227,13,149,244,109,139,151,250,17,249,121,191,91,220, | |||
10,53,251,77,55,38,190,236,1,185,108,65,211,248,147,16,183,222,106,90,208,134,217,222,109,8,76,218,60,106,136,93,235,76,251, | |||
14,99,126,92,120,109,187,193,101,215,178,137,49,87,203,182,109,151,49,84,97,187,23,186,132,203,112,89,60,101,227,194,54,84,184, | |||
140,146,181,44,5,63,251,181,219,184,219,184,157,29,160,184,192,164,219,140,186,243,49,192,235,92,232,209,157,127,97,57,61,227, | |||
18,207,242,90,174,51,61,24,3,186,189,93,136,160,233,254,134,176,43,205,156,87,196,138,95,237,15,62,110,218,28,138,214,153,214, | |||
181,98,254,173,194,99,187,235,209,79,249,94,30,192,253,102,46,188,233,1,81,232,183,115,131,198,112,5,6,97,223,98,121,223,226, | |||
21,219,213,208,190,98,165,237,93,164,6,202,86,183,115,150,240,24,93,30,87,142,43,215,72,183,217,185,44,79,7,221,106,12,112,68, | |||
244,254,196,161,227,188,13,237,195,70,240,102,219,12,26,219,43,208,51,198,246,184,41,212,48,8,195,56,104,217,178,143,62,151, | |||
217,208,222,41,151,222,94,215,36,13,99,209,151,212,236,150,29,178,72,187,14,124,185,112,189,41,228,172,172,7,140,21,203,130,188, | |||
29,120,161,15,137,194,130,96,53,214,186,125,249,32,154,195,170,193,114,24,232,41,151,218,241,151,219,6,187,41,74,87,217,130, | |||
173,72,119,217,24,134,123,158,26,134,49,109,167,145,168,88,22,55,242,230,25,123,218,110,17,126,191,236,164,225,186,134,25,244, | |||
61,41,152,31,167,107,92,114,177,183,210,211,106,187,26,225,157,198,96,197,178,67,7,57,174,216,232,248,28,219,192,10,195,142, | |||
60,57,88,160,29,7,194,58,203,122,107,114,236,23,118,216,38,188,24,134,196,250,194,183,97,181,74,83,112,124,124,201,48,239,20,247, | |||
136,79,233,240,78,111,27,226,128,225,174,104,153,241,213,122,147,110,52,234,232,143,28,58,177,253,76,196,253,166,251,108,106, | |||
71,100,186,219,3,223,175,167,217,236,138,159,247,136,155,224,171,8,97,135,132,105,248,230,25,123,43,206,95,182,110,31,60,231, | |||
10,89,147,127,176,214,184,160,66,113,140,176,248,145,81,90,103,204,49,62,33,172,156,191,137,146,92,99,46,56,229,86,201,185, | |||
37,118,201,64,137,71,61,218,37,162,36,10,198,188,146,28,41,90,147,227,130,108,233,100,179,233,198,60,150,19,165,243,39,121,37,74, | |||
121,173,226,24,224,228,79,22,227,147,114,59,140,51,184,173,81,90,83,58,43,211,221,57,178,247,154,201,254,153,113,102,201,234, | |||
12,195,93,114,22,24,203,129,38,72,121,51,76,150,234,41,217,140,207,238,12,211,131,161,15,148,152,89,217,172,70,67,170,232,201, | |||
48,92,96,76,202,200,193,121,49,184,93,106,112,174,210,218,210,217,165,85,165,161,210,202,210,106,81,98,9,83,228,152,101,6,254, | |||
8,163,229,192,1,235,185,217,11,196,129,58,33,142,2,207,3,135,194,112,123,224,24,240,252,28,33,110,60,67,8,254,55,202,228,218, | |||
116,177,135,196,20,32,219,200,113,233,223,225,8,90,118,241,1,235,227,243,172,143,26,200,81,238,159,39,172,35,245,66,60,84,111, | |||
136,159,130,190,1,124,188,65,136,123,129,39,128,3,141,8,240,238,92,217,174,7,237,30,110,236,21,47,54,10,235,137,38,33,94,2,14, | |||
53,11,113,61,240,34,240,151,102,50,132,55,223,16,87,134,182,64,244,208,252,179,196,209,249,66,60,12,60,7,188,4,28,105,17,226, | |||
46,224,49,224,121,224,21,224,221,22,178,132,237,199,100,5,55,141,162,233,149,11,182,137,135,22,96,4,11,133,120,114,17,180,3,135, | |||
22,147,219,29,40,86,98,250,239,14,200,62,191,216,48,46,91,34,140,107,150,154,198,187,75,133,241,110,155,105,220,181,204,107, | |||
220,184,124,167,245,238,10,83,60,221,9,75,117,153,226,249,110,204,174,219,16,151,173,194,72,87,99,8,107,240,12,188,180,22,186, | |||
215,163,143,13,224,3,87,110,52,196,189,27,193,223,4,75,156,9,235,158,9,11,24,51,5,255,57,32,208,225,145,129,139,49,169,1,76, | |||
38,194,191,206,11,122,133,247,99,226,208,1,235,181,8,215,30,218,44,114,110,4,46,219,146,253,255,149,156,191,233,201,252,223,129, | |||
252,91,149,204,255,31,200,191,83,201,252,31,130,252,59,149,16,169,255,71,144,127,171,147,249,191,4,93,52,249,255,9,154,126, | |||
245,59,26,249,123,170,144,250,127,164,54,129,225,10,41,25,254,247,244,194,175,126,251,206,255,6,222,8,169,126,249,255,31,52,181, | |||
60,255,27,109,43,164,126,151,196,255,142,219,14,169,241,241,191,193,39,173,135,255,77,62,255,152,71,254,155,184,77,68,255,7, | |||
100,114,50,46,48,81,0,0,0,0}; | |||
{31,139,8,8,43,113,161,94,0,3,106,97,118,97,77,105,100,105,66,121,116,101,67,111,100,101,46,100,101,120,0,149,124,11,124,220, | |||
69,181,255,153,223,99,119,179,217,36,155,77,218,164,105,178,217,164,73,179,165,205,171,233,35,109,146,182,121,180,77,218,164,45, | |||
201,182,72,195,5,183,201,182,217,146,236,134,236,166,180,114,189,20,244,210,162,168,40,80,65,177,162,2,242,18,81,65,80,17,81, | |||
80,81,81,122,149,63,214,39,138,112,69,69,64,20,17,229,218,255,247,204,204,110,126,109,3,213,246,243,221,51,191,51,103,206,204, | |||
156,57,115,230,204,111,183,29,141,237,247,54,181,44,167,234,195,55,252,236,231,159,31,184,160,244,71,71,143,188,248,212,248, | |||
199,142,188,62,189,243,225,179,11,151,53,157,77,52,73,68,251,119,44,11,144,254,243,246,109,68,231,10,197,95,15,60,105,19,157,3, | |||
250,188,139,40,4,250,134,151,232,179,76,115,137,114,64,211,133,68,55,174,33,186,22,26,254,86,79,244,119,224,255,0,163,129,200, | |||
6,22,3,13,64,43,176,14,232,1,54,1,219,128,93,192,81,224,105,224,31,192,63,1,163,145,200,13,132,129,173,192,32,240,54,224,66, | |||
224,82,224,125,192,167,128,91,129,59,128,207,2,247,2,95,6,30,2,30,1,190,3,188,4,20,55,17,173,4,118,1,215,0,15,3,127,0,252,205, | |||
68,109,192,249,192,101,192,221,192,143,128,23,129,130,165,68,29,192,46,224,74,224,51,192,47,129,146,22,162,85,192,249,192,101, | |||
192,17,224,46,224,155,192,79,128,63,2,198,50,216,14,120,47,240,16,240,10,16,90,78,148,0,238,5,126,11,204,89,65,180,2,216,9,188, | |||
3,248,24,240,32,112,28,120,9,48,86,162,47,96,49,176,22,216,1,164,129,107,128,219,129,135,1,187,149,168,9,232,1,222,6,76,0,151, | |||
1,71,128,187,128,175,2,79,0,214,42,244,7,132,129,181,192,32,112,29,112,59,112,63,240,75,224,215,192,115,192,239,129,151,129,191, | |||
1,111,0,98,53,214,1,200,7,138,128,82,32,8,212,0,139,129,165,192,10,96,21,208,1,116,2,235,129,56,112,61,240,16,240,35,224,121, | |||
224,85,64,180,17,121,129,2,160,20,88,8,180,0,107,129,141,192,185,192,52,112,37,240,81,224,115,192,35,192,15,128,227,192,239, | |||
129,87,128,215,1,119,59,244,0,149,192,66,160,30,88,1,116,3,3,192,78,96,4,184,8,216,15,92,2,28,2,62,0,220,0,124,10,248,60,240,53, | |||
224,7,192,79,129,231,128,63,1,175,3,86,7,244,3,107,129,62,96,28,120,31,112,45,240,73,224,110,224,94,224,107,192,163,192,49,224, | |||
23,192,235,192,92,236,133,122,160,11,56,15,72,1,239,4,174,6,62,10,220,9,220,15,60,12,252,1,120,5,120,29,48,214,98,46,192,86, | |||
224,0,112,45,112,23,112,31,240,13,224,127,128,223,0,127,4,222,0,242,214,97,254,64,24,88,9,172,3,54,1,219,128,97,224,124,96,4, | |||
136,3,147,192,37,192,97,224,58,224,40,240,105,224,94,224,33,224,49,224,41,224,103,192,111,128,151,128,191,1,255,4,188,157,68, | |||
21,64,61,176,26,88,3,116,3,189,192,22,96,59,112,1,16,3,246,2,83,192,21,192,199,129,251,128,199,129,231,128,215,0,111,23,209,60, | |||
96,17,176,14,56,27,24,3,46,2,46,5,62,8,220,9,124,9,248,54,240,4,240,28,240,119,192,213,13,95,6,26,128,94,224,60,96,28,184,24, | |||
184,12,184,10,184,6,248,56,112,43,240,21,224,199,192,203,192,95,129,55,0,119,15,81,33,48,31,88,12,44,7,122,128,45,192,249,64, | |||
12,216,11,92,14,188,7,56,2,124,10,120,8,248,22,240,4,240,99,224,23,192,51,192,171,128,23,65,178,8,168,0,106,129,197,192,70,224, | |||
108,96,23,144,4,46,5,174,2,62,4,220,0,220,12,124,1,248,10,240,117,224,123,192,83,192,207,129,103,129,151,128,191,1,198,6,216, | |||
11,88,6,108,1,182,3,5,136,185,197,64,53,176,0,168,1,106,129,133,64,29,16,6,22,1,103,1,139,129,37,0,194,49,33,180,18,66,34,33, | |||
252,17,194,28,33,164,17,66,22,33,68,17,194,18,33,244,16,66,11,33,108,16,182,63,97,203,18,182,26,97,59,16,220,154,224,114,132, | |||
37,36,44,5,193,148,212,163,207,7,12,137,54,2,189,64,31,176,9,216,12,244,3,3,192,22,96,43,128,99,133,112,220,208,32,48,4,68,128, | |||
29,192,219,128,97,224,63,128,11,248,252,1,118,1,163,64,12,216,13,140,3,255,9,92,10,28,4,46,3,46,7,222,5,188,155,148,77,50,127, | |||
252,154,78,98,226,133,186,188,31,229,50,80,67,63,115,217,212,229,74,93,158,212,50,150,230,87,233,242,65,205,247,56,228,113,4, | |||
210,85,154,159,171,249,243,129,60,224,90,205,207,119,244,85,224,40,7,28,242,197,90,158,203,165,142,182,101,142,190,202,245,216, | |||
88,38,168,101,42,117,121,82,151,25,55,106,153,106,45,83,161,203,55,47,81,178,92,190,75,203,215,56,218,214,234,182,220,15,251, | |||
208,3,122,12,13,142,113,54,58,198,214,228,24,27,151,31,94,162,242,2,46,63,182,100,134,159,177,103,179,67,79,179,99,252,92,62, | |||
230,40,103,230,184,204,209,87,171,163,47,246,201,227,154,191,90,243,217,47,58,116,121,66,151,185,109,66,151,127,133,114,82,151, | |||
159,95,162,114,26,46,255,5,229,139,116,217,194,230,216,175,203,62,148,167,116,185,20,229,148,46,135,80,222,167,203,75,80,190, | |||
88,151,151,57,202,235,234,103,116,246,59,202,55,58,250,138,56,248,231,57,250,29,117,240,39,29,229,253,142,126,15,58,248,135,29, | |||
109,175,70,249,64,166,47,135,252,109,40,191,67,151,239,113,180,61,230,24,15,175,93,70,254,49,7,127,210,81,126,208,209,215,163, | |||
40,79,103,244,160,124,137,46,31,119,216,234,87,40,167,117,249,133,122,181,111,215,232,53,122,167,46,243,26,253,151,46,179,253, | |||
51,229,135,29,252,140,255,116,234,182,92,238,114,248,67,183,195,31,122,52,127,190,46,95,43,125,190,137,238,39,69,215,10,110, | |||
83,64,87,201,182,205,244,1,73,87,210,135,36,245,80,135,96,31,46,165,247,242,90,163,247,231,37,21,244,71,73,107,169,74,214,47,164, | |||
197,130,227,66,177,148,171,210,252,42,205,95,160,159,153,110,19,188,199,44,250,48,49,245,211,95,36,85,245,53,186,190,86,143,167, | |||
22,145,247,136,164,93,116,167,164,37,244,138,164,203,232,53,93,95,46,20,13,10,181,71,111,39,166,107,232,247,164,227,190,224, | |||
216,95,73,31,228,50,36,95,37,142,117,30,122,84,82,147,190,37,169,77,63,37,142,117,110,250,184,164,213,244,85,77,159,228,117, | |||
192,137,241,49,77,63,43,169,69,223,150,116,11,45,135,126,27,124,55,113,28,236,165,62,193,116,5,13,8,190,3,40,190,55,75,189,116, | |||
189,164,57,180,30,245,62,173,39,79,215,231,129,115,189,164,185,212,45,20,237,17,28,35,243,232,235,196,180,138,126,70,28,199, | |||
213,120,252,136,164,63,144,180,128,74,4,83,63,205,23,28,219,213,184,57,198,63,165,233,207,73,197,215,239,75,58,72,199,37,45,164, | |||
159,104,62,215,23,107,189,197,56,165,214,65,207,28,61,174,18,156,74,223,145,180,137,230,8,166,171,105,174,164,29,212,44,105, | |||
59,237,16,28,167,85,251,82,216,255,168,166,108,175,121,90,79,25,198,255,32,113,60,13,208,151,136,227,176,65,183,72,63,92,47,235, | |||
217,239,20,21,244,136,164,181,244,61,73,183,211,15,37,221,72,66,250,235,98,42,148,116,9,5,36,61,155,106,36,221,68,155,36,221, | |||
64,219,165,95,174,147,250,66,122,92,76,239,149,84,217,39,132,72,254,11,73,7,232,15,186,62,79,182,235,167,34,73,55,83,151,80,252, | |||
94,77,251,165,95,175,149,122,171,180,222,42,173,183,74,235,173,210,250,170,116,251,42,221,190,74,183,175,214,237,170,181,124, | |||
181,150,175,214,242,213,90,190,90,203,47,192,78,231,254,22,32,43,49,228,243,50,50,53,181,36,93,74,182,164,203,201,165,169,91, | |||
243,243,53,45,144,180,153,252,154,22,203,253,214,37,245,214,160,255,143,72,90,77,223,144,212,69,223,37,117,22,62,46,233,89, | |||
180,90,238,51,181,62,181,122,190,181,240,148,251,36,157,71,95,148,116,33,61,36,169,90,191,90,248,205,99,146,238,160,39,36,221,78, | |||
199,52,253,31,73,139,232,71,146,214,208,255,147,116,62,253,88,210,85,228,145,253,181,82,142,166,94,161,248,185,146,182,145,79, | |||
168,120,80,42,233,92,154,39,105,41,149,73,186,149,170,37,109,164,5,146,118,83,139,164,27,40,34,227,68,189,156,199,66,100,94, | |||
247,232,56,241,180,140,15,103,97,230,138,186,37,157,67,95,147,180,140,30,38,62,235,23,75,126,163,150,135,118,26,18,76,43,232, | |||
109,130,207,118,213,174,73,219,167,9,158,254,77,226,51,92,245,211,12,59,255,142,56,183,236,145,114,45,240,124,222,15,203,116, | |||
187,101,144,59,172,159,111,212,207,55,73,90,71,47,232,231,165,66,229,1,27,37,141,208,160,224,28,53,76,239,35,206,83,149,158, | |||
21,186,253,10,200,127,66,210,74,217,207,10,100,191,47,75,26,162,38,161,248,172,111,165,110,183,82,247,191,82,247,179,82,247,179, | |||
82,247,211,138,241,255,146,152,6,233,159,196,121,135,26,215,106,77,219,180,158,54,100,187,107,4,231,199,234,185,93,251,23,159, | |||
77,96,203,119,35,36,227,2,206,50,36,226,55,32,17,62,178,69,229,97,194,53,147,71,113,253,213,168,127,98,139,122,14,233,246,204, | |||
127,251,18,69,111,66,253,31,116,125,149,174,111,114,212,63,128,250,186,173,170,126,129,214,107,59,244,31,67,253,144,174,175,209, | |||
252,118,71,253,175,80,255,30,93,95,171,245,207,1,198,180,254,151,81,255,57,93,191,80,183,115,142,127,29,228,22,109,83,207, | |||
117,142,241,101,234,183,161,190,91,215,115,14,30,197,197,96,108,64,201,165,52,189,124,96,166,238,26,71,249,227,186,254,14,7, | |||
239,11,186,252,16,232,55,29,229,99,3,42,151,103,153,159,1,255,171,219,254,73,83,99,139,162,69,154,134,53,237,208,52,162,105,108, | |||
203,76,95,251,53,239,93,91,88,183,33,203,231,111,80,247,140,73,127,30,158,171,225,59,147,254,79,226,121,216,111,33,234,15,251, | |||
13,26,14,24,56,183,88,158,245,36,55,168,123,66,4,53,23,249,175,32,62,21,19,161,113,172,181,87,222,13,44,45,183,111,131,186,67, | |||
92,36,123,241,137,68,200,192,126,130,172,223,150,207,124,30,152,168,99,217,119,109,80,103,94,36,100,81,164,202,130,204,45,168, | |||
241,138,5,184,224,38,66,183,98,124,62,248,98,143,148,177,101,22,128,188,17,109,230,130,78,249,111,71,159,62,49,229,255,52,183, | |||
49,90,141,60,240,110,67,153,219,248,40,16,72,52,173,130,39,133,95,206,215,35,35,58,186,65,217,129,239,53,46,57,51,220,179,55, | |||
168,123,99,160,112,105,177,77,129,170,150,226,66,140,163,16,253,249,176,127,114,41,210,204,227,226,91,148,207,72,132,62,5,223, | |||
13,116,182,20,87,34,126,205,161,50,227,66,186,40,212,12,222,76,139,192,41,45,110,150,181,150,182,69,59,34,105,190,156,11,247, | |||
253,205,13,234,94,227,180,85,39,180,32,122,106,253,95,208,250,3,162,64,68,154,149,229,133,148,252,79,105,169,240,171,94,104,98, | |||
237,79,109,80,239,56,3,37,1,151,214,7,61,94,42,179,160,199,206,147,122,34,232,59,33,47,151,62,177,74,100,234,124,186,46,252, | |||
74,107,206,114,170,54,188,240,4,182,89,153,101,161,191,38,182,178,149,8,249,113,6,85,155,121,168,11,192,114,137,80,49,178,101, | |||
230,207,193,45,215,103,5,106,185,20,161,5,233,117,232,161,0,173,125,246,128,109,185,46,242,127,68,181,247,23,161,149,207,78, | |||
172,203,165,206,255,14,127,53,17,242,225,6,28,254,18,101,253,203,187,81,221,73,79,246,175,75,225,95,249,200,211,92,202,231,55, | |||
170,123,232,164,191,1,109,134,23,228,208,112,141,139,134,107,189,180,115,161,7,150,63,47,228,150,107,107,75,255,18,84,183,81, | |||
197,146,128,25,233,116,81,171,112,19,211,132,127,49,234,34,157,57,224,228,72,26,233,242,162,175,255,130,157,135,187,161,179,219, | |||
5,45,121,122,5,2,122,5,194,207,171,120,196,186,133,168,199,241,37,228,152,218,209,7,199,206,132,159,51,254,164,255,42,237,95, | |||
25,31,239,217,168,226,104,36,132,126,170,184,159,41,233,215,133,50,142,8,233,151,155,54,170,189,26,128,229,132,230,109,219,56, | |||
227,171,249,152,63,223,221,119,108,84,123,171,35,215,71,67,151,121,200,125,208,125,141,184,89,220,103,125,107,159,167,83,203, | |||
90,250,246,191,219,209,222,208,99,153,218,168,98,98,196,159,163,60,213,15,171,64,98,187,223,45,125,133,159,19,161,37,24,95,192, | |||
127,158,223,125,82,219,75,222,162,109,107,182,109,61,183,165,76,91,30,11,143,225,221,122,109,39,253,124,235,24,22,62,26,54,114, | |||
105,24,222,148,159,93,171,107,29,107,149,171,215,42,23,86,93,32,215,202,167,215,202,135,181,202,203,174,21,244,116,231,254, | |||
27,107,117,123,118,173,250,102,93,171,207,101,215,10,253,84,229,205,186,86,247,103,214,10,158,232,214,51,252,42,120,69,220, | |||
174,89,143,28,52,177,174,134,58,99,51,99,235,20,122,108,175,169,119,50,122,108,222,204,122,63,233,88,175,12,239,167,14,158,41,71, | |||
137,115,110,163,122,143,51,44,10,96,79,182,234,176,145,47,227,180,122,27,244,130,163,77,198,23,254,58,11,207,232,117,198,66, | |||
75,206,41,191,87,197,227,64,168,197,46,128,15,36,224,179,38,172,193,81,195,195,251,23,113,231,157,242,54,51,163,167,162,247,116, | |||
221,139,102,225,45,159,133,215,217,123,242,252,248,207,192,44,188,115,28,60,91,90,14,231,90,47,71,8,182,67,17,236,240,25,105, | |||
7,156,91,102,33,13,91,60,66,75,90,209,164,169,94,245,30,168,220,168,161,10,35,32,134,155,3,88,249,187,81,3,159,109,246,99,189, | |||
10,36,77,192,103,133,46,113,180,97,73,63,158,11,33,225,149,52,225,47,213,252,66,10,26,184,235,137,160,81,39,242,68,248,53,158, | |||
205,60,212,85,202,241,153,50,255,112,73,159,90,116,105,253,146,69,186,108,208,7,122,85,78,90,110,98,44,102,100,16,186,141,5, | |||
196,52,225,159,199,49,83,36,252,213,242,52,11,44,107,233,154,11,110,21,71,123,163,204,186,6,190,216,136,8,204,103,155,137,253, | |||
230,201,158,48,65,179,16,40,195,242,133,223,200,67,169,206,80,249,195,66,180,172,215,190,36,112,255,202,248,239,103,122,85,125, | |||
196,239,207,250,53,215,124,161,55,115,190,171,209,200,248,235,87,111,10,213,249,174,246,233,151,122,249,30,137,57,8,204,65,68, | |||
154,2,24,77,30,69,154,10,249,14,64,252,28,89,10,13,161,125,136,220,65,193,254,31,20,117,164,250,44,146,125,21,99,223,168,179, | |||
252,209,94,245,14,53,96,77,250,107,97,185,225,72,49,13,239,40,134,69,138,169,204,252,51,180,148,224,70,228,51,42,141,18,26,30, | |||
44,1,191,132,86,225,124,42,51,176,163,204,49,185,219,113,115,194,153,181,2,62,240,81,62,19,6,231,225,105,25,158,62,36,159,74, | |||
79,170,43,59,233,105,142,212,151,240,47,100,203,83,149,25,48,150,47,245,210,6,76,51,17,74,35,214,29,55,12,172,173,148,105,90, | |||
68,131,86,248,113,143,62,171,254,212,171,114,207,200,72,41,218,31,225,157,97,113,30,98,145,215,108,53,155,100,30,98,201,113,7, | |||
41,130,160,86,105,250,165,77,205,153,21,54,3,203,91,134,126,123,66,175,176,89,102,171,21,30,202,174,240,79,78,232,21,54,19,161, | |||
247,227,172,101,205,79,156,40,52,2,70,248,159,46,61,142,185,125,234,253,120,164,171,12,250,63,206,243,48,166,252,119,104,250, | |||
105,80,110,53,95,142,199,144,154,27,41,210,13,217,208,81,57,150,74,172,97,194,63,34,71,192,189,12,73,249,103,79,20,138,128,8, | |||
255,147,227,140,242,158,230,62,245,174,189,220,174,165,10,59,146,230,89,95,207,179,181,22,116,117,241,89,144,86,118,192,156,93, | |||
66,102,100,46,212,181,90,115,101,207,46,104,175,52,131,116,28,241,46,130,43,81,165,165,172,193,121,193,128,101,8,33,194,191,13, | |||
218,133,70,158,21,180,235,44,246,139,6,217,107,163,244,19,254,59,214,167,222,209,151,91,232,31,190,50,193,185,150,57,60,52, | |||
151,130,214,204,106,39,66,23,82,140,103,162,86,196,228,113,152,114,28,65,57,14,53,227,133,50,170,207,145,185,203,53,216,81,9, | |||
255,229,188,30,214,69,254,43,117,166,195,220,240,51,121,102,208,170,51,121,158,108,197,5,77,156,145,222,192,86,196,92,144,145, | |||
154,60,78,142,24,43,179,123,108,5,185,244,110,186,70,175,75,185,129,241,26,145,78,101,29,49,51,38,209,42,74,51,99,194,170,4, | |||
229,109,183,82,40,187,200,252,206,95,41,243,187,150,179,159,63,17,52,56,222,4,40,252,127,42,226,168,189,84,39,123,10,19,231,157, | |||
220,239,93,125,234,59,136,114,47,250,244,182,250,139,41,48,47,209,148,162,27,243,124,88,211,45,20,249,250,60,204,224,99,200, | |||
197,185,119,55,86,45,232,45,164,192,162,240,139,131,205,243,105,50,116,17,238,192,62,119,171,123,21,69,246,97,44,46,68,70,87,11, | |||
164,90,225,175,131,205,21,104,59,31,121,183,15,121,118,14,110,11,33,114,127,221,122,118,159,139,223,144,182,98,6,172,189,218, | |||
106,129,158,171,97,197,68,211,77,212,108,5,189,225,99,24,177,183,78,168,246,101,220,222,211,234,249,221,137,106,156,131,147,235, | |||
122,233,225,214,240,51,65,47,102,246,32,201,251,124,55,102,196,223,189,168,44,104,163,244,63,94,255,122,48,249,253,98,192,21, | |||
73,97,55,134,206,194,126,80,190,16,73,205,129,205,110,228,83,42,165,246,128,90,249,59,100,182,201,214,182,165,79,151,72,107,219, | |||
210,3,26,149,44,246,64,145,92,77,222,3,187,32,31,254,157,90,243,128,57,140,250,32,116,207,59,85,163,99,151,151,57,118,249,66, | |||
146,178,208,184,64,106,108,65,187,15,202,118,149,102,53,228,182,177,246,223,12,239,155,7,185,217,34,70,117,70,151,242,5,83,80, | |||
43,34,6,211,74,211,146,39,147,233,120,114,201,167,76,84,41,101,221,63,83,122,175,69,153,179,26,206,190,56,143,89,4,251,45,211, | |||
249,141,192,109,182,64,223,21,70,54,169,247,211,51,123,39,242,212,92,170,218,19,48,197,242,229,211,45,216,107,46,59,225,15,113, | |||
244,241,84,93,9,238,178,229,215,214,32,50,122,144,199,7,101,244,106,249,205,92,170,246,46,204,156,16,185,129,162,150,53,240, | |||
166,162,132,191,130,235,125,147,235,14,210,151,31,225,189,244,73,58,110,90,66,44,11,63,29,48,195,127,58,110,218,66,44,15,255,160, | |||
208,176,245,222,190,114,147,218,43,129,80,185,192,138,194,243,63,192,86,49,86,25,33,120,83,28,62,193,62,135,155,153,63,200,39, | |||
245,210,57,210,139,187,228,141,207,141,179,37,252,87,117,194,76,134,246,106,89,139,185,127,8,138,128,204,3,121,190,243,49,38, | |||
158,77,142,180,67,69,54,167,61,186,73,249,93,192,63,25,74,200,155,99,97,182,238,230,76,93,104,166,46,160,199,124,199,38,245,253, | |||
158,7,188,237,158,114,106,245,108,193,189,75,237,60,15,242,163,72,46,172,249,96,192,35,174,92,254,157,77,176,91,110,78,192, | |||
208,59,218,195,109,6,243,230,83,203,241,85,196,54,134,230,188,170,95,6,60,203,159,111,166,13,86,158,135,45,140,249,187,90,246, | |||
177,117,43,164,135,200,54,5,21,212,242,231,114,240,202,217,83,108,182,19,124,27,251,41,63,147,39,120,202,114,254,33,79,145,235, | |||
81,95,105,55,243,14,183,3,117,225,123,143,123,60,34,124,236,184,39,71,136,43,195,247,7,189,101,72,142,195,127,206,243,96,111, | |||
122,56,131,28,68,235,183,103,227,216,5,217,187,241,156,205,234,59,56,142,172,221,50,42,201,40,230,184,115,23,56,238,220,11,101, | |||
44,133,55,24,45,131,47,159,96,107,241,25,98,105,159,59,107,179,186,187,241,249,199,185,87,160,185,197,111,194,79,35,56,227,3, | |||
34,177,46,76,77,129,240,235,252,78,219,144,57,212,50,200,223,196,241,44,15,86,205,75,139,121,188,91,61,108,69,15,172,19,112,7, | |||
114,248,198,23,241,149,225,182,248,30,62,99,242,217,47,94,128,239,173,242,157,47,123,129,156,47,176,166,229,133,38,142,132,176, | |||
144,135,124,190,178,124,117,206,190,32,45,132,115,214,86,183,115,68,6,75,233,83,254,213,143,182,173,190,118,154,225,29,5,207, | |||
231,174,116,91,14,222,39,192,171,206,173,145,28,15,252,205,99,32,23,61,39,74,185,85,167,141,13,17,241,133,220,234,252,54,236, | |||
183,59,49,235,214,156,38,42,242,29,115,95,246,176,237,231,156,17,59,121,221,93,244,144,63,152,151,159,25,143,143,117,240,14,120, | |||
152,124,222,86,47,188,234,46,65,238,135,43,97,77,55,226,180,71,198,5,183,140,7,110,74,227,60,41,162,96,94,248,215,121,190,96, | |||
94,157,175,200,55,74,225,31,230,249,194,175,241,89,49,141,21,226,239,215,216,155,142,100,115,185,235,197,165,245,71,197,245,130, | |||
243,62,67,230,218,15,108,86,223,195,149,187,97,115,55,159,69,94,156,232,108,115,156,231,70,228,136,154,143,193,235,0,27,93,129, | |||
117,104,117,33,154,30,65,236,9,93,71,183,226,121,149,171,150,78,150,59,10,57,159,171,210,197,81,118,84,230,2,39,215,127,2,245, | |||
172,161,218,19,164,201,166,165,116,155,201,81,227,10,10,186,243,73,143,192,226,213,227,220,162,204,163,86,239,10,25,199,177,122, | |||
162,92,90,75,200,92,85,82,23,91,44,142,213,109,181,225,91,67,42,102,182,154,30,29,69,85,244,228,168,233,165,240,19,121,174, | |||
240,247,243,92,65,119,157,75,157,169,156,87,76,234,120,121,177,220,15,136,82,151,214,167,247,209,62,105,35,142,13,158,126,245, | |||
61,127,57,102,90,33,109,227,37,175,205,231,231,185,242,253,207,64,54,54,71,4,122,23,22,5,138,3,115,90,144,248,4,172,200,117, | |||
234,68,177,229,217,116,135,166,242,140,194,138,190,120,66,159,81,242,68,25,172,155,79,90,187,167,229,208,139,39,100,91,88,179, | |||
86,122,174,58,97,108,89,86,39,12,34,100,113,248,241,86,225,209,55,25,117,139,137,92,199,107,243,97,212,6,93,200,197,237,160, | |||
171,206,86,115,61,87,238,245,157,217,119,99,155,251,79,190,15,242,253,121,168,63,27,31,183,93,66,75,35,62,153,109,24,178,238, | |||
63,250,213,61,148,223,197,5,140,201,193,75,168,219,207,245,57,114,191,27,20,235,87,191,169,8,20,113,236,227,93,195,107,196,223, | |||
90,114,70,102,82,129,161,78,112,126,135,232,134,5,91,109,68,115,43,252,42,238,48,86,157,17,153,154,67,186,149,29,112,241,238, | |||
25,116,69,166,138,193,155,43,179,219,192,156,106,215,2,248,203,14,218,231,78,172,195,9,24,243,33,171,193,138,59,218,201,86,34, | |||
104,137,165,225,239,242,189,245,16,133,255,174,222,121,122,49,83,254,158,117,177,180,65,105,54,70,189,191,95,189,31,200,196, | |||
164,58,196,36,117,15,85,86,250,176,182,71,196,63,79,238,126,126,55,165,252,194,162,155,250,213,111,63,120,142,94,185,51,56,186, | |||
169,157,20,57,162,162,202,173,146,143,123,204,17,21,81,110,149,107,13,255,52,212,170,25,114,213,12,93,255,9,212,243,169,118, | |||
187,244,230,0,234,98,236,41,50,91,177,179,187,140,178,187,136,61,31,178,176,46,124,175,251,164,91,135,43,17,186,24,187,66,101, | |||
11,65,119,248,94,229,245,121,162,204,133,155,148,167,72,222,164,174,192,153,160,222,211,244,192,42,91,244,253,251,108,29,47, | |||
206,209,249,174,65,67,151,214,239,24,202,190,219,249,75,191,243,221,206,185,98,62,157,103,148,211,185,102,133,124,107,165,110, | |||
157,214,128,122,39,31,16,171,16,115,11,112,142,188,79,102,78,76,57,147,111,89,250,218,9,247,54,62,65,6,187,42,104,16,109,91, | |||
150,190,120,98,123,87,57,109,55,203,81,126,254,196,96,215,124,240,113,106,46,125,230,68,160,48,252,116,230,29,31,206,168,1,245, | |||
125,68,53,238,11,131,157,243,233,135,129,131,160,21,84,100,30,164,229,205,69,178,124,79,213,100,232,16,199,88,255,97,121,62, | |||
109,239,196,153,141,157,18,248,211,231,171,10,68,145,184,148,194,47,65,235,223,213,13,25,121,211,128,246,123,216,172,18,8,98,46, | |||
153,119,72,77,3,42,167,80,243,205,215,177,212,160,229,3,250,253,149,152,121,251,106,82,161,208,239,91,113,86,254,227,68,185, | |||
81,135,251,192,46,17,164,85,2,89,180,168,196,154,181,32,35,143,131,19,148,252,240,243,153,28,191,80,234,16,250,187,18,33,51,24, | |||
83,247,181,117,64,125,71,83,70,234,142,108,200,222,44,249,61,113,57,114,161,10,177,11,245,171,136,51,245,90,244,177,7,109,121, | |||
38,65,201,15,191,152,185,147,231,233,62,42,178,125,148,203,223,192,10,34,202,216,130,231,122,83,64,125,199,116,27,232,61,217, | |||
95,217,170,63,15,234,231,140,60,255,198,234,49,240,142,157,194,223,164,249,63,63,165,253,243,167,60,255,37,160,250,204,252,134, | |||
137,223,57,90,69,234,183,69,197,69,234,187,152,242,34,245,155,9,31,232,152,214,27,7,173,193,243,133,160,75,138,212,111,63,150, | |||
129,182,23,157,172,191,247,148,103,65,250,251,44,82,177,140,41,255,150,199,144,180,89,198,202,2,100,203,182,174,43,119,204,73, | |||
144,202,105,12,253,100,106,186,134,102,126,167,149,249,30,201,144,180,73,62,47,212,252,238,172,156,79,183,85,191,50,81,125,173, | |||
205,182,103,152,89,204,149,177,203,208,54,50,29,182,82,60,151,230,185,36,79,149,221,89,93,57,154,250,53,13,104,153,128,214,43, | |||
223,179,211,204,247,103,114,143,201,12,90,217,158,101,249,251,228,133,186,95,254,46,119,161,222,139,181,248,107,105,234,215, | |||
241,97,149,110,179,74,223,73,88,174,93,239,165,53,186,110,173,30,191,149,45,203,89,135,201,12,247,225,14,179,136,106,154,90,186, | |||
90,155,214,47,239,172,95,223,179,190,181,126,89,87,75,75,125,231,202,229,205,245,43,186,215,183,44,91,223,189,172,123,101, | |||
19,76,139,124,173,125,100,60,158,136,167,215,144,171,93,81,99,77,27,89,107,218,22,237,224,79,148,253,93,227,211,177,116,50,153, | |||
30,27,136,38,162,123,98,83,180,250,84,78,40,54,53,149,156,90,29,26,73,78,143,143,134,18,201,116,104,79,44,29,202,74,133,250, | |||
215,135,82,35,209,68,2,109,215,254,107,109,71,99,187,163,211,227,78,29,209,209,232,100,26,10,202,122,166,39,38,14,100,249,27, | |||
163,233,116,119,116,124,124,87,116,228,66,18,125,100,244,245,147,217,215,223,79,149,125,91,67,235,247,143,196,38,211,241,36,130, | |||
249,88,124,60,22,26,25,79,166,226,137,61,161,201,228,84,154,106,251,182,190,89,253,68,124,52,142,33,236,139,143,196,72,108,34, | |||
107,211,246,238,245,84,184,105,122,36,54,128,154,190,196,228,116,122,27,171,8,100,88,91,167,211,25,158,47,195,147,79,197,153, | |||
167,161,233,73,238,181,97,111,116,95,148,68,63,25,253,125,100,246,247,201,15,244,128,15,100,22,24,182,217,143,15,171,191,127, | |||
103,63,213,244,71,19,163,83,201,248,104,227,174,204,108,27,179,243,238,84,230,104,163,5,111,37,213,35,231,208,70,85,111,37,196, | |||
38,108,163,69,103,18,201,88,185,141,26,207,40,58,22,157,138,142,96,120,241,84,58,62,210,70,139,207,212,160,39,150,26,153,138, | |||
79,166,147,83,179,15,100,60,54,35,223,31,27,82,190,52,251,220,33,202,245,51,163,125,19,125,44,180,33,62,142,65,214,116,77,199, | |||
199,71,89,223,108,102,58,73,244,45,69,6,99,41,184,236,236,179,213,34,67,177,116,26,14,150,154,233,242,45,166,144,17,110,163, | |||
121,89,161,145,100,34,29,75,164,27,187,153,238,71,103,149,217,170,137,216,104,60,218,200,174,219,200,14,151,89,250,37,111,45,208, | |||
151,216,157,172,97,87,229,130,115,56,111,42,221,70,181,111,45,52,148,142,166,167,49,234,234,55,19,203,110,32,167,43,157,34,163, | |||
163,67,141,82,57,179,154,43,207,212,96,107,66,53,217,58,25,75,196,70,251,225,129,49,233,43,161,51,52,124,139,185,207,236,110, | |||
231,250,159,34,52,24,27,137,197,247,177,158,162,172,72,50,213,216,53,157,24,29,199,50,20,59,153,189,81,102,66,180,196,201,221, | |||
22,157,26,137,141,111,159,142,143,182,81,32,91,49,157,142,143,55,246,39,247,156,198,219,22,141,79,57,250,202,242,218,104,251, | |||
233,204,246,51,184,201,25,227,3,14,130,166,254,145,228,68,227,212,68,106,188,113,47,162,90,227,41,161,173,230,212,200,222,70, | |||
205,103,104,113,90,68,109,163,165,255,98,19,231,154,44,249,23,219,40,233,254,51,72,207,88,37,235,131,111,122,226,180,81,207,191, | |||
173,109,134,195,46,26,137,166,46,60,179,161,78,211,114,230,73,103,38,188,45,154,30,227,48,241,150,210,188,89,71,163,227,251, | |||
226,23,54,34,180,38,177,129,113,40,54,174,79,232,3,177,123,60,154,194,134,14,206,34,211,199,145,88,215,87,205,82,63,16,155,216, | |||
165,5,98,16,169,152,69,100,40,190,39,129,136,49,133,93,82,54,75,117,100,108,42,121,49,154,206,233,231,179,179,49,158,108,116, | |||
28,220,109,84,168,216,227,209,196,158,70,61,142,34,7,171,15,113,82,218,43,224,96,110,221,181,55,54,146,62,153,55,148,158,194, | |||
76,179,221,72,158,236,58,186,139,247,111,185,131,61,21,219,221,120,78,44,122,225,96,108,119,108,42,150,64,146,80,241,86,181, | |||
188,249,101,181,220,141,157,83,83,209,3,28,150,50,61,157,204,109,163,238,217,216,237,255,206,106,175,225,67,111,86,37,167,77,119, | |||
77,214,8,51,162,169,147,121,189,209,20,118,244,100,198,170,78,222,233,130,56,179,78,19,4,239,100,19,244,225,36,141,202,179,190, | |||
192,193,149,54,241,159,194,104,163,150,83,56,237,103,60,128,215,156,172,87,118,95,232,96,68,226,19,236,16,115,78,101,169,173, | |||
88,120,218,94,163,206,211,88,179,39,173,142,211,36,148,58,128,131,103,34,148,138,77,201,44,50,112,250,174,39,159,115,209,168, | |||
214,121,228,55,116,119,246,247,119,117,118,111,190,32,114,238,182,245,23,12,116,70,186,123,47,232,223,58,20,33,177,131,140,29, | |||
200,26,119,32,207,181,118,244,237,236,35,215,142,77,200,35,55,129,141,236,113,7,210,74,107,7,231,149,246,14,201,5,71,126,176, | |||
116,191,170,68,217,230,207,77,138,32,23,221,177,147,4,210,79,40,51,144,119,26,195,93,84,61,124,230,84,168,126,248,223,74,45,106, | |||
254,5,113,236,221,225,89,246,233,73,204,204,70,205,141,142,140,196,82,169,13,227,209,61,41,242,34,221,156,142,142,203,156,219, | |||
157,185,42,152,209,209,81,126,26,157,130,28,249,116,239,125,137,209,216,126,180,86,79,178,133,55,58,57,169,51,42,114,69,83,202, | |||
19,119,157,146,106,83,89,150,211,191,94,238,61,181,182,219,183,247,245,80,96,215,105,233,169,67,67,198,145,138,103,56,217,105, | |||
167,28,114,23,232,59,71,206,174,116,167,30,181,103,87,90,201,65,76,151,82,124,160,195,4,228,218,149,230,195,136,236,93,156,77, | |||
146,111,68,159,74,145,3,147,49,114,97,20,72,39,40,127,228,164,100,156,236,145,241,88,116,138,73,50,21,35,55,18,202,4,108,76, | |||
185,186,32,21,122,56,205,140,198,19,41,201,150,165,205,177,3,82,88,218,200,167,11,145,228,118,232,176,177,11,18,105,18,163,228, | |||
29,205,230,241,228,210,115,241,40,10,27,101,74,163,148,151,41,41,5,185,163,89,7,72,101,234,50,38,243,170,71,153,236,228,140,198, | |||
167,48,68,132,125,176,227,169,204,208,93,177,139,176,244,41,202,145,155,178,59,57,10,3,198,50,7,4,53,236,142,226,106,55,26, | |||
74,39,67,35,83,177,104,58,22,218,53,61,174,239,148,74,119,104,247,84,114,34,148,113,19,207,238,120,34,58,30,127,71,140,170,80, | |||
26,157,89,168,13,201,41,199,237,75,9,87,178,72,102,67,207,38,96,239,142,79,193,153,124,187,97,162,209,204,130,123,185,67,229, | |||
198,100,237,97,131,231,240,167,50,134,137,72,66,94,124,100,84,228,114,121,92,186,118,138,202,248,65,121,238,105,215,242,249, | |||
51,117,167,199,176,57,92,57,57,57,30,31,145,167,106,198,219,139,192,62,109,208,165,78,166,51,167,151,90,78,191,136,145,7,108,121, | |||
246,82,33,74,61,234,238,158,217,54,57,146,37,125,33,63,91,84,107,237,205,62,167,200,141,178,116,190,69,40,244,78,79,112,56,199, | |||
70,198,225,171,44,53,171,117,33,10,199,146,100,84,106,96,189,84,141,2,31,144,167,25,99,75,116,130,153,125,61,41,170,59,93,70, | |||
102,161,167,9,134,79,23,84,185,231,105,146,243,32,201,213,167,14,19,147,155,171,171,122,178,206,140,233,232,33,179,6,185,200, | |||
188,194,242,33,47,243,48,205,185,19,249,245,35,31,19,220,172,71,218,91,249,131,20,157,74,78,198,166,210,113,244,83,128,199,193, | |||
216,68,50,29,203,4,13,48,134,228,81,164,163,149,236,82,6,136,188,49,121,11,209,247,22,114,143,69,83,91,216,37,60,40,140,201, | |||
93,100,141,37,225,187,57,252,169,124,83,196,201,140,143,238,39,43,206,102,182,227,114,17,115,226,217,247,33,185,241,84,118,242, | |||
252,208,173,118,104,12,19,141,167,214,79,76,166,15,112,65,218,153,171,103,94,164,120,226,58,37,32,15,167,55,189,220,175,111,175, | |||
243,69,138,121,33,2,144,11,31,156,97,120,199,147,136,117,42,144,187,39,180,135,91,124,158,144,119,34,107,102,42,156,56,109, | |||
27,228,79,156,180,10,148,59,225,8,196,198,196,4,153,19,169,61,248,72,79,147,149,224,181,176,249,19,81,33,17,187,152,247,0,140, | |||
146,96,35,153,201,93,123,201,149,220,189,59,133,225,4,146,137,174,104,122,100,108,38,7,73,81,9,246,216,73,129,23,79,137,61,176, | |||
68,241,169,21,236,230,52,231,84,238,57,83,48,137,212,162,108,136,61,43,251,87,106,200,159,76,204,188,51,145,26,10,157,28,213, | |||
58,47,169,239,194,112,68,244,156,159,60,233,106,204,125,58,159,123,98,227,209,3,96,23,100,216,236,72,251,156,114,42,8,100,38, | |||
226,78,38,54,140,79,167,198,200,151,76,12,164,167,51,108,140,140,199,163,188,112,48,149,138,83,41,115,198,227,188,149,229,184, | |||
186,147,19,147,136,192,144,69,75,153,80,200,8,157,121,82,22,132,113,145,13,37,164,189,180,235,166,122,56,230,227,138,13,217, | |||
34,184,124,226,148,24,69,94,102,234,114,30,151,103,28,172,132,31,79,186,106,158,19,79,143,97,43,149,102,42,102,46,148,186,38, | |||
144,169,113,240,242,153,231,120,217,151,195,207,106,39,122,146,153,188,46,39,83,66,128,194,224,248,16,75,206,52,177,147,23,115, | |||
200,44,154,132,251,157,58,129,178,89,152,67,233,216,100,228,226,36,149,156,84,55,19,76,200,154,228,244,209,146,239,52,115,38, | |||
101,186,197,251,194,51,169,51,47,85,146,129,37,63,83,210,17,75,214,200,236,51,47,83,82,27,93,86,200,40,145,159,41,69,146,27,112, | |||
214,145,61,41,103,107,242,22,158,59,21,219,195,239,87,166,78,126,73,67,174,41,233,57,228,85,84,133,6,85,86,249,214,188,41,28, | |||
217,177,84,122,198,183,183,77,197,147,240,141,3,220,86,46,191,123,74,111,36,48,210,251,162,227,100,77,177,47,153,83,211,9,42, | |||
76,101,179,80,253,30,141,138,82,142,236,57,195,116,103,94,58,123,82,35,99,177,81,28,251,228,74,197,144,54,140,146,149,98,223, | |||
42,227,79,245,182,119,44,58,26,234,219,26,154,201,27,60,92,199,102,166,2,236,241,110,103,106,149,11,6,123,234,0,7,201,124,126, | |||
208,153,224,116,124,20,149,99,124,41,192,94,193,68,173,20,39,18,118,74,62,228,72,194,13,41,79,21,211,201,73,249,232,74,169,227, | |||
213,74,129,131,158,51,252,28,120,79,102,149,211,99,113,24,131,63,107,154,80,129,11,11,26,77,76,146,59,157,148,183,54,242,164, | |||
147,58,167,152,51,157,152,205,187,230,157,194,118,248,80,233,116,226,77,214,210,134,237,167,113,58,72,178,117,55,69,196,205, | |||
194,157,111,188,76,109,251,141,171,47,109,171,167,152,120,15,24,116,129,36,135,76,58,34,44,218,73,224,124,85,8,178,172,7,140,213, | |||
163,238,252,19,38,221,111,228,237,180,137,62,33,196,231,89,254,22,97,124,68,220,111,184,243,47,236,55,233,54,97,213,95,111,83, | |||
199,254,126,23,53,28,121,7,196,62,32,164,190,195,82,95,195,254,16,237,21,223,54,220,75,32,251,1,97,54,24,21,23,27,123,42,250, | |||
77,241,65,145,211,240,158,134,157,166,241,160,145,251,225,157,166,249,85,35,127,243,206,142,71,250,182,218,134,109,210,141,74, | |||
201,17,250,190,176,94,23,135,196,103,140,103,240,216,94,143,63,237,244,186,32,119,197,150,183,111,62,80,95,111,76,87,84,154, | |||
244,5,209,64,199,193,204,111,111,167,163,6,207,224,105,126,162,107,101,249,253,134,245,119,113,153,113,139,248,33,198,92,127, | |||
11,221,96,152,234,25,117,207,177,220,163,59,59,232,165,76,225,78,195,84,29,170,238,232,167,198,44,157,221,107,168,206,94,146, | |||
29,124,69,126,126,111,70,237,150,11,140,75,50,162,95,151,149,223,146,159,55,153,6,6,143,65,180,215,211,189,166,241,21,113,35, | |||
143,225,30,211,228,210,227,232,145,62,239,40,127,154,203,143,27,255,132,76,199,230,15,211,23,249,241,211,170,234,1,71,249,33, | |||
46,255,67,149,31,228,242,151,13,89,254,50,119,32,75,119,103,75,223,54,45,250,140,184,77,60,8,157,59,121,118,199,76,140,171,163, | |||
29,139,243,37,99,109,255,206,225,53,91,206,95,83,111,147,177,191,205,69,244,146,172,236,143,155,226,57,81,116,224,17,185,160, | |||
245,231,219,100,139,249,149,171,232,160,197,83,122,183,252,124,15,127,118,28,218,31,44,167,235,45,118,179,10,227,176,213,102, | |||
188,126,201,146,250,71,251,141,252,139,141,125,21,251,247,239,63,16,71,55,162,91,233,91,189,198,22,244,126,151,92,102,17,240, | |||
91,198,171,162,178,243,144,179,171,111,115,79,182,65,71,181,208,92,191,73,183,139,38,200,28,53,106,111,227,74,186,220,195,253, | |||
30,54,141,255,21,221,65,147,158,21,66,184,109,50,5,10,143,88,38,107,20,134,45,92,36,114,109,114,137,74,219,172,151,26,127,105, | |||
137,187,97,142,142,120,229,176,101,220,105,44,31,22,197,126,83,220,110,212,237,55,14,124,131,37,214,187,12,140,245,255,196,122, | |||
186,218,35,238,224,5,16,129,2,139,88,225,175,67,54,205,175,60,139,254,100,153,183,139,95,139,63,112,101,187,153,243,89,67,244, | |||
155,38,84,52,30,50,106,150,24,219,43,108,211,206,89,238,50,93,57,123,45,247,221,104,215,176,217,116,221,38,10,27,224,22,47,137, | |||
5,13,123,77,227,19,198,188,122,12,143,118,217,6,246,206,173,205,152,145,105,187,108,183,113,17,140,143,150,46,151,123,175,233, | |||
249,173,152,35,165,132,233,34,195,87,1,33,136,216,158,74,186,7,54,175,24,238,24,22,115,11,48,118,209,244,77,91,172,110,175,228, | |||
39,227,101,81,7,147,218,70,3,27,22,91,180,178,179,127,255,59,174,180,105,184,157,94,112,203,169,99,222,247,24,203,119,30,49, | |||
177,3,138,238,229,185,7,226,183,236,91,213,191,200,22,219,176,135,239,182,217,228,21,29,123,227,43,140,253,21,135,154,91,227, | |||
13,149,116,92,46,245,143,228,231,119,221,226,86,168,57,96,186,49,241,142,251,228,178,5,77,227,21,33,110,189,213,180,160,13,179, | |||
189,219,16,152,180,121,155,33,246,110,54,237,59,140,165,113,225,181,237,6,151,93,203,38,198,92,45,219,182,93,198,72,133,237,94, | |||
238,18,46,195,101,241,148,141,75,218,80,225,50,74,54,177,20,252,236,117,183,113,183,113,59,59,64,113,129,73,159,54,234,46,196, | |||
0,239,113,161,71,119,254,37,229,244,172,75,60,193,107,185,217,244,96,12,232,246,118,33,130,166,251,43,194,174,52,115,158,23, | |||
107,159,57,16,124,196,180,57,20,109,54,173,235,196,210,91,133,199,118,215,163,159,242,139,121,0,247,154,185,240,166,251,68,161, | |||
223,206,13,26,163,21,24,132,125,139,229,125,141,87,108,111,67,251,218,117,182,119,133,26,40,91,221,206,89,197,99,116,121,92,57, | |||
174,92,35,221,102,231,178,60,125,204,173,198,0,71,68,239,143,30,62,193,219,208,62,98,4,111,182,205,160,177,187,2,61,99,108, | |||
143,152,66,13,131,48,140,67,150,45,251,232,119,153,13,237,93,114,233,237,205,77,210,48,22,61,160,102,215,113,216,34,237,58,240, | |||
229,194,1,83,200,89,89,247,25,107,59,130,188,29,120,161,15,139,194,130,96,53,214,186,125,205,48,154,195,170,193,114,24,232, | |||
105,151,218,241,159,178,13,118,83,148,110,179,5,91,145,224,224,71,132,123,137,26,134,49,103,204,72,84,116,196,141,188,37,198, | |||
190,182,91,132,223,47,59,105,248,72,195,60,250,133,20,204,143,211,29,46,185,216,59,233,25,233,22,249,70,120,204,24,174,232,56, | |||
124,136,227,138,141,142,207,179,13,172,48,236,200,147,131,5,218,113,34,108,182,172,215,102,198,126,73,167,109,194,139,97,72, | |||
172,47,124,27,86,171,52,5,199,199,191,27,230,157,226,179,226,189,58,188,211,251,77,113,208,112,87,180,204,251,98,189,73,55,25, | |||
117,116,136,163,16,182,159,73,191,17,77,159,183,169,29,145,233,81,236,251,138,122,106,103,87,252,130,71,124,10,190,138,16,118, | |||
88,152,134,111,137,113,113,197,133,29,155,247,195,115,110,145,53,249,135,106,141,119,84,40,142,17,22,63,54,74,235,140,69,198, | |||
127,11,43,231,31,162,36,215,88,12,78,185,85,114,126,137,93,50,84,226,81,143,118,137,40,137,130,177,164,36,71,138,214,228,184, | |||
32,91,58,211,108,174,177,132,229,68,233,210,25,94,137,82,94,171,56,6,56,249,51,197,248,140,220,30,227,44,110,107,148,214,148, | |||
46,200,116,119,158,236,189,102,166,127,102,156,93,178,33,195,112,151,156,3,198,26,160,9,82,222,12,147,165,122,75,182,227,179, | |||
39,195,244,96,232,67,37,102,86,54,171,209,144,42,122,51,12,23,24,51,50,114,112,94,12,110,175,26,156,171,180,182,116,97,105,85, | |||
105,168,180,178,180,90,148,88,194,20,57,102,153,129,63,194,104,57,120,208,58,182,112,153,56,88,39,196,109,192,147,192,225,48, | |||
220,30,56,14,60,185,72,136,155,206,18,130,255,145,50,185,182,93,230,33,49,11,200,54,114,92,250,135,56,130,58,46,59,104,189,123, | |||
137,117,185,65,107,196,189,75,132,117,125,189,16,15,212,27,226,231,160,47,3,239,110,16,226,30,224,81,224,96,35,2,188,59,87,182, | |||
235,69,187,7,27,251,196,175,26,133,245,104,147,16,207,2,135,155,133,184,17,248,21,240,151,102,50,132,55,223,16,87,135,118,64, | |||
244,240,210,115,196,109,75,133,120,16,56,6,60,11,92,223,34,196,93,192,195,192,147,192,243,192,27,45,100,9,219,143,201,10,110, | |||
26,69,211,171,151,237,18,15,44,195,8,150,11,241,216,10,104,7,14,175,36,183,59,80,172,196,244,223,61,144,125,114,165,97,92,181, | |||
74,24,215,174,54,141,55,86,11,227,141,54,211,184,171,195,107,220,180,102,204,122,99,173,41,30,239,130,165,186,77,241,100,15, | |||
102,215,99,136,171,214,99,164,27,48,132,141,120,6,158,221,4,221,3,232,99,11,248,192,213,91,13,113,207,86,240,183,193,18,103,195, | |||
186,103,195,2,198,124,193,127,14,10,116,120,253,208,101,152,212,16,38,19,225,159,231,5,189,194,251,46,113,248,160,245,66,132, | |||
107,15,111,23,57,55,1,87,237,200,252,255,74,206,223,244,100,254,239,64,254,173,74,230,255,15,228,223,169,100,254,15,65,254,157, | |||
74,136,212,255,35,200,191,213,201,252,95,130,46,154,249,255,4,77,191,250,29,141,252,61,85,72,253,63,82,219,192,112,133,148,12, | |||
255,123,122,225,87,191,125,231,127,3,111,132,84,191,252,255,15,154,90,158,255,141,182,21,82,191,75,226,127,199,109,135,212,248, | |||
248,223,224,147,214,195,255,38,159,127,204,195,124,254,127,15,255,63,171,27,97,244,48,81,0,0,0,0}; | |||
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ | |||
STATICMETHOD (getAndroidMidiDeviceManager, "getAndroidMidiDeviceManager", "(Landroid/content/Context;)Lcom/roli/juce/JuceMidiSupport$MidiDeviceManager;") \ | |||
STATICMETHOD (getAndroidBluetoothManager, "getAndroidBluetoothManager", "(Landroid/content/Context;)Lcom/roli/juce/JuceMidiSupport$BluetoothManager;") | |||
STATICMETHOD (getAndroidMidiDeviceManager, "getAndroidMidiDeviceManager", "(Landroid/content/Context;)Lcom/rmsl/juce/JuceMidiSupport$MidiDeviceManager;") \ | |||
STATICMETHOD (getAndroidBluetoothManager, "getAndroidBluetoothManager", "(Landroid/content/Context;)Lcom/rmsl/juce/JuceMidiSupport$BluetoothManager;") | |||
DECLARE_JNI_CLASS_WITH_BYTECODE (JuceMidiSupport, "com/roli/juce/JuceMidiSupport", 23, javaMidiByteCode, sizeof (javaMidiByteCode)) | |||
DECLARE_JNI_CLASS_WITH_BYTECODE (JuceMidiSupport, "com/rmsl/juce/JuceMidiSupport", 23, javaMidiByteCode, sizeof (javaMidiByteCode)) | |||
#undef JNI_CLASS_MEMBERS | |||
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ | |||
METHOD (getJuceAndroidMidiInputDeviceNameAndIDs, "getJuceAndroidMidiInputDeviceNameAndIDs", "()[Ljava/lang/String;") \ | |||
METHOD (getJuceAndroidMidiOutputDeviceNameAndIDs, "getJuceAndroidMidiOutputDeviceNameAndIDs", "()[Ljava/lang/String;") \ | |||
METHOD (openMidiInputPortWithID, "openMidiInputPortWithID", "(IJ)Lcom/roli/juce/JuceMidiSupport$JuceMidiPort;") \ | |||
METHOD (openMidiOutputPortWithID, "openMidiOutputPortWithID", "(I)Lcom/roli/juce/JuceMidiSupport$JuceMidiPort;") | |||
METHOD (openMidiInputPortWithID, "openMidiInputPortWithID", "(IJ)Lcom/rmsl/juce/JuceMidiSupport$JuceMidiPort;") \ | |||
METHOD (openMidiOutputPortWithID, "openMidiOutputPortWithID", "(I)Lcom/rmsl/juce/JuceMidiSupport$JuceMidiPort;") | |||
DECLARE_JNI_CLASS_WITH_MIN_SDK (MidiDeviceManager, "com/roli/juce/JuceMidiSupport$MidiDeviceManager", 23) | |||
DECLARE_JNI_CLASS_WITH_MIN_SDK (MidiDeviceManager, "com/rmsl/juce/JuceMidiSupport$MidiDeviceManager", 23) | |||
#undef JNI_CLASS_MEMBERS | |||
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ | |||
@@ -347,7 +346,7 @@ DECLARE_JNI_CLASS_WITH_MIN_SDK (MidiDeviceManager, "com/roli/juce/JuceMidiSuppor | |||
METHOD (sendMidi, "sendMidi", "([BII)V") \ | |||
METHOD (getName, "getName", "()Ljava/lang/String;") | |||
DECLARE_JNI_CLASS_WITH_MIN_SDK (JuceMidiPort, "com/roli/juce/JuceMidiSupport$JuceMidiPort", 23) | |||
DECLARE_JNI_CLASS_WITH_MIN_SDK (JuceMidiPort, "com/rmsl/juce/JuceMidiSupport$JuceMidiPort", 23) | |||
#undef JNI_CLASS_MEMBERS | |||
//============================================================================== | |||
@@ -471,7 +470,7 @@ private: | |||
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ | |||
CALLBACK (AndroidMidiInput::handleReceive, "handleReceive", "(J[BIIJ)V" ) | |||
DECLARE_JNI_CLASS_WITH_MIN_SDK (JuceMidiInputPort, "com/roli/juce/JuceMidiSupport$JuceMidiInputPort", 23) | |||
DECLARE_JNI_CLASS_WITH_MIN_SDK (JuceMidiInputPort, "com/rmsl/juce/JuceMidiSupport$JuceMidiInputPort", 23) | |||
#undef JNI_CLASS_MEMBERS | |||
//============================================================================== | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2018 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -2,7 +2,7 @@ | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
Copyright (c) 2020 - Raw Material Software Limited | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
@@ -671,6 +671,7 @@ struct iOSAudioIODevice::Pimpl : public AudioPlayHead, | |||
//============================================================================== | |||
#if JUCE_MODULE_AVAILABLE_juce_graphics | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | |||
Image getIcon (int size) | |||
{ | |||
if (interAppAudioConnected) | |||
@@ -681,6 +682,7 @@ struct iOSAudioIODevice::Pimpl : public AudioPlayHead, | |||
} | |||
return Image(); | |||
} | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
void switchApplication() | |||