From fbef7505d9b584c322db16b50a73089006735c5d Mon Sep 17 00:00:00 2001 From: timlyeee <43355299+timlyeee@users.noreply.github.com> Date: Fri, 7 Jan 2022 17:33:25 +0800 Subject: [PATCH] mpg123 fix (#210) --- win64/CMakeLists.txt | 4 +- win64/include/mpg123/fmt123.h | 2 +- win64/include/mpg123/mpg123.h | 2002 +++++++++++++++++++++++++++++- win64/include/mpg123/mpg123.h.in | 1721 ------------------------- win64/include/mpg123/out123.h | 734 +++++++++++ win64/include/mpg123/syn123.h | 1118 +++++++++++++++++ win64/libs/libmpg123-0.dll | Bin 0 -> 427370 bytes win64/libs/libmpg123-0.lib | Bin 0 -> 35362 bytes win64/libs/libmpg123.dll | Bin 290816 -> 0 bytes win64/libs/libmpg123.lib | Bin 23282 -> 0 bytes 10 files changed, 3834 insertions(+), 1747 deletions(-) delete mode 100644 win64/include/mpg123/mpg123.h.in create mode 100644 win64/include/mpg123/out123.h create mode 100644 win64/include/mpg123/syn123.h create mode 100644 win64/libs/libmpg123-0.dll create mode 100644 win64/libs/libmpg123-0.lib delete mode 100644 win64/libs/libmpg123.dll delete mode 100644 win64/libs/libmpg123.lib diff --git a/win64/CMakeLists.txt b/win64/CMakeLists.txt index 56e590ed..159ad494 100644 --- a/win64/CMakeLists.txt +++ b/win64/CMakeLists.txt @@ -62,8 +62,8 @@ set_target_properties(jpeg PROPERTIES add_library(mpg123 SHARED IMPORTED GLOBAL) set_target_properties(mpg123 PROPERTIES - IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/libs/libmpg123.dll - IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/libs/libmpg123.lib + IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/libs/libmpg123-0.dll + IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/libs/libmpg123-0.lib INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/include/mpg123 ) diff --git a/win64/include/mpg123/fmt123.h b/win64/include/mpg123/fmt123.h index dcabf5e0..d7772e1e 100644 --- a/win64/include/mpg123/fmt123.h +++ b/win64/include/mpg123/fmt123.h @@ -153,7 +153,7 @@ struct mpg123_fmt int encoding; }; -/* @} */ +/** @} */ #endif diff --git a/win64/include/mpg123/mpg123.h b/win64/include/mpg123/mpg123.h index df3cc142..10510535 100644 --- a/win64/include/mpg123/mpg123.h +++ b/win64/include/mpg123/mpg123.h @@ -1,42 +1,1998 @@ /* - mpg123_msvc: MPEG Audio Decoder library wrapper header for MS VC++ 2005 + libmpg123: MPEG Audio Decoder library (version 1.29.3) - copyright 2008 by the mpg123 project - free software under the terms of the LGPL 2.1 - initially written by Patrick Dehne and Thomas Orgis. + copyright 1995-2015 by the mpg123 project + free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org */ -#ifndef MPG123_MSVC_H -#define MPG123_MSVC_H -#include +#ifndef MPG123_LIB_H +#define MPG123_LIB_H + +#include + +/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */ + +/** A macro to check at compile time which set of API functions to expect. + * This should be incremented at least each time a new symbol is added + * to the header. + */ +#ifndef MPG123_API_VERSION +#define MPG123_API_VERSION 46 +#endif + +#ifndef MPG123_EXPORT +/** Defines needed for MS Visual Studio(tm) DLL builds. + * Every public function must be prefixed with MPG123_EXPORT. When building + * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible + * for clients and includes it in the import library which is created together + * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which + * imports the functions from the DLL. + */ +#ifdef BUILD_MPG123_DLL +/* The dll exports. */ +#define MPG123_EXPORT __declspec(dllexport) +#else +#ifdef LINK_MPG123_DLL +/* The exe imports. */ +#define MPG123_EXPORT __declspec(dllimport) +#else +/* Nothing on normal/UNIX builds */ +#define MPG123_EXPORT +#endif +#endif +#endif + +/** Earlier versions of libmpg123 put enums into public API calls, + * thich is not exactly safe. There are ABI rules, but you can use + * compiler switches to change the sizes of enums. It is safer not + * to have them in API calls. Thus, the default is to remap calls and + * structs to variants that use plain ints. Define MPG123_ENUM_API to + * prevent that remapping. + * + * You might want to define this to increase the chance of your binary + * working with an older version of the library. But if that is your goal, + * you should better build with an older version to begin with. + */ +#ifndef MPG123_ENUM_API + +#define mpg123_param mpg123_param2 +#define mpg123_getparam mpg123_getparam2 +#define mpg123_feature mpg123_feature2 +#define mpg123_eq mpg123_eq2 +#define mpg123_geteq mpg123_geteq2 +#define mpg123_frameinfo mpg123_frameinfo2 +#define mpg123_info mpg123_info2 +#define mpg123_getstate mpg123_getstate2 +#define mpg123_enc_from_id3 mpg123_enc_from_id3_2 +#define mpg123_store_utf8 mpg123_store_utf8_2 +#define mpg123_par mpg123_par2 +#define mpg123_getpar mpg123_getpar2 + +#endif + +/* You can use this file directly, avoiding the autoconf replacements. + Might have to set MPG123_NO_LARGENAME, too, in case you have + _FILE_OFFSET_BITS defined where it does not make sense. */ +#ifndef MPG123_NO_CONFIGURE + #include #include -// Needed for Visual Studio versions before VS 2010. -#if (_MSC_VER < 1600) -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -#define PRIiMAX "I64i" -typedef __int64 intmax_t; +/* A little hack to help MSVC not having ssize_t. */ +#ifdef _MSC_VER +#include +typedef ptrdiff_t mpg123_ssize_t; #else -#include -#include +typedef ssize_t mpg123_ssize_t; #endif -// ftell returns long, _ftelli64 returns __int64 -// off_t is long, not __int64, use ftell -#define ftello ftell +/* You can always enforce largefile hackery by setting MPG123_LARGESUFFIX. */ +/* Otherwise, this header disables it if the build system decided so. */ +#if !defined(MPG123_LARGESUFFIX) && 0 +#ifndef MPG123_NO_LARGENAME +#define MPG123_NO_LARGENAME +#endif +#endif -#define MPG123_NO_CONFIGURE -#include "mpg123.h.in" /* Yes, .h.in; we include the configure template! */ +#endif /* MPG123_NO_CONFIGURE */ + +/* Simplified large file handling. + I used to have a check here that prevents building for a library with conflicting large file setup + (application that uses 32 bit offsets with library that uses 64 bits). + While that was perfectly fine in an environment where there is one incarnation of the library, + it hurt GNU/Linux and Solaris systems with multilib where the distribution fails to provide the + correct header matching the 32 bit library (where large files need explicit support) or + the 64 bit library (where there is no distinction). + + New approach: When the app defines _FILE_OFFSET_BITS, it wants non-default large file support, + and thus functions with added suffix (mpg123_open_64). + Any mismatch will be caught at link time because of the _FILE_OFFSET_BITS setting used when + building libmpg123. Plus, there's dual mode large file support in mpg123 since 1.12 now. + Link failure is not the expected outcome of any half-sane usage anymore. + + More complication: What about client code defining _LARGEFILE64_SOURCE? It might want direct access to the _64 functions, along with the ones without suffix. Well, that's possible now via defining MPG123_NO_LARGENAME and MPG123_LARGESUFFIX, respectively, for disabling or enforcing the suffix names. +*/ + +/* + Now, the renaming of large file aware functions. + By default, it appends underscore _FILE_OFFSET_BITS (so, mpg123_seek_64 for mpg123_seek), if _FILE_OFFSET_BITS is defined. You can force a different suffix via MPG123_LARGESUFFIX (that must include the underscore), or you can just disable the whole mess by defining MPG123_NO_LARGENAME. +*/ +#if (!defined MPG123_NO_LARGENAME) && ((defined _FILE_OFFSET_BITS) || (defined MPG123_LARGESUFFIX)) + +/* Need some trickery to concatenate the value(s) of the given macro(s). */ +#define MPG123_MACROCAT_REALLY(a, b) a ## b +#define MPG123_MACROCAT(a, b) MPG123_MACROCAT_REALLY(a, b) +#ifndef MPG123_LARGESUFFIX +#define MPG123_LARGESUFFIX MPG123_MACROCAT(_, _FILE_OFFSET_BITS) +#endif +#define MPG123_LARGENAME(func) MPG123_MACROCAT(func, MPG123_LARGESUFFIX) + +#define mpg123_open_fixed MPG123_LARGENAME(mpg123_open_fixed) +#define mpg123_open MPG123_LARGENAME(mpg123_open) +#define mpg123_open_fd MPG123_LARGENAME(mpg123_open_fd) +#define mpg123_open_handle MPG123_LARGENAME(mpg123_open_handle) +#define mpg123_framebyframe_decode MPG123_LARGENAME(mpg123_framebyframe_decode) +#define mpg123_decode_frame MPG123_LARGENAME(mpg123_decode_frame) +#define mpg123_tell MPG123_LARGENAME(mpg123_tell) +#define mpg123_tellframe MPG123_LARGENAME(mpg123_tellframe) +#define mpg123_tell_stream MPG123_LARGENAME(mpg123_tell_stream) +#define mpg123_seek MPG123_LARGENAME(mpg123_seek) +#define mpg123_feedseek MPG123_LARGENAME(mpg123_feedseek) +#define mpg123_seek_frame MPG123_LARGENAME(mpg123_seek_frame) +#define mpg123_timeframe MPG123_LARGENAME(mpg123_timeframe) +#define mpg123_index MPG123_LARGENAME(mpg123_index) +#define mpg123_set_index MPG123_LARGENAME(mpg123_set_index) +#define mpg123_position MPG123_LARGENAME(mpg123_position) +#define mpg123_length MPG123_LARGENAME(mpg123_length) +#define mpg123_framelength MPG123_LARGENAME(mpg123_framelength) +#define mpg123_set_filesize MPG123_LARGENAME(mpg123_set_filesize) +#define mpg123_replace_reader MPG123_LARGENAME(mpg123_replace_reader) +#define mpg123_replace_reader_handle MPG123_LARGENAME(mpg123_replace_reader_handle) +#define mpg123_framepos MPG123_LARGENAME(mpg123_framepos) + +#endif /* largefile hackery */ #ifdef __cplusplus extern "C" { #endif - // Wrapper around mpg123_open that supports path names with unicode - // characters - MPG123_EXPORT int mpg123_topen(mpg123_handle *fr, const _TCHAR *path); - MPG123_EXPORT int mpg123_tclose(mpg123_handle *fr); +/** \defgroup mpg123_init mpg123 library and handle setup + * + * Functions to initialise and shutdown the mpg123 library and handles. + * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-) + * Tip: Use a RVA setting... + * + * @{ + */ + +/** Opaque structure for the libmpg123 decoder handle. */ +struct mpg123_handle_struct; + +/** Opaque structure for the libmpg123 decoder handle. + * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner. + */ +typedef struct mpg123_handle_struct mpg123_handle; + +/** Useless no-op that used to do initialization work. + * + * For API version before 46 (mpg123 1.27.0), you had to ensure to have + * this called once before creating a handle. To be pure, this had to + * happen in a single-threaded context, too (while in practice, there was no + * harm done possibly racing to compute the same numbers again). + * + * Now this function really does nothing anymore. The only reason to call + * it is to be compatible with old versions of the library that still require + * it. + * + * \return MPG123_OK if successful, otherwise an error number. + */ +MPG123_EXPORT int mpg123_init(void); + +/** Superfluous Function to close down the mpg123 library. + * This was created with the thought that there sometime will be cleanup code + * to be run after library use. This never materialized. You can forget about + * this function and it is only here for old programs that do call it. + */ +MPG123_EXPORT void mpg123_exit(void); + +/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()). + * and optional retrieval of an error code to feed to mpg123_plain_strerror(). + * Optional means: Any of or both the parameters may be NULL. + * + * \param decoder optional choice of decoder variant (NULL for default) + * \param error optional address to store error codes + * \return Non-NULL pointer to fresh handle when successful. + */ +MPG123_EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error); + +/** Delete handle, mh is either a valid mpg123 handle or NULL. + * \param mh handle + */ +MPG123_EXPORT void mpg123_delete(mpg123_handle *mh); + +/** Free plain memory allocated within libmpg123. + * This is for library users that are not sure to use the same underlying + * memory allocator as libmpg123. It is just a wrapper over free() in + * the underlying C library. + */ +MPG123_EXPORT void mpg123_free(void *ptr); + +/** Enumeration of the parameters types that it is possible to set/get. */ +enum mpg123_parms +{ + MPG123_VERBOSE = 0, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */ + MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */ + MPG123_ADD_FLAGS, /**< add some flags (integer) */ + MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */ + MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */ + MPG123_RVA, /**< one of the RVA choices above (integer) */ + MPG123_DOWNSPEED, /**< play a frame N times (integer) */ + MPG123_UPSPEED, /**< play every Nth frame (integer) */ + MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */ + MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */ + MPG123_ICY_INTERVAL, /**< Stream contains ICY metadata with this interval (integer). + Make sure to set this _before_ opening a stream.*/ + MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */ + MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */ + MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */ + MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). This can enlarge the limit for skipping junk on beginning, too (but not reduce it). */ + MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */ + ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/ + ,MPG123_FEEDPOOL /**< For feeder mode, keep that many buffers in a pool to avoid frequent malloc/free. The pool is allocated on mpg123_open_feed(). If you change this parameter afterwards, you can trigger growth and shrinkage during decoding. The default value could change any time. If you care about this, then set it. (integer) */ + ,MPG123_FEEDBUFFER /**< Minimal size of one internal feeder buffer, again, the default value is subject to change. (integer) */ + ,MPG123_FREEFORMAT_SIZE /**< Tell the parser a free-format frame size to + * avoid read-ahead to get it. A value of -1 (default) means that the parser + * will determine it. The parameter value is applied during decoder setup + * for a freshly opened stream only. + */ +}; + +/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */ +enum mpg123_param_flags +{ + MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */ + ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */ + ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */ + ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */ + ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */ + ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */ + ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */ + ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */ + ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */ + ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */ + ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */ + ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */ + ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */ + ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */ + ,MPG123_SKIP_ID3V2 = 0x2000 /**< 10 0000 0000 0000 Do not parse ID3v2 tags, just skip them. */ + ,MPG123_IGNORE_INFOFRAME = 0x4000 /**< 100 0000 0000 0000 Do not parse the LAME/Xing info frame, treat it as normal MPEG data. */ + ,MPG123_AUTO_RESAMPLE = 0x8000 /**< 1000 0000 0000 0000 Allow automatic internal resampling of any kind (default on if supported). Especially when going lowlevel with replacing output buffer, you might want to unset this flag. Setting MPG123_DOWNSAMPLE or MPG123_FORCE_RATE will override this. */ + ,MPG123_PICTURE = 0x10000 /**< 17th bit: Enable storage of pictures from tags (ID3v2 APIC). */ + ,MPG123_NO_PEEK_END = 0x20000 /**< 18th bit: Do not seek to the end of + * the stream in order to probe + * the stream length and search for the id3v1 field. This also means + * the file size is unknown unless set using mpg123_set_filesize() and + * the stream is assumed as non-seekable unless overridden. + */ + ,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */ + ,MPG123_STORE_RAW_ID3 = 0x80000 /**< store raw ID3 data (even if skipping) */ + ,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples. + * This is not reflected in the format codes. If this flag is set along with + * MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without + * MPG123_BIG_ENDIAN, it means s16le. Normal operation without + * MPG123_FORCE_ENDIAN produces output in native byte order. + */ + ,MPG123_BIG_ENDIAN = 0x200000 /**< Choose big endian instead of little. */ + ,MPG123_NO_READAHEAD = 0x400000 /**< Disable read-ahead in parser. If + * you know you provide full frames to the feeder API, this enables + * decoder output from the first one on, instead of having to wait for + * the next frame to confirm that the stream is healthy. It also disables + * free format support unless you provide a frame size using + * MPG123_FREEFORMAT_SIZE. + */ + ,MPG123_FLOAT_FALLBACK = 0x800000 /**< Consider floating point output encoding only after + * trying other (possibly downsampled) rates and encodings first. This is to + * support efficient playback where floating point output is only configured for + * an external resampler, bypassing that resampler when the desired rate can + * be produced directly. This is enabled by default to be closer to older versions + * of libmpg123 which did not enable float automatically at all. If disabled, + * float is considered after the 16 bit default and higher-bit integer encodings + * for any rate. */ + ,MPG123_NO_FRANKENSTEIN = 0x1000000 /**< Disable support for Frankenstein streams + * (different MPEG streams stiched together). Do not accept serious change of MPEG + * header inside a single stream. With this flag, the audio output format cannot + * change during decoding unless you open a new stream. This also stops decoding + * after an announced end of stream (Info header contained a number of frames + * and this number has been reached). This makes your MP3 files behave more like + * ordinary media files with defined structure, rather than stream dumps with + * some sugar. */ +}; + +/** choices for MPG123_RVA */ +enum mpg123_param_rva +{ + MPG123_RVA_OFF = 0 /**< RVA disabled (default). */ + ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */ + ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */ + ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */ +}; + +#ifdef MPG123_ENUM_API +/** Set a specific parameter on a handle. + * + * Note that this name is mapped to mpg123_param2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mh handle + * \param type parameter choice + * \param value integer value + * \param fvalue floating point value + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_param( mpg123_handle *mh +, enum mpg123_parms type, long value, double fvalue ); +#endif + +/** Set a specific parameter on a handle. No enums. + * + * This is actually called instead of mpg123_param() + * unless MPG123_ENUM_API is defined. + * + * \param mh handle + * \param type parameter choice (from enum #mpg123_parms) + * \param value integer value + * \param fvalue floating point value + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_param2( mpg123_handle *mh +, int type, long value, double fvalue ); + +#ifdef MPG123_ENUM_API +/** Get a specific parameter from a handle. + * + * Note that this name is mapped to mpg123_getparam2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mh handle + * \param type parameter choice + * \param value integer value return address + * \param fvalue floating point value return address + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getparam( mpg123_handle *mh +, enum mpg123_parms type, long *value, double *fvalue ); +#endif + +/** Get a specific parameter from a handle. No enums. + * + * This is actually called instead of mpg123_getparam() unless MPG123_ENUM_API + * is defined. + * + * \param mh handle + * \param type parameter choice (from enum #mpg123_parms) + * \param value integer value return address + * \param fvalue floating point value return address + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getparam2( mpg123_handle *mh +, int type, long *value, double *fvalue ); + +/** Feature set available for query with mpg123_feature. */ +enum mpg123_feature_set +{ + MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */ + ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */ + ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */ + ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */ + ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */ + ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */ + ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */ + ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */ + ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */ + ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */ + ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */ + ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */ + ,MPG123_FEATURE_PARSE_ICY /**< ICY support */ + ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */ + ,MPG123_FEATURE_EQUALIZER /**< tunable equalizer */ + ,MPG123_FEATURE_MOREINFO /**< more info extraction (for frame analyzer) */ + ,MPG123_FEATURE_OUTPUT_FLOAT32 /**< 32 bit float output */ + ,MPG123_FEATURE_OUTPUT_FLOAT64 /**< 64 bit float output (as of now: never!) */ +}; + +#ifdef MPG123_ENUM_API +/** Query libmpg123 features. + * + * Note that this name is mapped to mpg123_feature2() instead unless + * MPG123_ENUM_API is defined. + * + * \param key feature selection + * \return 1 for success, 0 for unimplemented functions + */ +MPG123_EXPORT int mpg123_feature(const enum mpg123_feature_set key); +#endif + +/** Query libmpg123 features. No enums. + * + * This is actually called instead of mpg123_feature() unless MPG123_ENUM_API + * is defined. + * + * \param key feature selection (from enum #mpg123_feature_set) + * \return 1 for success, 0 for unimplemented functions + */ +MPG123_EXPORT int mpg123_feature2(int key); + +/** @} */ + + +/** \defgroup mpg123_error mpg123 error handling + * + * Functions to get text version of the error numbers and an enumeration + * of the error codes returned by libmpg123. + * + * Most functions operating on a mpg123_handle simply return MPG123_OK (0) + * on success and MPG123_ERR (-1) on failure, setting the internal error + * variable of the handle to the specific error code. If there was not a valid + * (non-NULL) handle provided to a function operating on one, MPG123_BAD_HANDLE + * may be returned if this can not be confused with a valid positive return + * value. + * Meaning: A function expected to return positive integers on success will + * always indicate error or a special condition by returning a negative one. + * + * Decoding/seek functions may also return message codes MPG123_DONE, + * MPG123_NEW_FORMAT and MPG123_NEED_MORE (all negative, see below on how to + * react). Note that calls to those can be nested, so generally watch out + * for these codes after initial handle setup. + * Especially any function that needs information about the current stream + * to work will try to at least parse the beginning if that did not happen + * yet. + * + * On a function that is supposed to return MPG123_OK on success and + * MPG123_ERR on failure, make sure you check for != MPG123_OK, not + * == MPG123_ERR, as the error code could get more specific in future, + * or there is just a special message from a decoding routine as indicated + * above. + * + * @{ + */ + +/** Enumeration of the message and error codes and returned by libmpg123 functions. */ +enum mpg123_errors +{ + MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */ + MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */ + MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */ + MPG123_ERR=-1, /**< Generic Error */ + MPG123_OK=0, /**< Success */ + MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */ + MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */ + MPG123_BAD_RATE, /**< Invalid sample rate specified. */ + MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */ + MPG123_BAD_PARAM, /**< Bad parameter id! */ + MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */ + MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */ + MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */ + MPG123_BAD_DECODER, /**< Invalid decoder choice. */ + MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */ + MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */ + MPG123_BAD_RVA, /**< Invalid RVA mode. */ + MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */ + MPG123_NO_SPACE, /**< Not enough buffer space. */ + MPG123_BAD_TYPES, /**< Incompatible numeric data types. */ + MPG123_BAD_BAND, /**< Bad equalizer band. */ + MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */ + MPG123_ERR_READER, /**< Error reading the stream. */ + MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */ + MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/ + MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */ + MPG123_BAD_FILE, /**< File access error. */ + MPG123_NO_SEEK, /**< Seek not supported by stream. */ + MPG123_NO_READER, /**< No stream opened. */ + MPG123_BAD_PARS, /**< Bad parameter handle. */ + MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */ + MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */ + MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */ + MPG123_NO_8BIT, /**< No 8bit encoding possible. */ + MPG123_BAD_ALIGN, /**< Stack aligmnent error */ + MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */ + MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */ + MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */ + MPG123_BAD_KEY, /**< Bad key value given. */ + MPG123_NO_INDEX, /**< No frame index in this build. */ + MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */ + MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */ + MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */ + ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */ + ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */ + ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */ + ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */ + ,MPG123_INT_OVERFLOW /**< Some integer overflow. */ + ,MPG123_BAD_FLOAT /**< Floating-point computations work not as expected. */ +}; + +/** Look up error strings given integer code. + * \param errcode integer error code + * \return string describing what that error error code means + */ +MPG123_EXPORT const char* mpg123_plain_strerror(int errcode); + +/** Give string describing what error has occured in the context of handle mh. + * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via + * char *errmsg = mpg123_strerror(mh) + * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE. + * \param mh handle + * \return error message + */ +MPG123_EXPORT const char* mpg123_strerror(mpg123_handle *mh); + +/** Return the plain errcode intead of a string. + * \param mh handle + * \return error code recorded in handle or MPG123_BAD_HANDLE + */ +MPG123_EXPORT int mpg123_errcode(mpg123_handle *mh); + +/** @} */ + + +/** \defgroup mpg123_decoder mpg123 decoder selection + * + * Functions to list and select the available decoders. + * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is). + * + * @{ + */ + +/** Get available decoder list. + * \return NULL-terminated array of generally available decoder names (plain 8bit ASCII) + */ +MPG123_EXPORT const char **mpg123_decoders(void); + +/** Get supported decoder list. + * + * This possibly writes to static storage in the library, so avoid + * calling concurrently, please. + * + * \return NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII) + */ +MPG123_EXPORT const char **mpg123_supported_decoders(void); + +/** Set the active decoder. + * \param mh handle + * \param decoder_name name of decoder + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name); + +/** Get the currently active decoder name. + * The active decoder engine can vary depening on output constraints, + * mostly non-resampling, integer output is accelerated via 3DNow & Co. but for + * other modes a fallback engine kicks in. + * Note that this can return a decoder that is only active in the hidden and not + * available as decoder choice from the outside. + * \param mh handle + * \return The decoder name or NULL on error. + */ +MPG123_EXPORT const char* mpg123_current_decoder(mpg123_handle *mh); + +/** @} */ + + +/** \defgroup mpg123_output mpg123 output audio format + * + * Functions to get and select the format of the decoded audio. + * + * Before you dive in, please be warned that you might get confused by this. + * This seems to happen a lot, therefore I am trying to explain in advance. + * If you do feel confused and just want to decode your normal MPEG audio files that + * don't alter properties in the middle, just use mpg123_open_fixed() with a fixed encoding + * and channel count and forget about a matrix of audio formats. If you want to get funky, + * read ahead ... + * + * The mpg123 library decides what output format to use when encountering the first frame in a stream, or actually any frame that is still valid but differs from the frames before in the prompted output format. At such a deciding point, an internal table of allowed encodings, sampling rates and channel setups is consulted. According to this table, an output format is chosen and the decoding engine set up accordingly (including optimized routines for different output formats). This might seem unusual but it just follows from the non-existence of "MPEG audio files" with defined overall properties. There are streams, streams are concatenations of (semi) independent frames. We store streams on disk and call them "MPEG audio files", but that does not change their nature as the decoder is concerned (the LAME/Xing header for gapless decoding makes things interesting again). + * + * To get to the point: What you do with mpg123_format() and friends is to fill the internal table of allowed formats before it is used. That includes removing support for some formats or adding your forced sample rate (see MPG123_FORCE_RATE) that will be used with the crude internal resampler. Also keep in mind that the sample encoding is just a question of choice -- the MPEG frames do only indicate their native sampling rate and channel count. If you want to decode to integer or float samples, 8 or 16 bit ... that is your decision. In a "clean" world, libmpg123 would always decode to 32 bit float and let you handle any sample conversion. But there are optimized routines that work faster by directly decoding to the desired encoding / accuracy. We prefer efficiency over conceptual tidyness. + * + * People often start out thinking that mpg123_format() should change the actual decoding format on the fly. That is wrong. It only has effect on the next natural change of output format, when libmpg123 will consult its format table again. To make life easier, you might want to call mpg123_format_none() before any thing else and then just allow one desired encoding and a limited set of sample rates / channel choices that you actually intend to deal with. You can force libmpg123 to decode everything to 44100 KHz, stereo, 16 bit integer ... it will duplicate mono channels and even do resampling if needed (unless that feature is disabled in the build, same with some encodings). But I have to stress that the resampling of libmpg123 is very crude and doesn't even contain any kind of "proper" interpolation. + * + * In any case, watch out for MPG123_NEW_FORMAT as return message from decoding routines and call mpg123_getformat() to get the currently active output format. + * + * @{ + */ + +/** They can be combined into one number (3) to indicate mono and stereo... */ +enum mpg123_channelcount +{ + MPG123_MONO = 1 /**< mono */ + ,MPG123_STEREO = 2 /**< stereo */ +}; + +/** An array of supported standard sample rates + * These are possible native sample rates of MPEG audio files. + * You can still force mpg123 to resample to a different one, but by + * default you will only get audio in one of these samplings. + * This list is in ascending order. + * \param list Store a pointer to the sample rates array there. + * \param number Store the number of sample rates there. */ +MPG123_EXPORT void mpg123_rates(const long **list, size_t *number); + +/** An array of supported audio encodings. + * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED). + * \param list Store a pointer to the encodings array there. + * \param number Store the number of encodings there. */ +MPG123_EXPORT void mpg123_encodings(const int **list, size_t *number); + +/** Return the size (in bytes) of one mono sample of the named encoding. + * \param encoding The encoding value to analyze. + * \return positive size of encoding in bytes, 0 on invalid encoding. */ +MPG123_EXPORT int mpg123_encsize(int encoding); + +/** Configure a mpg123 handle to accept no output format at all, + * use before specifying supported formats with mpg123_format + * \param mh handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_format_none(mpg123_handle *mh); + +/** Configure mpg123 handle to accept all formats + * (also any custom rate you may set) -- this is default. + * \param mh handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_format_all(mpg123_handle *mh); + +/** Set the audio format support of a mpg123_handle in detail: + * \param mh handle + * \param rate The sample rate value (in Hertz). + * \param channels A combination of MPG123_STEREO and MPG123_MONO. + * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here. + * \return MPG123_OK on success, MPG123_ERR if there was an error. */ +MPG123_EXPORT int mpg123_format( mpg123_handle *mh +, long rate, int channels, int encodings ); + +/** Set the audio format support of a mpg123_handle in detail: + * \param mh handle + * \param rate The sample rate value (in Hertz). Special value 0 means + * all rates (the reason for this variant of mpg123_format()). + * \param channels A combination of MPG123_STEREO and MPG123_MONO. + * \param encodings A combination of accepted encodings for rate and channels, + * p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). + * Please note that some encodings may not be supported in the library build + * and thus will be ignored here. + * \return MPG123_OK on success, MPG123_ERR if there was an error. */ +MPG123_EXPORT int mpg123_format2( mpg123_handle *mh +, long rate, int channels, int encodings ); + +/** Check to see if a specific format at a specific rate is supported + * by mpg123_handle. + * \param mh handle + * \param rate sampling rate + * \param encoding encoding + * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, + * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ +MPG123_EXPORT int mpg123_format_support( mpg123_handle *mh +, long rate, int encoding ); + +/** Get the current output format written to the addresses given. + * If the stream is freshly loaded, this will try to parse enough + * of it to give you the format to come. This clears the flag that + * would otherwise make the first decoding call return + * MPG123_NEW_FORMAT. + * \param mh handle + * \param rate sampling rate return address + * \param channels channel count return address + * \param encoding encoding return address + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getformat( mpg123_handle *mh +, long *rate, int *channels, int *encoding ); + +/** Get the current output format written to the addresses given. + * This differs from plain mpg123_getformat() in that you can choose + * _not_ to clear the flag that would trigger the next decoding call + * to return MPG123_NEW_FORMAT in case of a new format arriving. + * \param mh handle + * \param rate sampling rate return address + * \param channels channel count return address + * \param encoding encoding return address + * \param clear_flag if true, clear internal format flag + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getformat2( mpg123_handle *mh +, long *rate, int *channels, int *encoding, int clear_flag ); + +/** @} */ + + +/** \defgroup mpg123_input mpg123 file input and decoding + * + * Functions for input bitstream and decoding operations. + * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!). + * @{ + */ + +/** Open a simple MPEG file with fixed properties. + * + * This function shall simplify the common use case of a plain MPEG + * file on disk that you want to decode, with one fixed sample + * rate and channel count, and usually a length defined by a Lame/Info/Xing + * tag. It will: + * + * - set the MPG123_NO_FRANKENSTEIN flag + * - set up format support according to given parameters, + * - open the file, + * - query audio format, + * - fix the audio format support table to ensure the format stays the same, + * - call mpg123_scan() if there is no header frame to tell the track length. + * + * From that on, you can call mpg123_getformat() for querying the sample + * rate (and channel count in case you allowed both) and mpg123_length() + * to get a pretty safe number for the duration. + * Only the sample rate is left open as that indeed is a fixed property of + * MPEG files. You could set MPG123_FORCE_RATE beforehand, but that may trigger + * low-quality resampling in the decoder, only do so if in dire need. + * The library will convert mono files to stereo for you, and vice versa. + * If any constraint cannot be satisified (most likely because of a non-default + * build of libmpg123), you get MPG123_ERR returned and can query the detailed + * cause from the handle. Only on MPG123_OK there will an open file that you + * then close using mpg123_close(), or implicitly on mpg123_delete() or the next + * call to open another file. + * + * So, for your usual CD rip collection, you could use + * + * mpg123_open_fixed(mh, path, MPG123_STEREO, MPG123_ENC_SIGNED_16) + * + * and be happy calling mpg123_getformat() to verify 44100 Hz rate, then just + * playing away with mpg123_read(). The occasional mono file, or MP2 file, + * will also be decoded without you really noticing. Just the speed could be + * wrong if you do not care about sample rate at all. + * \param mh handle + * \param path filesystem path (see mpg123_open()) + * \param channels allowed channel count, either 1 (MPG123_MONO) or + * 2 (MPG123_STEREO), or bitwise or of them, but then you're halfway back to + * calling mpg123_format() again;-) + * \param encoding a definite encoding from enum mpg123_enc_enum + * or a bitmask like for mpg123_format(), defeating the purpose somewhat + */ +MPG123_EXPORT int mpg123_open_fixed(mpg123_handle *mh, const char *path +, int channels, int encoding); + +/** Open and prepare to decode the specified file by filesystem path. + * This does not open HTTP urls; libmpg123 contains no networking code. + * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed(). + * + * The path parameter usually is just a string that is handed to the underlying + * OS routine for opening, treated as a blob of binary data. On platforms + * where encoding needs to be involved, something like _wopen() is called + * underneath and the path argument to libmpg123 is assumed to be encoded in UTF-8. + * So, if you have to ask yourself which encoding is needed, the answer is + * UTF-8, which also fits any sane modern install of Unix-like systems. + * + * \param mh handle + * \param path filesystem + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_open(mpg123_handle *mh, const char *path); + +/** Use an already opened file descriptor as the bitstream input + * mpg123_close() will _not_ close the file descriptor. + * \param mh handle + * \param fd file descriptor + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd); + +/** Use an opaque handle as bitstream input. This works only with the + * replaced I/O from mpg123_replace_reader_handle()! + * mpg123_close() will call the cleanup callback for your handle (if you gave one). + * \param mh handle + * \param iohandle your handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle); + +/** Open a new bitstream and prepare for direct feeding + * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream. + * Also, you are expected to handle ICY metadata extraction yourself. This + * input method does not handle MPG123_ICY_INTERVAL. It does parse ID3 frames, though. + * \param mh handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_open_feed(mpg123_handle *mh); + +/** Closes the source, if libmpg123 opened it. + * \param mh handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_close(mpg123_handle *mh); + +/** Read from stream and decode up to outmemsize bytes. + * + * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 + * (API version 45). + * + * \param mh handle + * \param outmemory address of output buffer to write to + * \param outmemsize maximum number of bytes to write + * \param done address to store the number of actually decoded bytes to + * \return MPG123_OK or error/message code + */ +MPG123_EXPORT int mpg123_read(mpg123_handle *mh +, void *outmemory, size_t outmemsize, size_t *done ); + +/** Feed data for a stream that has been opened with mpg123_open_feed(). + * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples. + * \param mh handle + * \param in input buffer + * \param size number of input bytes + * \return MPG123_OK or error/message code. + */ +MPG123_EXPORT int mpg123_feed( mpg123_handle *mh +, const unsigned char *in, size_t size ); + +/** Decode MPEG Audio from inmemory to outmemory. + * This is very close to a drop-in replacement for old mpglib. + * When you give zero-sized output buffer the input will be parsed until + * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it) + * without taking decoded data. + * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-). + * You can actually always decide if you want those specialized functions in separate steps or one call this one here. + * + * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 + * (API version 45). + * + * \param mh handle + * \param inmemory input buffer + * \param inmemsize number of input bytes + * \param outmemory output buffer + * \param outmemsize maximum number of output bytes + * \param done address to store the number of actually decoded bytes to + * \return error/message code (watch out especially for MPG123_NEED_MORE) + */ +MPG123_EXPORT int mpg123_decode( mpg123_handle *mh +, const unsigned char *inmemory, size_t inmemsize +, void *outmemory, size_t outmemsize, size_t *done ); + +/** Decode next MPEG frame to internal buffer + * or read a frame and return after setting a new format. + * \param mh handle + * \param num current frame offset gets stored there + * \param audio This pointer is set to the internal buffer to read the decoded audio from. + * \param bytes number of output bytes ready in the buffer + * \return MPG123_OK or error/message code + */ +MPG123_EXPORT int mpg123_decode_frame( mpg123_handle *mh +, off_t *num, unsigned char **audio, size_t *bytes ); + +/** Decode current MPEG frame to internal buffer. + * Warning: This is experimental API that might change in future releases! + * Please watch mpg123 development closely when using it. + * \param mh handle + * \param num last frame offset gets stored there + * \param audio this pointer is set to the internal buffer to read the decoded audio from. + * \param bytes number of output bytes ready in the buffer + * \return MPG123_OK or error/message code + */ +MPG123_EXPORT int mpg123_framebyframe_decode( mpg123_handle *mh +, off_t *num, unsigned char **audio, size_t *bytes ); + +/** Find, read and parse the next mp3 frame + * Warning: This is experimental API that might change in future releases! + * Please watch mpg123 development closely when using it. + * \param mh handle + * \return MPG123_OK or error/message code + */ +MPG123_EXPORT int mpg123_framebyframe_next(mpg123_handle *mh); + +/** Get access to the raw input data for the last parsed frame. + * This gives you a direct look (and write access) to the frame body data. + * Together with the raw header, you can reconstruct the whole raw MPEG stream without junk and meta data, or play games by actually modifying the frame body data before decoding this frame (mpg123_framebyframe_decode()). + * A more sane use would be to use this for CRC checking (see mpg123_info() and MPG123_CRC), the first two bytes of the body make up the CRC16 checksum, if present. + * You can provide NULL for a parameter pointer when you are not interested in the value. + * + * \param mh handle + * \param header the 4-byte MPEG header + * \param bodydata pointer to the frame body stored in the handle (without the header) + * \param bodybytes size of frame body in bytes (without the header) + * \return MPG123_OK if there was a yet un-decoded frame to get the + * data from, MPG123_BAD_HANDLE or MPG123_ERR otherwise (without further + * explanation, the error state of the mpg123_handle is not modified by + * this function). + */ +MPG123_EXPORT int mpg123_framedata( mpg123_handle *mh +, unsigned long *header, unsigned char **bodydata, size_t *bodybytes ); + +/** Get the input position (byte offset in stream) of the last parsed frame. + * This can be used for external seek index building, for example. + * It just returns the internally stored offset, regardless of validity -- + * you ensure that a valid frame has been parsed before! + * \param mh handle + * \return byte offset in stream + */ +MPG123_EXPORT off_t mpg123_framepos(mpg123_handle *mh); + +/** @} */ + + +/** \defgroup mpg123_seek mpg123 position and seeking + * + * Functions querying and manipulating position in the decoded audio bitstream. + * The position is measured in decoded audio samples or MPEG frame offset for + * the specific functions. The term sample refers to a group of samples for + * multiple channels, normally dubbed PCM frames. The latter term is + * avoided here because frame means something different in the context of MPEG + * audio. Since all samples of a PCM frame occur at the same time, there is only + * very limited ambiguity when talking about playback offset, as counting each + * channel sample individually does not make sense. + * + * If gapless code is in effect, the positions are adjusted to compensate the + * skipped padding/delay - meaning, you should not care about that at all and + * just use the position defined for the samples you get out of the decoder;-) + * The general usage is modelled after stdlib's ftell() and fseek(). + * Especially, the whence parameter for the seek functions has the same meaning + * as the one for fseek() and needs the same constants from stdlib.h: + * + * - SEEK_SET: set position to (or near to) specified offset + * - SEEK_CUR: change position by offset from now + * - SEEK_END: set position to offset from end + * + * Note that sample-accurate seek only works when gapless support has been + * enabled at compile time; seek is frame-accurate otherwise. + * Also, really sample-accurate seeking (meaning that you get the identical + * sample value after seeking compared to plain decoding up to the position) + * is only guaranteed when you do not mess with the position code by using + * #MPG123_UPSPEED, #MPG123_DOWNSPEED or #MPG123_START_FRAME. The first two mainly + * should cause trouble with NtoM resampling, but in any case with these options + * in effect, you have to keep in mind that the sample offset is not the same + * as counting the samples you get from decoding since mpg123 counts the skipped + * samples, too (or the samples played twice only once)! + * + * Short: When you care about the sample position, don't mess with those + * parameters;-) + * + * Streams may be openend in ways that do not support seeking. Also, consider + * the effect of #MPG123_FUZZY. + * + * @{ + */ + +/** Returns the current position in samples. + * On the next successful read, you'd get audio data with that offset. + * \param mh handle + * \return sample (PCM frame) offset or MPG123_ERR (null handle) + */ +MPG123_EXPORT off_t mpg123_tell(mpg123_handle *mh); + +/** Returns the frame number that the next read will give you data from. + * \param mh handle + * \return frame offset or MPG123_ERR (null handle) + */ +MPG123_EXPORT off_t mpg123_tellframe(mpg123_handle *mh); + +/** Returns the current byte offset in the input stream. + * \param mh handle + * \return byte offset or MPG123_ERR (null handle) + */ +MPG123_EXPORT off_t mpg123_tell_stream(mpg123_handle *mh); + +/** Seek to a desired sample offset. + * Usage is modelled afer the standard lseek(). + * \param mh handle + * \param sampleoff offset in samples (PCM frames) + * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END + * \return The resulting offset >= 0 or error/message code + */ +MPG123_EXPORT off_t mpg123_seek( mpg123_handle *mh +, off_t sampleoff, int whence ); + +/** Seek to a desired sample offset in data feeding mode. + * This just prepares things to be right only if you ensure that the next chunk + * of input data will be from input_offset byte position. + * \param mh handle + * \param sampleoff offset in samples (PCM frames) + * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END + * \param input_offset The position it expects to be at the + * next time data is fed to mpg123_decode(). + * \return The resulting offset >= 0 or error/message code + */ +MPG123_EXPORT off_t mpg123_feedseek( mpg123_handle *mh +, off_t sampleoff, int whence, off_t *input_offset ); + +/** Seek to a desired MPEG frame offset. + * Usage is modelled afer the standard lseek(). + * \param mh handle + * \param frameoff offset in MPEG frames + * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END + * \return The resulting offset >= 0 or error/message code */ +MPG123_EXPORT off_t mpg123_seek_frame( mpg123_handle *mh +, off_t frameoff, int whence ); + +/** Return a MPEG frame offset corresponding to an offset in seconds. + * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only. + * \return frame offset >= 0 or error/message code */ +MPG123_EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec); + +/** Give access to the frame index table that is managed for seeking. + * You are asked not to modify the values... Use mpg123_set_index to set the + * seek index + * \param mh handle + * \param offsets pointer to the index array + * \param step one index byte offset advances this many MPEG frames + * \param fill number of recorded index offsets; size of the array + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_index( mpg123_handle *mh +, off_t **offsets, off_t *step, size_t *fill ); + +/** Set the frame index table + * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets + * to NULL and fill to 0 will clear the index and free the allocated memory used by the index. + * \param mh handle + * \param offsets pointer to the index array + * \param step one index byte offset advances this many MPEG frames + * \param fill number of recorded index offsets; size of the array + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_set_index( mpg123_handle *mh +, off_t *offsets, off_t step, size_t fill ); + +/** An old crutch to keep old mpg123 binaries happy. + * WARNING: This function is there only to avoid runtime linking errors with + * standalone mpg123 before version 1.23.0 (if you strangely update the + * library but not the end-user program) and actually is broken + * for various cases (p.ex. 24 bit output). Do never use. It might eventually + * be purged from the library. + */ +MPG123_EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left); + +/** @} */ + + +/** \defgroup mpg123_voleq mpg123 volume and equalizer + * + * @{ + */ + +/** another channel enumeration, for left/right choice */ +enum mpg123_channels +{ + MPG123_LEFT=0x1 /**< The Left Channel. */ + ,MPG123_RIGHT=0x2 /**< The Right Channel. */ + ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */ +}; + +#ifdef MPG123_ENUM_API +/** Set the 32 Band Audio Equalizer settings. + * + * Note that this name is mapped to mpg123_eq2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mh handle + * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or + * #MPG123_LEFT|#MPG123_RIGHT for both. + * \param band The equaliser band to change (from 0 to 31) + * \param val The (linear) adjustment factor. + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_eq( mpg123_handle *mh +, enum mpg123_channels channel, int band, double val ); +#endif + +/** Set the 32 Band Audio Equalizer settings. No enums. + * + * This is actually called instead of mpg123_eq() unless MPG123_ENUM_API + * is defined. + * + * \param mh handle + * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or + * #MPG123_LEFT|#MPG123_RIGHT for both. + * \param band The equaliser band to change (from 0 to 31) + * \param val The (linear) adjustment factor. + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_eq2( mpg123_handle *mh +, int channel, int band, double val ); + +#ifdef MPG123_ENUM_API +/** Get the 32 Band Audio Equalizer settings. + * + * Note that this name is mapped to mpg123_geteq2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mh handle + * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or + * #MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. + * \param band The equaliser band to change (from 0 to 31) + * \return The (linear) adjustment factor (zero for pad parameters) */ +MPG123_EXPORT double mpg123_geteq(mpg123_handle *mh + , enum mpg123_channels channel, int band); +#endif + +/** Get the 32 Band Audio Equalizer settings. + * + * This is actually called instead of mpg123_geteq() unless MPG123_ENUM_API + * is defined. + * + * \param mh handle + * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or + * #MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. + * \param band The equaliser band to change (from 0 to 31) + * \return The (linear) adjustment factor (zero for pad parameters) */ +MPG123_EXPORT double mpg123_geteq2(mpg123_handle *mh, int channel, int band); + +/** Reset the 32 Band Audio Equalizer settings to flat + * \param mh handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_reset_eq(mpg123_handle *mh); + +/** Set the absolute output volume including the RVA setting, + * vol<0 just applies (a possibly changed) RVA setting. + * \param mh handle + * \param vol volume value (linear factor) + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_volume(mpg123_handle *mh, double vol); + +/** Adjust output volume including the RVA setting by chosen amount + * \param mh handle + * \param change volume value (linear factor increment) + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_volume_change(mpg123_handle *mh, double change); + +/** Return current volume setting, the actual value due to RVA, and the RVA + * adjustment itself. It's all as double float value to abstract the sample + * format. The volume values are linear factors / amplitudes (not percent) + * and the RVA value is in decibels. + * \param mh handle + * \param base return address for base volume (linear factor) + * \param really return address for actual volume (linear factor) + * \param rva_db return address for RVA value (decibels) + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db); + +/* TODO: Set some preamp in addition / to replace internal RVA handling? */ + +/** @} */ + + +/** \defgroup mpg123_status mpg123 status and information + * + * @{ + */ + +/** Enumeration of the mode types of Variable Bitrate */ +enum mpg123_vbr { + MPG123_CBR=0, /**< Constant Bitrate Mode (default) */ + MPG123_VBR, /**< Variable Bitrate Mode */ + MPG123_ABR /**< Average Bitrate Mode */ +}; + +/** Enumeration of the MPEG Versions */ +enum mpg123_version { + MPG123_1_0=0, /**< MPEG Version 1.0 */ + MPG123_2_0, /**< MPEG Version 2.0 */ + MPG123_2_5 /**< MPEG Version 2.5 */ +}; + + +/** Enumeration of the MPEG Audio mode. + * Only the mono mode has 1 channel, the others have 2 channels. */ +enum mpg123_mode { + MPG123_M_STEREO=0, /**< Standard Stereo. */ + MPG123_M_JOINT, /**< Joint Stereo. */ + MPG123_M_DUAL, /**< Dual Channel. */ + MPG123_M_MONO /**< Single Channel. */ +}; + + +/** Enumeration of the MPEG Audio flag bits */ +enum mpg123_flags { + MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */ + MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */ + MPG123_PRIVATE=0x4, /**< The private bit has been set. */ + MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */ +}; + +#ifdef MPG123_ENUM_API +/** Data structure for storing information about a frame of MPEG Audio */ +struct mpg123_frameinfo +{ + enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */ + int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ + long rate; /**< The sampling rate in Hz. */ + enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */ + int mode_ext; /**< The mode extension bit flag. */ + int framesize; /**< The size of the frame (in bytes, including header). */ + enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */ + int emphasis; /**< The emphasis type. */ + int bitrate; /**< Bitrate of the frame (kbps). */ + int abr_rate; /**< The target average bitrate. */ + enum mpg123_vbr vbr; /**< The VBR mode. */ +}; +#endif + +/** Data structure for storing information about a frame of MPEG Audio without enums */ +struct mpg123_frameinfo2 +{ + int version; /**< The MPEG version (1.0/2.0/2.5), enum mpg123_version. */ + int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ + long rate; /**< The sampling rate in Hz. */ + int mode; /**< The audio mode (enum mpg123_mode, Mono, Stereo, Joint-stero, Dual Channel). */ + int mode_ext; /**< The mode extension bit flag. */ + int framesize; /**< The size of the frame (in bytes, including header). */ + int flags; /**< MPEG Audio flag bits. Bitwise combination of enum mpg123_flags values. */ + int emphasis; /**< The emphasis type. */ + int bitrate; /**< Bitrate of the frame (kbps). */ + int abr_rate; /**< The target average bitrate. */ + int vbr; /**< The VBR mode, enum mpg123_vbr. */ +}; + +/** Data structure for even more detailed information out of the decoder, + * for MPEG layer III only. + * This was added to support the frame analyzer by the Lame project and + * just follows what was used there before. You know what the fields mean + * if you want use this structure. */ +struct mpg123_moreinfo +{ + double xr[2][2][576]; /**< internal data */ + double sfb[2][2][22]; /**< [2][2][SBMAX_l] */ + double sfb_s[2][2][3*13]; /**< [2][2][3*SBMAX_s] */ + int qss[2][2]; /**< internal data */ + int big_values[2][2]; /**< internal data */ + int sub_gain[2][2][3]; /**< internal data */ + int scalefac_scale[2][2]; /**< internal data */ + int preflag[2][2]; /**< internal data */ + int blocktype[2][2]; /**< internal data */ + int mixed[2][2]; /**< internal data */ + int mainbits[2][2]; /**< internal data */ + int sfbits[2][2]; /**< internal data */ + int scfsi[2]; /**< internal data */ + int maindata; /**< internal data */ + int padding; /**< internal data */ +}; + +#ifdef MPG123_ENUM_API +/** Get frame information about the MPEG audio bitstream and store + * it in a mpg123_frameinfo structure. + * + * Note that this name is mapped to mpg123_info2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mh handle + * \param mi address of existing frameinfo structure to write to + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi); +#endif + +/** Get frame information about the MPEG audio bitstream and store + * it in a mpg123_frameinfo2 structure. + * + * This is actually called instead of mpg123_info() + * unless MPG123_ENUM_API is defined. + * + * \param mh handle + * \param mi address of existing frameinfo structure to write to + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_info2(mpg123_handle *mh, struct mpg123_frameinfo2 *mi); + +/** Trigger collection of additional decoder information while decoding. + * \param mh handle + * \param mi pointer to data storage (NULL to disable collection) + * \return MPG123_OK if the collection was enabled/disabled as desired, MPG123_ERR + * otherwise (e.g. if the feature is disabled) + */ +MPG123_EXPORT int mpg123_set_moreinfo( mpg123_handle *mh +, struct mpg123_moreinfo *mi ); + +/** Get the safe output buffer size for all cases + * (when you want to replace the internal buffer) + * \return safe buffer size + */ +MPG123_EXPORT size_t mpg123_safe_buffer(void); + +/** Make a full parsing scan of each frame in the file. ID3 tags are found. An + * accurate length value is stored. Seek index will be filled. A seek back to + * current position is performed. At all, this function refuses work when + * stream is not seekable. + * \param mh handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_scan(mpg123_handle *mh); + +/** Return, if possible, the full (expected) length of current track in + * MPEG frames. + * \param mh handle + * \return length >= 0 or MPG123_ERR if there is no length guess possible. + */ +MPG123_EXPORT off_t mpg123_framelength(mpg123_handle *mh); + +/** Return, if possible, the full (expected) length of current + * track in samples (PCM frames). + * + * This relies either on an Info frame at the beginning or a previous + * call to mpg123_scan() to get the real number of MPEG frames in a + * file. It will guess based on file size if neither Info frame nor + * scan data are present. In any case, there is no guarantee that the + * decoder will not give you more data, for example in case the open + * file gets appended to during decoding. + * \param mh handle + * \return length >= 0 or MPG123_ERR if there is no length guess possible. + */ +MPG123_EXPORT off_t mpg123_length(mpg123_handle *mh); + +/** Override the value for file size in bytes. + * Useful for getting sensible track length values in feed mode or for HTTP streams. + * \param mh handle + * \param size file size in bytes + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size); + +/** Get MPEG frame duration in seconds. + * \param mh handle + * \return frame duration in seconds, <0 on error + */ +MPG123_EXPORT double mpg123_tpf(mpg123_handle *mh); + +/** Get MPEG frame duration in samples. + * \param mh handle + * \return samples per frame for the most recently parsed frame; <0 on errors + */ +MPG123_EXPORT int mpg123_spf(mpg123_handle *mh); + +/** Get and reset the clip count. + * \param mh handle + * \return count of clipped samples + */ +MPG123_EXPORT long mpg123_clip(mpg123_handle *mh); + + +/** The key values for state information from mpg123_getstate(). */ +enum mpg123_state +{ + MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true). */ + ,MPG123_BUFFERFILL /**< Get fill of internal (feed) input buffer as integer byte count returned as long and as double. An error is returned on integer overflow while converting to (signed) long, but the returned floating point value shold still be fine. */ + ,MPG123_FRANKENSTEIN /**< Stream consists of carelessly stitched together files. Seeking may yield unexpected results (also with MPG123_ACCURATE, it may be confused). */ + ,MPG123_FRESH_DECODER /**< Decoder structure has been updated, possibly indicating changed stream (integer value, 0 if false, 1 if true). Flag is cleared after retrieval. */ + ,MPG123_ENC_DELAY /** Encoder delay read from Info tag (layer III, -1 if unknown). */ + ,MPG123_ENC_PADDING /** Encoder padding read from Info tag (layer III, -1 if unknown). */ + ,MPG123_DEC_DELAY /** Decoder delay (for layer III only, -1 otherwise). */ +}; + +#ifdef MPG123_ENUM_API +/** Get various current decoder/stream state information. + * + * Note that this name is mapped to mpg123_getstate2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mh handle + * \param key the key to identify the information to give. + * \param val the address to return (long) integer values to + * \param fval the address to return floating point values to + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getstate( mpg123_handle *mh +, enum mpg123_state key, long *val, double *fval ); +#endif + +/** Get various current decoder/stream state information. No enums. + * + * This is actually called instead of mpg123_getstate() + * unless MPG123_ENUM_API is defined. + * + * \param mh handle + * \param key the key to identify the information to give (enum mpg123_state) + * \param val the address to return (long) integer values to + * \param fval the address to return floating point values to + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getstate2( mpg123_handle *mh +, int key, long *val, double *fval ); + +/** @} */ + + +/** \defgroup mpg123_metadata mpg123 metadata handling + * + * Functions to retrieve the metadata from MPEG Audio files and streams. + * Also includes string handling functions. + * + * @{ + */ + +/** Data structure for storing strings in a safer way than a standard C-String. + * Can also hold a number of null-terminated strings. */ +typedef struct +{ + char* p; /**< pointer to the string data */ + size_t size; /**< raw number of bytes allocated */ + size_t fill; /**< number of used bytes (including closing zero byte) */ +} mpg123_string; + +/** Allocate and intialize a new string. + * \param val optional initial string value (can be NULL) + */ +MPG123_EXPORT mpg123_string* mpg123_new_string(const char* val); + +/** Free memory of contents and the string structure itself. + * \param sb string handle + */ +MPG123_EXPORT void mpg123_delete_string(mpg123_string* sb); + +/** Initialize an existing mpg123_string structure to {NULL, 0, 0}. + * If you hand in a NULL pointer here, your program should crash. The other + * string functions are more forgiving, but this one here is too basic. + * \param sb string handle (address of existing structure on your side) + */ +MPG123_EXPORT void mpg123_init_string(mpg123_string* sb); + +/** Free-up memory of the contents of an mpg123_string (not the struct itself). + * This also calls mpg123_init_string() and hence is safe to be called + * repeatedly. + * \param sb string handle + */ +MPG123_EXPORT void mpg123_free_string(mpg123_string* sb); + +/** Change the size of a mpg123_string + * \param sb string handle + * \param news new size in bytes + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news); + +/** Increase size of a mpg123_string if necessary (it may stay larger). + * Note that the functions for adding and setting in current libmpg123 + * use this instead of mpg123_resize_string(). + * That way, you can preallocate memory and safely work afterwards with + * pieces. + * \param sb string handle + * \param news new minimum size + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news); + +/** Copy the contents of one mpg123_string string to another. + * Yes the order of arguments is reversed compated to memcpy(). + * \param from string handle + * \param to string handle + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to); + +/** Move the contents of one mpg123_string string to another. + * This frees any memory associated with the target and moves over the + * pointers from the source, leaving the source without content after + * that. The only possible error is that you hand in NULL pointers. + * If you handed in a valid source, its contents will be gone, even if + * there was no target to move to. If you hand in a valid target, its + * original contents will also always be gone, to be replaced with the + * source's contents if there was some. + * \param from source string handle + * \param to target string handle + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_move_string(mpg123_string* from, mpg123_string* to); + +/** Append a C-String to an mpg123_string + * \param sb string handle + * \param stuff to append + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff); + +/** Append a C-substring to an mpg123 string + * \param sb string handle + * \param stuff content to copy + * \param from offset to copy from + * \param count number of characters to copy (a null-byte is always appended) + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_add_substring( mpg123_string *sb +, const char *stuff, size_t from, size_t count ); + +/** Set the content of a mpg123_string to a C-string + * \param sb string handle + * \param stuff content to copy + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff); + +/** Set the content of a mpg123_string to a C-substring + * \param sb string handle + * \param stuff the future content + * \param from offset to copy from + * \param count number of characters to copy (a null-byte is always appended) + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_set_substring( mpg123_string *sb +, const char *stuff, size_t from, size_t count ); + +/** Count characters in a mpg123 string (non-null bytes or Unicode points). + * This function is of limited use, as it does just count code points + * encoded in an UTF-8 string, only loosely related to the count of visible + * characters. Get your full Unicode handling support elsewhere. + * \param sb string handle + * \param utf8 a flag to tell if the string is in utf8 encoding + * \return character count +*/ +MPG123_EXPORT size_t mpg123_strlen(mpg123_string *sb, int utf8); + +/** Remove trailing \\r and \\n, if present. + * \param sb string handle + * \return 0 on error, 1 on success + */ +MPG123_EXPORT int mpg123_chomp_string(mpg123_string *sb); + +/** Determine if two strings contain the same data. + * This only returns 1 if both given handles are non-NULL and + * if they are filled with the same bytes. + * \param a first string handle + * \param b second string handle + * \return 0 for different strings, 1 for identical + */ +MPG123_EXPORT int mpg123_same_string(mpg123_string *a, mpg123_string *b); + +/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */ +enum mpg123_text_encoding +{ + mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */ + ,mpg123_text_utf8 = 1 /**< UTF-8 */ + ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */ + ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */ + ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */ + ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules. + * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when + * you don't mess with the reserved code points. If you want to decode little endian data + * without BOM you need to prepend 0xff 0xfe yourself. */ + ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */ + ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality, + * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123 + * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16 + * types (we expect a BOM before real data there), not so for utf16be!*/ + ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */ +}; + +/** The encoding byte values from ID3v2. */ +enum mpg123_id3_enc +{ + mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */ + ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */ + ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */ + ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */ + ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */ +}; + +#ifdef MPG123_ENUM_API +/** Convert ID3 encoding byte to mpg123 encoding index. + * + * Note that this name is mapped to mpg123_enc_from_id3_2() instead unless + * MPG123_ENUM_API is defined. + * + * \param id3_enc_byte the ID3 encoding code + * \return the mpg123 encoding index + */ +MPG123_EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte); +#endif + +/** Convert ID3 encoding byte to mpg123 encoding index. No enums. + * + * This is actually called instead of mpg123_enc_from_id3() + * unless MPG123_ENUM_API is defined. + * + * \param id3_enc_byte the ID3 encoding code + * \return the mpg123 encoding index + */ +MPG123_EXPORT int mpg123_enc_from_id3_2(unsigned char id3_enc_byte); + +#ifdef MPG123_ENUM_API +/** Store text data in string, after converting to UTF-8 from indicated encoding. + * + * Note that this name is mapped to mpg123_store_utf8_2() instead unless + * MPG123_ENUM_API is defined. + * + * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). + * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). + * \param sb target string + * \param enc mpg123 text encoding value + * \param source source buffer with plain unsigned bytes (you might need to cast from signed char) + * \param source_size number of bytes in the source buffer + * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) + */ +MPG123_EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size); +#endif + +/** Store text data in string, after converting to UTF-8 from indicated encoding. No enums. + * + * This is actually called instead of mpg123_store_utf8() + * unless MPG123_ENUM_API is defined. + * + * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). + * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). + * \param sb target string + * \param enc mpg123 text encoding value (enum mpg123_text_encoding) + * \param source source buffer with plain unsigned bytes (you might need to cast from signed char) + * \param source_size number of bytes in the source buffer + * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) + */ +MPG123_EXPORT int mpg123_store_utf8_2(mpg123_string *sb +, int enc, const unsigned char *source, size_t source_size); + +/** Sub data structure for ID3v2, for storing various text fields (including comments). + * This is for ID3v2 COMM, TXXX and all the other text fields. + * Only COMM, TXXX and USLT may have a description, only COMM and USLT + * have a language. + * You should consult the ID3v2 specification for the use of the various text fields + * ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */ +typedef struct +{ + char lang[3]; /**< Three-letter language code (not terminated). */ + char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */ + mpg123_string description; /**< Empty for the generic comment... */ + mpg123_string text; /**< ... */ +} mpg123_text; + +/** The picture type values from ID3v2. */ +enum mpg123_id3_pic_type +{ + mpg123_id3_pic_other = 0 /**< see ID3v2 docs */ + ,mpg123_id3_pic_icon = 1 /**< see ID3v2 docs */ + ,mpg123_id3_pic_other_icon = 2 /**< see ID3v2 docs */ + ,mpg123_id3_pic_front_cover = 3 /**< see ID3v2 docs */ + ,mpg123_id3_pic_back_cover = 4 /**< see ID3v2 docs */ + ,mpg123_id3_pic_leaflet = 5 /**< see ID3v2 docs */ + ,mpg123_id3_pic_media = 6 /**< see ID3v2 docs */ + ,mpg123_id3_pic_lead = 7 /**< see ID3v2 docs */ + ,mpg123_id3_pic_artist = 8 /**< see ID3v2 docs */ + ,mpg123_id3_pic_conductor = 9 /**< see ID3v2 docs */ + ,mpg123_id3_pic_orchestra = 10 /**< see ID3v2 docs */ + ,mpg123_id3_pic_composer = 11 /**< see ID3v2 docs */ + ,mpg123_id3_pic_lyricist = 12 /**< see ID3v2 docs */ + ,mpg123_id3_pic_location = 13 /**< see ID3v2 docs */ + ,mpg123_id3_pic_recording = 14 /**< see ID3v2 docs */ + ,mpg123_id3_pic_performance = 15 /**< see ID3v2 docs */ + ,mpg123_id3_pic_video = 16 /**< see ID3v2 docs */ + ,mpg123_id3_pic_fish = 17 /**< see ID3v2 docs */ + ,mpg123_id3_pic_illustration = 18 /**< see ID3v2 docs */ + ,mpg123_id3_pic_artist_logo = 19 /**< see ID3v2 docs */ + ,mpg123_id3_pic_publisher_logo = 20 /**< see ID3v2 docs */ +}; + +/** Sub data structure for ID3v2, for storing picture data including comment. + * This is for the ID3v2 APIC field. You should consult the ID3v2 specification + * for the use of the APIC field ("frames" in ID3v2 documentation, I use "fields" + * here to separate from MPEG frames). */ +typedef struct +{ + char type; /**< mpg123_id3_pic_type value */ + mpg123_string description; /**< description string */ + mpg123_string mime_type; /**< MIME type */ + size_t size; /**< size in bytes */ + unsigned char* data; /**< pointer to the image data */ +} mpg123_picture; + +/** Data structure for storing IDV3v2 tags. + * This structure is not a direct binary mapping with the file contents. + * The ID3v2 text frames are allowed to contain multiple strings. + * So check for null bytes until you reach the mpg123_string fill. + * All text is encoded in UTF-8. */ +typedef struct +{ + unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */ + mpg123_string *title; /**< Title string (pointer into text_list). */ + mpg123_string *artist; /**< Artist string (pointer into text_list). */ + mpg123_string *album; /**< Album string (pointer into text_list). */ + mpg123_string *year; /**< The year as a string (pointer into text_list). */ + mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */ + mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */ + /* Encountered ID3v2 fields are appended to these lists. + There can be multiple occurences, the pointers above always point to the last encountered data. */ + mpg123_text *comment_list; /**< Array of comments. */ + size_t comments; /**< Number of comments. */ + mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */ + size_t texts; /**< Numer of text fields. */ + mpg123_text *extra; /**< The array of extra (TXXX) fields. */ + size_t extras; /**< Number of extra text (TXXX) fields. */ + mpg123_picture *picture; /**< Array of ID3v2 pictures fields (APIC). + Only populated if MPG123_PICTURE flag is set! */ + size_t pictures; /**< Number of picture (APIC) fields. */ +} mpg123_id3v2; + +/** Data structure for ID3v1 tags (the last 128 bytes of a file). + * Don't take anything for granted (like string termination)! + * Also note the change ID3v1.1 did: comment[28] = 0; comment[29] = track_number + * It is your task to support ID3v1 only or ID3v1.1 ...*/ +typedef struct +{ + char tag[3]; /**< Always the string "TAG", the classic intro. */ + char title[30]; /**< Title string. */ + char artist[30]; /**< Artist string. */ + char album[30]; /**< Album string. */ + char year[4]; /**< Year string. */ + char comment[30]; /**< Comment string. */ + unsigned char genre; /**< Genre index. */ +} mpg123_id3v1; + +#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */ +#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */ +#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/ +#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */ + +/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future). + * \param mh handle + * \return combination of flags, 0 on error (same as "nothing new") + */ +MPG123_EXPORT int mpg123_meta_check(mpg123_handle *mh); + +/** Clean up meta data storage (ID3v2 and ICY), freeing memory. + * \param mh handle + */ +MPG123_EXPORT void mpg123_meta_free(mpg123_handle *mh); + +/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call. + * v1 and/or v2 can be set to NULL when there is no corresponding data. + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_id3( mpg123_handle *mh +, mpg123_id3v1 **v1, mpg123_id3v2 **v2 ); + +/** Return pointers to and size of stored raw ID3 data if storage has + * been configured with MPG123_RAW_ID3 and stream parsing passed the + * metadata already. Null value with zero size is a possibility! + * The storage can change at any next API call. + * + * \param mh mpg123 handle + * \param v1 address to store pointer to v1 tag + * \param v1_size size of v1 data in bytes + * \param v2 address to store pointer to v2 tag + * \param v2_size size of v2 data in bytes + * \return MPG123_OK or MPG123_ERR. Only on MPG123_OK the output + * values are set. + */ +MPG123_EXPORT int mpg123_id3_raw( mpg123_handle *mh +, unsigned char **v1, size_t *v1_size +, unsigned char **v2, size_t *v2_size ); + +/** Point icy_meta to existing data structure wich may change on any next read/decode function call. + * \param mh handle + * \param icy_meta return address for ICY meta string (set to NULL if nothing there) + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); + +/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8. + * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) . + * \param icy_text The input data in ICY encoding + * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */ +MPG123_EXPORT char* mpg123_icy2utf8(const char* icy_text); + + +/** @} */ + + +/** \defgroup mpg123_advpar mpg123 advanced parameter API + * + * Direct access to a parameter set without full handle around it. + * Possible uses: + * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE). + * - Use one set of parameters for multiple handles. + * + * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt() + * family) directly return a fully qualified mpg123 error code, the ones + * operating on full handles normally MPG123_OK or MPG123_ERR, storing the + * specific error code itseld inside the handle. + * + * @{ + */ + +/** Opaque structure for the libmpg123 decoder parameters. */ +struct mpg123_pars_struct; + +/** Opaque structure for the libmpg123 decoder parameters. */ +typedef struct mpg123_pars_struct mpg123_pars; + +/** Create a handle with preset parameters. + * \param mp parameter handle + * \param decoder decoder choice + * \param error error code return address + * \return mpg123 handle + */ +MPG123_EXPORT mpg123_handle *mpg123_parnew( mpg123_pars *mp +, const char* decoder, int *error ); + +/** Allocate memory for and return a pointer to a new mpg123_pars + * \param error error code return address + * \return new parameter handle + */ +MPG123_EXPORT mpg123_pars *mpg123_new_pars(int *error); + +/** Delete and free up memory used by a mpg123_pars data structure + * \param mp parameter handle + */ +MPG123_EXPORT void mpg123_delete_pars(mpg123_pars* mp); + +/** Configure mpg123 parameters to accept no output format at all, + * use before specifying supported formats with mpg123_format + * \param mp parameter handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_fmt_none(mpg123_pars *mp); + +/** Configure mpg123 parameters to accept all formats + * (also any custom rate you may set) -- this is default. + * \param mp parameter handle + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_fmt_all(mpg123_pars *mp); + +/** Set the audio format support of a mpg123_pars in detail: + * \param mp parameter handle + * \param rate The sample rate value (in Hertz). + * \param channels A combination of MPG123_STEREO and MPG123_MONO. + * \param encodings A combination of accepted encodings for rate and channels, + * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no + * support). + * \return MPG123_OK on success +*/ +MPG123_EXPORT int mpg123_fmt(mpg123_pars *mp +, long rate, int channels, int encodings); + +/** Set the audio format support of a mpg123_pars in detail: + * \param mp parameter handle + * \param rate The sample rate value (in Hertz). Special value 0 means + * all rates (reason for this variant of mpg123_fmt). + * \param channels A combination of MPG123_STEREO and MPG123_MONO. + * \param encodings A combination of accepted encodings for rate and channels, + * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no + * support). + * \return MPG123_OK on success +*/ +MPG123_EXPORT int mpg123_fmt2(mpg123_pars *mp +, long rate, int channels, int encodings); + +/** Check to see if a specific format at a specific rate is supported + * by mpg123_pars. + * \param mp parameter handle + * \param rate sampling rate + * \param encoding encoding + * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, + * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ +MPG123_EXPORT int mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding); + +#ifdef MPG123_ENUM_API +/** Set a specific parameter in a par handle. + * + * Note that this name is mapped to mpg123_par2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mp parameter handle + * \param type parameter choice + * \param value integer value + * \param fvalue floating point value + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_par( mpg123_pars *mp +, enum mpg123_parms type, long value, double fvalue ); +#endif + +/** Set a specific parameter in a par handle. No enums. + * + * This is actually called instead of mpg123_par() + * unless MPG123_ENUM_API is defined. + * + * \param mp parameter handle + * \param type parameter choice (enum mpg123_parms) + * \param value integer value + * \param fvalue floating point value + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_par2( mpg123_pars *mp +, int type, long value, double fvalue ); + +#ifdef MPG123_ENUM_API +/** Get a specific parameter from a par handle. + * + * Note that this name is mapped to mpg123_getpar2() instead unless + * MPG123_ENUM_API is defined. + * + * \param mp parameter handle + * \param type parameter choice + * \param value integer value return address + * \param fvalue floating point value return address + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getpar( mpg123_pars *mp +, enum mpg123_parms type, long *value, double *fvalue ); +#endif + +/** Get a specific parameter from a par handle. No enums. + * + * This is actually called instead of mpg123_getpar() + * unless MPG123_ENUM_API is defined. + * + * \param mp parameter handle + * \param type parameter choice (enum mpg123_parms) + * \param value integer value return address + * \param fvalue floating point value return address + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_getpar2( mpg123_pars *mp +, int type, long *value, double *fvalue ); + +/** @} */ + + +/** \defgroup mpg123_lowio mpg123 low level I/O + * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket... + * + * @{ */ + +/** Replace default internal buffer with user-supplied buffer. + * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio. + * Note that the required buffer size could be bigger than expected from output + * encoding if libmpg123 has to convert from primary decoder output (p.ex. 32 bit + * storage for 24 bit output). + * + * Note: The type of data changed to a void pointer in mpg123 1.26.0 + * (API version 45). + * + * \param mh handle + * \param data pointer to user buffer + * \param size of buffer in bytes + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_replace_buffer(mpg123_handle *mh +, void *data, size_t size); + +/** The max size of one frame's decoded output with current settings. + * Use that to determine an appropriate minimum buffer size for decoding one frame. + * \param mh handle + * \return maximum decoded data size in bytes + */ +MPG123_EXPORT size_t mpg123_outblock(mpg123_handle *mh); + +/** Replace low-level stream access functions; read and lseek as known in POSIX. + * You can use this to make any fancy file opening/closing yourself, + * using mpg123_open_fd() to set the file descriptor for your read/lseek + * (doesn't need to be a "real" file descriptor...). + * Setting a function to NULL means that the default internal read is + * used (active from next mpg123_open call on). + * Note: As it would be troublesome to mess with this while having a file open, + * this implies mpg123_close(). + * \param mh handle + * \param r_read callback for reading (behaviour like POSIX read) + * \param r_lseek callback for seeking (like POSIX lseek) + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_replace_reader( mpg123_handle *mh +, mpg123_ssize_t (*r_read) (int, void *, size_t) +, off_t (*r_lseek)(int, off_t, int) +); + +/** Replace I/O functions with your own ones operating on some kind of + * handle instead of integer descriptors. + * The handle is a void pointer, so you can pass any data you want... + * mpg123_open_handle() is the call you make to use the I/O defined here. + * There is no fallback to internal read/seek here. + * Note: As it would be troublesome to mess with this while having a file open, + * this mpg123_close() is implied here. + * \param mh handle + * \param r_read callback for reading (behaviour like POSIX read) + * \param r_lseek callback for seeking (like POSIX lseek) + * \param cleanup A callback to clean up an I/O handle on mpg123_close, + * can be NULL for none (you take care of cleaning your handles). + * \return MPG123_OK on success + */ +MPG123_EXPORT int mpg123_replace_reader_handle( mpg123_handle *mh +, mpg123_ssize_t (*r_read) (void *, void *, size_t) +, off_t (*r_lseek)(void *, off_t, int) +, void (*cleanup)(void*) ); + +/** @} */ #ifdef __cplusplus } diff --git a/win64/include/mpg123/mpg123.h.in b/win64/include/mpg123/mpg123.h.in deleted file mode 100644 index a398044b..00000000 --- a/win64/include/mpg123/mpg123.h.in +++ /dev/null @@ -1,1721 +0,0 @@ -/* - libmpg123: MPEG Audio Decoder library (version ) - - copyright 1995-2015 by the mpg123 project - free software under the terms of the LGPL 2.1 - see COPYING and AUTHORS files in distribution or http://mpg123.org -*/ - -#ifndef MPG123_LIB_H -#define MPG123_LIB_H - -#include - -/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */ - -/** A macro to check at compile time which set of API functions to expect. - * This should be incremented at least each time a new symbol is added - * to the header. - */ -#define MPG123_API_VERSION 45 - -#ifndef MPG123_EXPORT -/** Defines needed for MS Visual Studio(tm) DLL builds. - * Every public function must be prefixed with MPG123_EXPORT. When building - * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible - * for clients and includes it in the import library which is created together - * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which - * imports the functions from the DLL. - */ -#ifdef BUILD_MPG123_DLL -/* The dll exports. */ -#define MPG123_EXPORT __declspec(dllexport) -#else -#ifdef LINK_MPG123_DLL -/* The exe imports. */ -#define MPG123_EXPORT __declspec(dllimport) -#else -/* Nothing on normal/UNIX builds */ -#define MPG123_EXPORT -#endif -#endif -#endif - -/* This is for Visual Studio, so this header works as distributed in the binary downloads */ -#if defined(_MSC_VER) && !defined(MPG123_DEF_SSIZE_T) &&!defined(_SSIZE_T_DEFINED) -#define MPG123_DEF_SSIZE_T -#include -typedef ptrdiff_t ssize_t; -#endif - -#ifndef MPG123_NO_CONFIGURE /* Enable use of this file without configure. */ - - - -/* Simplified large file handling. - I used to have a check here that prevents building for a library with conflicting large file setup - (application that uses 32 bit offsets with library that uses 64 bits). - While that was perfectly fine in an environment where there is one incarnation of the library, - it hurt GNU/Linux and Solaris systems with multilib where the distribution fails to provide the - correct header matching the 32 bit library (where large files need explicit support) or - the 64 bit library (where there is no distinction). - - New approach: When the app defines _FILE_OFFSET_BITS, it wants non-default large file support, - and thus functions with added suffix (mpg123_open_64). - Any mismatch will be caught at link time because of the _FILE_OFFSET_BITS setting used when - building libmpg123. Plus, there's dual mode large file support in mpg123 since 1.12 now. - Link failure is not the expected outcome of any half-sane usage anymore. - - More complication: What about client code defining _LARGEFILE64_SOURCE? It might want direct access to the _64 functions, along with the ones without suffix. Well, that's possible now via defining MPG123_NO_LARGENAME and MPG123_LARGESUFFIX, respectively, for disabling or enforcing the suffix names. -*/ - -/* - Now, the renaming of large file aware functions. - By default, it appends underscore _FILE_OFFSET_BITS (so, mpg123_seek_64 for mpg123_seek), if _FILE_OFFSET_BITS is defined. You can force a different suffix via MPG123_LARGESUFFIX (that must include the underscore), or you can just disable the whole mess by defining MPG123_NO_LARGENAME. -*/ -#if (!defined MPG123_NO_LARGENAME) && ((defined _FILE_OFFSET_BITS) || (defined MPG123_LARGESUFFIX)) - -/* Need some trickery to concatenate the value(s) of the given macro(s). */ -#define MPG123_MACROCAT_REALLY(a, b) a ## b -#define MPG123_MACROCAT(a, b) MPG123_MACROCAT_REALLY(a, b) -#ifndef MPG123_LARGESUFFIX -#define MPG123_LARGESUFFIX MPG123_MACROCAT(_, _FILE_OFFSET_BITS) -#endif -#define MPG123_LARGENAME(func) MPG123_MACROCAT(func, MPG123_LARGESUFFIX) - -#define mpg123_open_fixed MPG123_LARGENAME(mpg123_open_fixed) -#define mpg123_open MPG123_LARGENAME(mpg123_open) -#define mpg123_open_fd MPG123_LARGENAME(mpg123_open_fd) -#define mpg123_open_handle MPG123_LARGENAME(mpg123_open_handle) -#define mpg123_framebyframe_decode MPG123_LARGENAME(mpg123_framebyframe_decode) -#define mpg123_decode_frame MPG123_LARGENAME(mpg123_decode_frame) -#define mpg123_tell MPG123_LARGENAME(mpg123_tell) -#define mpg123_tellframe MPG123_LARGENAME(mpg123_tellframe) -#define mpg123_tell_stream MPG123_LARGENAME(mpg123_tell_stream) -#define mpg123_seek MPG123_LARGENAME(mpg123_seek) -#define mpg123_feedseek MPG123_LARGENAME(mpg123_feedseek) -#define mpg123_seek_frame MPG123_LARGENAME(mpg123_seek_frame) -#define mpg123_timeframe MPG123_LARGENAME(mpg123_timeframe) -#define mpg123_index MPG123_LARGENAME(mpg123_index) -#define mpg123_set_index MPG123_LARGENAME(mpg123_set_index) -#define mpg123_position MPG123_LARGENAME(mpg123_position) -#define mpg123_length MPG123_LARGENAME(mpg123_length) -#define mpg123_framelength MPG123_LARGENAME(mpg123_framelength) -#define mpg123_set_filesize MPG123_LARGENAME(mpg123_set_filesize) -#define mpg123_replace_reader MPG123_LARGENAME(mpg123_replace_reader) -#define mpg123_replace_reader_handle MPG123_LARGENAME(mpg123_replace_reader_handle) -#define mpg123_framepos MPG123_LARGENAME(mpg123_framepos) - -#endif /* largefile hackery */ - -#endif /* MPG123_NO_CONFIGURE */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup mpg123_init mpg123 library and handle setup - * - * Functions to initialise and shutdown the mpg123 library and handles. - * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-) - * Tip: Use a RVA setting... - * - * @{ - */ - -/** Opaque structure for the libmpg123 decoder handle. */ -struct mpg123_handle_struct; - -/** Opaque structure for the libmpg123 decoder handle. - * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner. - */ -typedef struct mpg123_handle_struct mpg123_handle; - -/** Function to initialise the mpg123 library. - * This should be called once in a non-parallel context. It is not explicitly - * thread-safe, but repeated/concurrent calls still _should_ be safe as static - * tables are filled with the same values anyway. - * - * \return MPG123_OK if successful, otherwise an error number. - */ -MPG123_EXPORT int mpg123_init(void); - -/** Superfluous Function to close down the mpg123 library. - * This was created with the thought that there sometime will be cleanup code - * to be run after library use. This never materialized. You can forget about - * this function and it is only here for old programs that do call it. - */ -MPG123_EXPORT void mpg123_exit(void); - -/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()). - * and optional retrieval of an error code to feed to mpg123_plain_strerror(). - * Optional means: Any of or both the parameters may be NULL. - * - * \param decoder optional choice of decoder variant (NULL for default) - * \param error optional address to store error codes - * \return Non-NULL pointer to fresh handle when successful. - */ -MPG123_EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error); - -/** Delete handle, mh is either a valid mpg123 handle or NULL. - * \param mh handle - */ -MPG123_EXPORT void mpg123_delete(mpg123_handle *mh); - -/** Free plain memory allocated within libmpg123. - * This is for library users that are not sure to use the same underlying - * memory allocator as libmpg123. It is just a wrapper over free() in - * the underlying C library. - */ -MPG123_EXPORT void mpg123_free(void *ptr); - -/** Enumeration of the parameters types that it is possible to set/get. */ -enum mpg123_parms -{ - MPG123_VERBOSE = 0, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */ - MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */ - MPG123_ADD_FLAGS, /**< add some flags (integer) */ - MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */ - MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */ - MPG123_RVA, /**< one of the RVA choices above (integer) */ - MPG123_DOWNSPEED, /**< play a frame N times (integer) */ - MPG123_UPSPEED, /**< play every Nth frame (integer) */ - MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */ - MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */ - MPG123_ICY_INTERVAL, /**< Stream contains ICY metadata with this interval (integer). - Make sure to set this _before_ opening a stream.*/ - MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */ - MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */ - MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */ - MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). This can enlarge the limit for skipping junk on beginning, too (but not reduce it). */ - MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */ - ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/ - ,MPG123_FEEDPOOL /**< For feeder mode, keep that many buffers in a pool to avoid frequent malloc/free. The pool is allocated on mpg123_open_feed(). If you change this parameter afterwards, you can trigger growth and shrinkage during decoding. The default value could change any time. If you care about this, then set it. (integer) */ - ,MPG123_FEEDBUFFER /**< Minimal size of one internal feeder buffer, again, the default value is subject to change. (integer) */ - ,MPG123_FREEFORMAT_SIZE /**< Tell the parser a free-format frame size to - * avoid read-ahead to get it. A value of -1 (default) means that the parser - * will determine it. The parameter value is applied during decoder setup - * for a freshly opened stream only. - */ -}; - -/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */ -enum mpg123_param_flags -{ - MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */ - ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */ - ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */ - ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */ - ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */ - ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */ - ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */ - ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */ - ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */ - ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */ - ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */ - ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */ - ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */ - ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */ - ,MPG123_SKIP_ID3V2 = 0x2000 /**< 10 0000 0000 0000 Do not parse ID3v2 tags, just skip them. */ - ,MPG123_IGNORE_INFOFRAME = 0x4000 /**< 100 0000 0000 0000 Do not parse the LAME/Xing info frame, treat it as normal MPEG data. */ - ,MPG123_AUTO_RESAMPLE = 0x8000 /**< 1000 0000 0000 0000 Allow automatic internal resampling of any kind (default on if supported). Especially when going lowlevel with replacing output buffer, you might want to unset this flag. Setting MPG123_DOWNSAMPLE or MPG123_FORCE_RATE will override this. */ - ,MPG123_PICTURE = 0x10000 /**< 17th bit: Enable storage of pictures from tags (ID3v2 APIC). */ - ,MPG123_NO_PEEK_END = 0x20000 /**< 18th bit: Do not seek to the end of - * the stream in order to probe - * the stream length and search for the id3v1 field. This also means - * the file size is unknown unless set using mpg123_set_filesize() and - * the stream is assumed as non-seekable unless overridden. - */ - ,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */ - ,MPG123_STORE_RAW_ID3 = 0x80000 /**< store raw ID3 data (even if skipping) */ - ,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples. - * This is not reflected in the format codes. If this flag is set along with - * MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without - * MPG123_BIG_ENDIAN, it means s16le. Normal operation without - * MPG123_FORCE_ENDIAN produces output in native byte order. - */ - ,MPG123_BIG_ENDIAN = 0x200000 /**< Choose big endian instead of little. */ - ,MPG123_NO_READAHEAD = 0x400000 /**< Disable read-ahead in parser. If - * you know you provide full frames to the feeder API, this enables - * decoder output from the first one on, instead of having to wait for - * the next frame to confirm that the stream is healthy. It also disables - * free format support unless you provide a frame size using - * MPG123_FREEFORMAT_SIZE. - */ - ,MPG123_FLOAT_FALLBACK = 0x800000 /**< Consider floating point output encoding only after - * trying other (possibly downsampled) rates and encodings first. This is to - * support efficient playback where floating point output is only configured for - * an external resampler, bypassing that resampler when the desired rate can - * be produced directly. This is enabled by default to be closer to older versions - * of libmpg123 which did not enable float automatically at all. If disabled, - * float is considered after the 16 bit default and higher-bit integer encodings - * for any rate. */ - ,MPG123_NO_FRANKENSTEIN = 0x1000000 /**< Disable support for Frankenstein streams - * (different MPEG streams stiched together). Do not accept serious change of MPEG - * header inside a single stream. With this flag, the audio output format cannot - * change during decoding unless you open a new stream. This also stops decoding - * after an announced end of stream (Info header contained a number of frames - * and this number has been reached). This makes your MP3 files behave more like - * ordinary media files with defined structure, rather than stream dumps with - * some sugar. */ -}; - -/** choices for MPG123_RVA */ -enum mpg123_param_rva -{ - MPG123_RVA_OFF = 0 /**< RVA disabled (default). */ - ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */ - ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */ - ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */ -}; - -/** Set a specific parameter, for a specific mpg123_handle, using a parameter - * type key chosen from the mpg123_parms enumeration, to the specified value. - * \param mh handle - * \param type parameter choice - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_param( mpg123_handle *mh -, enum mpg123_parms type, long value, double fvalue ); - -/** Get a specific parameter, for a specific mpg123_handle. - * See the mpg123_parms enumeration for a list of available parameters. - * \param mh handle - * \param type parameter choice - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getparam( mpg123_handle *mh -, enum mpg123_parms type, long *value, double *fvalue ); - -/** Feature set available for query with mpg123_feature. */ -enum mpg123_feature_set -{ - MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */ - ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */ - ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */ - ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */ - ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */ - ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */ - ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */ - ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */ - ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */ - ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */ - ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */ - ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */ - ,MPG123_FEATURE_PARSE_ICY /**< ICY support */ - ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */ - ,MPG123_FEATURE_EQUALIZER /**< tunable equalizer */ - ,MPG123_FEATURE_MOREINFO /**< more info extraction (for frame analyzer) */ - ,MPG123_FEATURE_OUTPUT_FLOAT32 /**< 32 bit float output */ - ,MPG123_FEATURE_OUTPUT_FLOAT64 /**< 64 bit float output (usually never) */ -}; - -/** Query libmpg123 features. - * \param key feature selection - * \return 1 for success, 0 for unimplemented functions - */ -MPG123_EXPORT int mpg123_feature(const enum mpg123_feature_set key); - -/** Query libmpg123 features with better ABI compatibility - * - * This is the same as mpg123_feature(), but this time not using - * the enum as argument. Compilers don't have to agree on the size of - * enums and hence they are not safe in public API. - * - * \param key feature selection - * \return 1 for success, 0 for unimplemented functions - */ -MPG123_EXPORT int mpg123_feature2(int key); - -/* @} */ - - -/** \defgroup mpg123_error mpg123 error handling - * - * Functions to get text version of the error numbers and an enumeration - * of the error codes returned by libmpg123. - * - * Most functions operating on a mpg123_handle simply return MPG123_OK (0) - * on success and MPG123_ERR (-1) on failure, setting the internal error - * variable of the handle to the specific error code. If there was not a valid - * (non-NULL) handle provided to a function operating on one, MPG123_BAD_HANDLE - * may be returned if this can not be confused with a valid positive return - * value. - * Meaning: A function expected to return positive integers on success will - * always indicate error or a special condition by returning a negative one. - * - * Decoding/seek functions may also return message codes MPG123_DONE, - * MPG123_NEW_FORMAT and MPG123_NEED_MORE (all negative, see below on how to - * react). Note that calls to those can be nested, so generally watch out - * for these codes after initial handle setup. - * Especially any function that needs information about the current stream - * to work will try to at least parse the beginning if that did not happen - * yet. - * - * On a function that is supposed to return MPG123_OK on success and - * MPG123_ERR on failure, make sure you check for != MPG123_OK, not - * == MPG123_ERR, as the error code could get more specific in future, - * or there is just a special message from a decoding routine as indicated - * above. - * - * @{ - */ - -/** Enumeration of the message and error codes and returned by libmpg123 functions. */ -enum mpg123_errors -{ - MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */ - MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */ - MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */ - MPG123_ERR=-1, /**< Generic Error */ - MPG123_OK=0, /**< Success */ - MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */ - MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */ - MPG123_BAD_RATE, /**< Invalid sample rate specified. */ - MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */ - MPG123_BAD_PARAM, /**< Bad parameter id! */ - MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */ - MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */ - MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */ - MPG123_BAD_DECODER, /**< Invalid decoder choice. */ - MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */ - MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */ - MPG123_BAD_RVA, /**< Invalid RVA mode. */ - MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */ - MPG123_NO_SPACE, /**< Not enough buffer space. */ - MPG123_BAD_TYPES, /**< Incompatible numeric data types. */ - MPG123_BAD_BAND, /**< Bad equalizer band. */ - MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */ - MPG123_ERR_READER, /**< Error reading the stream. */ - MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */ - MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/ - MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */ - MPG123_BAD_FILE, /**< File access error. */ - MPG123_NO_SEEK, /**< Seek not supported by stream. */ - MPG123_NO_READER, /**< No stream opened. */ - MPG123_BAD_PARS, /**< Bad parameter handle. */ - MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */ - MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */ - MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */ - MPG123_NO_8BIT, /**< No 8bit encoding possible. */ - MPG123_BAD_ALIGN, /**< Stack aligmnent error */ - MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */ - MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */ - MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */ - MPG123_BAD_KEY, /**< Bad key value given. */ - MPG123_NO_INDEX, /**< No frame index in this build. */ - MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */ - MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */ - MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */ - ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */ - ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */ - ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */ - ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */ - ,MPG123_INT_OVERFLOW /**< Some integer overflow. */ -}; - -/** Look up error strings given integer code. - * \param errcode integer error code - * \return string describing what that error error code means - */ -MPG123_EXPORT const char* mpg123_plain_strerror(int errcode); - -/** Give string describing what error has occured in the context of handle mh. - * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via - * char *errmsg = mpg123_strerror(mh) - * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE. - * \param mh handle - * \return error message - */ -MPG123_EXPORT const char* mpg123_strerror(mpg123_handle *mh); - -/** Return the plain errcode intead of a string. - * \param mh handle - * \return error code recorded in handle or MPG123_BAD_HANDLE - */ -MPG123_EXPORT int mpg123_errcode(mpg123_handle *mh); - -/*@}*/ - - -/** \defgroup mpg123_decoder mpg123 decoder selection - * - * Functions to list and select the available decoders. - * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is). - * - * @{ - */ - -/** Get available decoder list. - * \return NULL-terminated array of generally available decoder names (plain 8bit ASCII) - */ -MPG123_EXPORT const char **mpg123_decoders(void); - -/** Get supported decoder list. - * \return NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII) - */ -MPG123_EXPORT const char **mpg123_supported_decoders(void); - -/** Set the active decoder. - * \param mh handle - * \param decoder_name name of decoder - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name); - -/** Get the currently active decoder name. - * The active decoder engine can vary depening on output constraints, - * mostly non-resampling, integer output is accelerated via 3DNow & Co. but for - * other modes a fallback engine kicks in. - * Note that this can return a decoder that is only active in the hidden and not - * available as decoder choice from the outside. - * \param mh handle - * \return The decoder name or NULL on error. - */ -MPG123_EXPORT const char* mpg123_current_decoder(mpg123_handle *mh); - -/*@}*/ - - -/** \defgroup mpg123_output mpg123 output audio format - * - * Functions to get and select the format of the decoded audio. - * - * Before you dive in, please be warned that you might get confused by this. - * This seems to happen a lot, therefore I am trying to explain in advance. - * If you do feel confused and just want to decode your normal MPEG audio files that - * don't alter properties in the middle, just use mpg123_open_fixed() with a fixed encoding - * and channel count and forget about a matrix of audio formats. If you want to get funky, - * read ahead ... - * - * The mpg123 library decides what output format to use when encountering the first frame in a stream, or actually any frame that is still valid but differs from the frames before in the prompted output format. At such a deciding point, an internal table of allowed encodings, sampling rates and channel setups is consulted. According to this table, an output format is chosen and the decoding engine set up accordingly (including optimized routines for different output formats). This might seem unusual but it just follows from the non-existence of "MPEG audio files" with defined overall properties. There are streams, streams are concatenations of (semi) independent frames. We store streams on disk and call them "MPEG audio files", but that does not change their nature as the decoder is concerned (the LAME/Xing header for gapless decoding makes things interesting again). - * - * To get to the point: What you do with mpg123_format() and friends is to fill the internal table of allowed formats before it is used. That includes removing support for some formats or adding your forced sample rate (see MPG123_FORCE_RATE) that will be used with the crude internal resampler. Also keep in mind that the sample encoding is just a question of choice -- the MPEG frames do only indicate their native sampling rate and channel count. If you want to decode to integer or float samples, 8 or 16 bit ... that is your decision. In a "clean" world, libmpg123 would always decode to 32 bit float and let you handle any sample conversion. But there are optimized routines that work faster by directly decoding to the desired encoding / accuracy. We prefer efficiency over conceptual tidyness. - * - * People often start out thinking that mpg123_format() should change the actual decoding format on the fly. That is wrong. It only has effect on the next natural change of output format, when libmpg123 will consult its format table again. To make life easier, you might want to call mpg123_format_none() before any thing else and then just allow one desired encoding and a limited set of sample rates / channel choices that you actually intend to deal with. You can force libmpg123 to decode everything to 44100 KHz, stereo, 16 bit integer ... it will duplicate mono channels and even do resampling if needed (unless that feature is disabled in the build, same with some encodings). But I have to stress that the resampling of libmpg123 is very crude and doesn't even contain any kind of "proper" interpolation. - * - * In any case, watch out for MPG123_NEW_FORMAT as return message from decoding routines and call mpg123_getformat() to get the currently active output format. - * - * @{ - */ - -/** They can be combined into one number (3) to indicate mono and stereo... */ -enum mpg123_channelcount -{ - MPG123_MONO = 1 /**< mono */ - ,MPG123_STEREO = 2 /**< stereo */ -}; - -/** An array of supported standard sample rates - * These are possible native sample rates of MPEG audio files. - * You can still force mpg123 to resample to a different one, but by - * default you will only get audio in one of these samplings. - * This list is in ascending order. - * \param list Store a pointer to the sample rates array there. - * \param number Store the number of sample rates there. */ -MPG123_EXPORT void mpg123_rates(const long **list, size_t *number); - -/** An array of supported audio encodings. - * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED). - * \param list Store a pointer to the encodings array there. - * \param number Store the number of encodings there. */ -MPG123_EXPORT void mpg123_encodings(const int **list, size_t *number); - -/** Return the size (in bytes) of one mono sample of the named encoding. - * \param encoding The encoding value to analyze. - * \return positive size of encoding in bytes, 0 on invalid encoding. */ -MPG123_EXPORT int mpg123_encsize(int encoding); - -/** Configure a mpg123 handle to accept no output format at all, - * use before specifying supported formats with mpg123_format - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_format_none(mpg123_handle *mh); - -/** Configure mpg123 handle to accept all formats - * (also any custom rate you may set) -- this is default. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_format_all(mpg123_handle *mh); - -/** Set the audio format support of a mpg123_handle in detail: - * \param mh handle - * \param rate The sample rate value (in Hertz). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here. - * \return MPG123_OK on success, MPG123_ERR if there was an error. */ -MPG123_EXPORT int mpg123_format( mpg123_handle *mh -, long rate, int channels, int encodings ); - -/** Set the audio format support of a mpg123_handle in detail: - * \param mh handle - * \param rate The sample rate value (in Hertz). Special value 0 means - * all rates (the reason for this variant of mpg123_format()). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). - * Please note that some encodings may not be supported in the library build - * and thus will be ignored here. - * \return MPG123_OK on success, MPG123_ERR if there was an error. */ -MPG123_EXPORT int mpg123_format2( mpg123_handle *mh -, long rate, int channels, int encodings ); - -/** Check to see if a specific format at a specific rate is supported - * by mpg123_handle. - * \param mh handle - * \param rate sampling rate - * \param encoding encoding - * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, - * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ -MPG123_EXPORT int mpg123_format_support( mpg123_handle *mh -, long rate, int encoding ); - -/** Get the current output format written to the addresses given. - * If the stream is freshly loaded, this will try to parse enough - * of it to give you the format to come. This clears the flag that - * would otherwise make the first decoding call return - * MPG123_NEW_FORMAT. - * \param mh handle - * \param rate sampling rate return address - * \param channels channel count return address - * \param encoding encoding return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getformat( mpg123_handle *mh -, long *rate, int *channels, int *encoding ); - -/** Get the current output format written to the addresses given. - * This differs from plain mpg123_getformat() in that you can choose - * _not_ to clear the flag that would trigger the next decoding call - * to return MPG123_NEW_FORMAT in case of a new format arriving. - * \param mh handle - * \param rate sampling rate return address - * \param channels channel count return address - * \param encoding encoding return address - * \param clear_flag if true, clear internal format flag - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getformat2( mpg123_handle *mh -, long *rate, int *channels, int *encoding, int clear_flag ); - -/*@}*/ - - -/** \defgroup mpg123_input mpg123 file input and decoding - * - * Functions for input bitstream and decoding operations. - * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!). - * @{ - */ - -/** Open a simple MPEG file with fixed properties. - * - * This function shall simplify the common use case of a plain MPEG - * file on disk that you want to decode, with one fixed sample - * rate and channel count, and usually a length defined by a Lame/Info/Xing - * tag. It will: - * - * - set the MPG123_NO_FRANKENSTEIN flag - * - set up format support according to given parameters, - * - open the file, - * - query audio format, - * - fix the audio format support table to ensure the format stays the same, - * - call mpg123_scan() if there is no header frame to tell the track length. - * - * From that on, you can call mpg123_getformat() for querying the sample - * rate (and channel count in case you allowed both) and mpg123_length() - * to get a pretty safe number for the duration. - * Only the sample rate is left open as that indeed is a fixed property of - * MPEG files. You could set MPG123_FORCE_RATE beforehand, but that may trigger - * low-quality resampling in the decoder, only do so if in dire need. - * The library will convert mono files to stereo for you, and vice versa. - * If any constraint cannot be satisified (most likely because of a non-default - * build of libmpg123), you get MPG123_ERR returned and can query the detailed - * cause from the handle. Only on MPG123_OK there will an open file that you - * then close using mpg123_close(), or implicitly on mpg123_delete() or the next - * call to open another file. - * - * So, for your usual CD rip collection, you could use - * - * mpg123_open_fixed(mh, path, MPG123_STEREO, MPG123_ENC_SIGNED_16) - * - * and be happy calling mpg123_getformat() to verify 44100 Hz rate, then just - * playing away with mpg123_read(). The occasional mono file, or MP2 file, - * will also be decoded without you really noticing. Just the speed could be - * wrong if you do not care about sample rate at all. - * \param mh handle - * \param path filesystem path - * \param channels allowed channel count, either 1 (MPG123_MONO) or - * 2 (MPG123_STEREO), or bitwise or of them, but then you're halfway back to - * calling mpg123_format() again;-) - * \param encoding a definite encoding from enum mpg123_enc_enum - * or a bitmask like for mpg123_format(), defeating the purpose somewhat - */ -MPG123_EXPORT int mpg123_open_fixed(mpg123_handle *mh, const char *path -, int channels, int encoding); - -/** Open and prepare to decode the specified file by filesystem path. - * This does not open HTTP urls; libmpg123 contains no networking code. - * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed(). - * \param mh handle - * \param path filesystem path - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open(mpg123_handle *mh, const char *path); - -/** Use an already opened file descriptor as the bitstream input - * mpg123_close() will _not_ close the file descriptor. - * \param mh handle - * \param fd file descriptor - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd); - -/** Use an opaque handle as bitstream input. This works only with the - * replaced I/O from mpg123_replace_reader_handle()! - * mpg123_close() will call the cleanup callback for your handle (if you gave one). - * \param mh handle - * \param iohandle your handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle); - -/** Open a new bitstream and prepare for direct feeding - * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream. - * Also, you are expected to handle ICY metadata extraction yourself. This - * input method does not handle MPG123_ICY_INTERVAL. It does parse ID3 frames, though. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_feed(mpg123_handle *mh); - -/** Closes the source, if libmpg123 opened it. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_close(mpg123_handle *mh); - -/** Read from stream and decode up to outmemsize bytes. - * - * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param outmemory address of output buffer to write to - * \param outmemsize maximum number of bytes to write - * \param done address to store the number of actually decoded bytes to - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_read(mpg123_handle *mh -, void *outmemory, size_t outmemsize, size_t *done ); - -/** Feed data for a stream that has been opened with mpg123_open_feed(). - * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples. - * \param mh handle - * \param in input buffer - * \param size number of input bytes - * \return MPG123_OK or error/message code. - */ -MPG123_EXPORT int mpg123_feed( mpg123_handle *mh -, const unsigned char *in, size_t size ); - -/** Decode MPEG Audio from inmemory to outmemory. - * This is very close to a drop-in replacement for old mpglib. - * When you give zero-sized output buffer the input will be parsed until - * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it) - * without taking decoded data. - * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-). - * You can actually always decide if you want those specialized functions in separate steps or one call this one here. - * - * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param inmemory input buffer - * \param inmemsize number of input bytes - * \param outmemory output buffer - * \param outmemsize maximum number of output bytes - * \param done address to store the number of actually decoded bytes to - * \return error/message code (watch out especially for MPG123_NEED_MORE) - */ -MPG123_EXPORT int mpg123_decode( mpg123_handle *mh -, const unsigned char *inmemory, size_t inmemsize -, void *outmemory, size_t outmemsize, size_t *done ); - -/** Decode next MPEG frame to internal buffer - * or read a frame and return after setting a new format. - * \param mh handle - * \param num current frame offset gets stored there - * \param audio This pointer is set to the internal buffer to read the decoded audio from. - * \param bytes number of output bytes ready in the buffer - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_decode_frame( mpg123_handle *mh -, off_t *num, unsigned char **audio, size_t *bytes ); - -/** Decode current MPEG frame to internal buffer. - * Warning: This is experimental API that might change in future releases! - * Please watch mpg123 development closely when using it. - * \param mh handle - * \param num last frame offset gets stored there - * \param audio this pointer is set to the internal buffer to read the decoded audio from. - * \param bytes number of output bytes ready in the buffer - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_framebyframe_decode( mpg123_handle *mh -, off_t *num, unsigned char **audio, size_t *bytes ); - -/** Find, read and parse the next mp3 frame - * Warning: This is experimental API that might change in future releases! - * Please watch mpg123 development closely when using it. - * \param mh handle - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_framebyframe_next(mpg123_handle *mh); - -/** Get access to the raw input data for the last parsed frame. - * This gives you a direct look (and write access) to the frame body data. - * Together with the raw header, you can reconstruct the whole raw MPEG stream without junk and meta data, or play games by actually modifying the frame body data before decoding this frame (mpg123_framebyframe_decode()). - * A more sane use would be to use this for CRC checking (see mpg123_info() and MPG123_CRC), the first two bytes of the body make up the CRC16 checksum, if present. - * You can provide NULL for a parameter pointer when you are not interested in the value. - * - * \param mh handle - * \param header the 4-byte MPEG header - * \param bodydata pointer to the frame body stored in the handle (without the header) - * \param bodybytes size of frame body in bytes (without the header) - * \return MPG123_OK if there was a yet un-decoded frame to get the - * data from, MPG123_BAD_HANDLE or MPG123_ERR otherwise (without further - * explanation, the error state of the mpg123_handle is not modified by - * this function). - */ -MPG123_EXPORT int mpg123_framedata( mpg123_handle *mh -, unsigned long *header, unsigned char **bodydata, size_t *bodybytes ); - -/** Get the input position (byte offset in stream) of the last parsed frame. - * This can be used for external seek index building, for example. - * It just returns the internally stored offset, regardless of validity -- - * you ensure that a valid frame has been parsed before! - * \param mh handle - * \return byte offset in stream - */ -MPG123_EXPORT off_t mpg123_framepos(mpg123_handle *mh); - -/*@}*/ - - -/** \defgroup mpg123_seek mpg123 position and seeking - * - * Functions querying and manipulating position in the decoded audio bitstream. - * The position is measured in decoded audio samples or MPEG frame offset for - * the specific functions. The term sample refers to a group of samples for - * multiple channels, normally dubbed PCM frames. The latter term is - * avoided here because frame means something different in the context of MPEG - * audio. Since all samples of a PCM frame occur at the same time, there is only - * very limited ambiguity when talking about playback offset, as counting each - * channel sample individually does not make sense. - * - * If gapless code is in effect, the positions are adjusted to compensate the - * skipped padding/delay - meaning, you should not care about that at all and - * just use the position defined for the samples you get out of the decoder;-) - * The general usage is modelled after stdlib's ftell() and fseek(). - * Especially, the whence parameter for the seek functions has the same meaning - * as the one for fseek() and needs the same constants from stdlib.h: - * - * - SEEK_SET: set position to (or near to) specified offset - * - SEEK_CUR: change position by offset from now - * - SEEK_END: set position to offset from end - * - * Note that sample-accurate seek only works when gapless support has been - * enabled at compile time; seek is frame-accurate otherwise. - * Also, really sample-accurate seeking (meaning that you get the identical - * sample value after seeking compared to plain decoding up to the position) - * is only guaranteed when you do not mess with the position code by using - * #MPG123_UPSPEED, #MPG123_DOWNSPEED or #MPG123_START_FRAME. The first two mainly - * should cause trouble with NtoM resampling, but in any case with these options - * in effect, you have to keep in mind that the sample offset is not the same - * as counting the samples you get from decoding since mpg123 counts the skipped - * samples, too (or the samples played twice only once)! - * - * Short: When you care about the sample position, don't mess with those - * parameters;-) - * - * Streams may be openend in ways that do not support seeking. Also, consider - * the effect of #MPG123_FUZZY. - * - * @{ - */ - -/** Returns the current position in samples. - * On the next successful read, you'd get audio data with that offset. - * \param mh handle - * \return sample (PCM frame) offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tell(mpg123_handle *mh); - -/** Returns the frame number that the next read will give you data from. - * \param mh handle - * \return frame offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tellframe(mpg123_handle *mh); - -/** Returns the current byte offset in the input stream. - * \param mh handle - * \return byte offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tell_stream(mpg123_handle *mh); - -/** Seek to a desired sample offset. - * Usage is modelled afer the standard lseek(). - * \param mh handle - * \param sampleoff offset in samples (PCM frames) - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \return The resulting offset >= 0 or error/message code - */ -MPG123_EXPORT off_t mpg123_seek( mpg123_handle *mh -, off_t sampleoff, int whence ); - -/** Seek to a desired sample offset in data feeding mode. - * This just prepares things to be right only if you ensure that the next chunk - * of input data will be from input_offset byte position. - * \param mh handle - * \param sampleoff offset in samples (PCM frames) - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \param input_offset The position it expects to be at the - * next time data is fed to mpg123_decode(). - * \return The resulting offset >= 0 or error/message code - */ -MPG123_EXPORT off_t mpg123_feedseek( mpg123_handle *mh -, off_t sampleoff, int whence, off_t *input_offset ); - -/** Seek to a desired MPEG frame offset. - * Usage is modelled afer the standard lseek(). - * \param mh handle - * \param frameoff offset in MPEG frames - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \return The resulting offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_seek_frame( mpg123_handle *mh -, off_t frameoff, int whence ); - -/** Return a MPEG frame offset corresponding to an offset in seconds. - * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only. - * \return frame offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec); - -/** Give access to the frame index table that is managed for seeking. - * You are asked not to modify the values... Use mpg123_set_index to set the - * seek index - * \param mh handle - * \param offsets pointer to the index array - * \param step one index byte offset advances this many MPEG frames - * \param fill number of recorded index offsets; size of the array - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_index( mpg123_handle *mh -, off_t **offsets, off_t *step, size_t *fill ); - -/** Set the frame index table - * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets - * to NULL and fill to 0 will clear the index and free the allocated memory used by the index. - * \param mh handle - * \param offsets pointer to the index array - * \param step one index byte offset advances this many MPEG frames - * \param fill number of recorded index offsets; size of the array - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_set_index( mpg123_handle *mh -, off_t *offsets, off_t step, size_t fill ); - -/** An old crutch to keep old mpg123 binaries happy. - * WARNING: This function is there only to avoid runtime linking errors with - * standalone mpg123 before version 1.23.0 (if you strangely update the - * library but not the end-user program) and actually is broken - * for various cases (p.ex. 24 bit output). Do never use. It might eventually - * be purged from the library. - */ -MPG123_EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left); - -/*@}*/ - - -/** \defgroup mpg123_voleq mpg123 volume and equalizer - * - * @{ - */ - -/** another channel enumeration, for left/right choice */ -enum mpg123_channels -{ - MPG123_LEFT=0x1 /**< The Left Channel. */ - ,MPG123_RIGHT=0x2 /**< The Right Channel. */ - ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */ -}; - -/** Set the 32 Band Audio Equalizer settings. - * \param mh handle - * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both. - * \param band The equaliser band to change (from 0 to 31) - * \param val The (linear) adjustment factor. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_eq( mpg123_handle *mh -, enum mpg123_channels channel, int band, double val ); - -/** Get the 32 Band Audio Equalizer settings. - * \param mh handle - * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. - * \param band The equaliser band to change (from 0 to 31) - * \return The (linear) adjustment factor (zero for pad parameters) */ -MPG123_EXPORT double mpg123_geteq(mpg123_handle *mh - , enum mpg123_channels channel, int band); - -/** Reset the 32 Band Audio Equalizer settings to flat - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_reset_eq(mpg123_handle *mh); - -/** Set the absolute output volume including the RVA setting, - * vol<0 just applies (a possibly changed) RVA setting. - * \param mh handle - * \param vol volume value (linear factor) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_volume(mpg123_handle *mh, double vol); - -/** Adjust output volume including the RVA setting by chosen amount - * \param mh handle - * \param change volume value (linear factor increment) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_volume_change(mpg123_handle *mh, double change); - -/** Return current volume setting, the actual value due to RVA, and the RVA - * adjustment itself. It's all as double float value to abstract the sample - * format. The volume values are linear factors / amplitudes (not percent) - * and the RVA value is in decibels. - * \param mh handle - * \param base return address for base volume (linear factor) - * \param really return address for actual volume (linear factor) - * \param rva_db return address for RVA value (decibels) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db); - -/* TODO: Set some preamp in addition / to replace internal RVA handling? */ - -/*@}*/ - - -/** \defgroup mpg123_status mpg123 status and information - * - * @{ - */ - -/** Enumeration of the mode types of Variable Bitrate */ -enum mpg123_vbr { - MPG123_CBR=0, /**< Constant Bitrate Mode (default) */ - MPG123_VBR, /**< Variable Bitrate Mode */ - MPG123_ABR /**< Average Bitrate Mode */ -}; - -/** Enumeration of the MPEG Versions */ -enum mpg123_version { - MPG123_1_0=0, /**< MPEG Version 1.0 */ - MPG123_2_0, /**< MPEG Version 2.0 */ - MPG123_2_5 /**< MPEG Version 2.5 */ -}; - - -/** Enumeration of the MPEG Audio mode. - * Only the mono mode has 1 channel, the others have 2 channels. */ -enum mpg123_mode { - MPG123_M_STEREO=0, /**< Standard Stereo. */ - MPG123_M_JOINT, /**< Joint Stereo. */ - MPG123_M_DUAL, /**< Dual Channel. */ - MPG123_M_MONO /**< Single Channel. */ -}; - - -/** Enumeration of the MPEG Audio flag bits */ -enum mpg123_flags { - MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */ - MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */ - MPG123_PRIVATE=0x4, /**< The private bit has been set. */ - MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */ -}; - -/** Data structure for storing information about a frame of MPEG Audio */ -struct mpg123_frameinfo -{ - enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */ - int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ - long rate; /**< The sampling rate in Hz. */ - enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */ - int mode_ext; /**< The mode extension bit flag. */ - int framesize; /**< The size of the frame (in bytes, including header). */ - enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */ - int emphasis; /**< The emphasis type. */ - int bitrate; /**< Bitrate of the frame (kbps). */ - int abr_rate; /**< The target average bitrate. */ - enum mpg123_vbr vbr; /**< The VBR mode. */ -}; - -/** Data structure for even more detailed information out of the decoder, - * for MPEG layer III only. - * This was added to support the frame analyzer by the Lame project and - * just follows what was used there before. You know what the fields mean - * if you want use this structure. */ -struct mpg123_moreinfo -{ - double xr[2][2][576]; - double sfb[2][2][22]; /* [2][2][SBMAX_l] */ - double sfb_s[2][2][3*13]; /* [2][2][3*SBMAX_s] */ - int qss[2][2]; - int big_values[2][2]; - int sub_gain[2][2][3]; - int scalefac_scale[2][2]; - int preflag[2][2]; - int blocktype[2][2]; - int mixed[2][2]; - int mainbits[2][2]; - int sfbits[2][2]; - int scfsi[2]; - int maindata; - int padding; -}; - -/** Get frame information about the MPEG audio bitstream and store it in a mpg123_frameinfo structure. - * \param mh handle - * \param mi address of existing frameinfo structure to write to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi); - -/** Trigger collection of additional decoder information while decoding. - * \param mh handle - * \param mi pointer to data storage (NULL to disable collection) - * \return MPG123_OK if the collection was enabled/disabled as desired, MPG123_ERR - * otherwise (e.g. if the feature is disabled) - */ -MPG123_EXPORT int mpg123_set_moreinfo( mpg123_handle *mh -, struct mpg123_moreinfo *mi ); - -/** Get the safe output buffer size for all cases - * (when you want to replace the internal buffer) - * \return safe buffer size - */ -MPG123_EXPORT size_t mpg123_safe_buffer(void); - -/** Make a full parsing scan of each frame in the file. ID3 tags are found. An - * accurate length value is stored. Seek index will be filled. A seek back to - * current position is performed. At all, this function refuses work when - * stream is not seekable. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_scan(mpg123_handle *mh); - -/** Return, if possible, the full (expected) length of current track in - * MPEG frames. - * \param mh handle - * \return length >= 0 or MPG123_ERR if there is no length guess possible. - */ -MPG123_EXPORT off_t mpg123_framelength(mpg123_handle *mh); - -/** Return, if possible, the full (expected) length of current - * track in samples (PCM frames). - * - * This relies either on an Info frame at the beginning or a previous - * call to mpg123_scan() to get the real number of MPEG frames in a - * file. It will guess based on file size if neither Info frame nor - * scan data are present. In any case, there is no guarantee that the - * decoder will not give you more data, for example in case the open - * file gets appended to during decoding. - * \param mh handle - * \return length >= 0 or MPG123_ERR if there is no length guess possible. - */ -MPG123_EXPORT off_t mpg123_length(mpg123_handle *mh); - -/** Override the value for file size in bytes. - * Useful for getting sensible track length values in feed mode or for HTTP streams. - * \param mh handle - * \param size file size in bytes - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size); - -/** Get MPEG frame duration in seconds. - * \param mh handle - * \return frame duration in seconds, <0 on error - */ -MPG123_EXPORT double mpg123_tpf(mpg123_handle *mh); - -/** Get MPEG frame duration in samples. - * \param mh handle - * \return samples per frame for the most recently parsed frame; <0 on errors - */ -MPG123_EXPORT int mpg123_spf(mpg123_handle *mh); - -/** Get and reset the clip count. - * \param mh handle - * \return count of clipped samples - */ -MPG123_EXPORT long mpg123_clip(mpg123_handle *mh); - - -/** The key values for state information from mpg123_getstate(). */ -enum mpg123_state -{ - MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true). */ - ,MPG123_BUFFERFILL /**< Get fill of internal (feed) input buffer as integer byte count returned as long and as double. An error is returned on integer overflow while converting to (signed) long, but the returned floating point value shold still be fine. */ - ,MPG123_FRANKENSTEIN /**< Stream consists of carelessly stitched together files. Seeking may yield unexpected results (also with MPG123_ACCURATE, it may be confused). */ - ,MPG123_FRESH_DECODER /**< Decoder structure has been updated, possibly indicating changed stream (integer value, 0 if false, 1 if true). Flag is cleared after retrieval. */ - ,MPG123_ENC_DELAY /** Encoder delay read from Info tag (layer III, -1 if unknown). */ - ,MPG123_ENC_PADDING /** Encoder padding read from Info tag (layer III, -1 if unknown). */ - ,MPG123_DEC_DELAY /** Decoder delay (for layer III only, -1 otherwise). */ -}; - -/** Get various current decoder/stream state information. - * \param mh handle - * \param key the key to identify the information to give. - * \param val the address to return (long) integer values to - * \param fval the address to return floating point values to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getstate( mpg123_handle *mh -, enum mpg123_state key, long *val, double *fval ); - -/*@}*/ - - -/** \defgroup mpg123_metadata mpg123 metadata handling - * - * Functions to retrieve the metadata from MPEG Audio files and streams. - * Also includes string handling functions. - * - * @{ - */ - -/** Data structure for storing strings in a safer way than a standard C-String. - * Can also hold a number of null-terminated strings. */ -typedef struct -{ - char* p; /**< pointer to the string data */ - size_t size; /**< raw number of bytes allocated */ - size_t fill; /**< number of used bytes (including closing zero byte) */ -} mpg123_string; - -/** Allocate and intialize a new string. - * \param val optional initial string value (can be NULL) - */ -MPG123_EXPORT mpg123_string* mpg123_new_string(const char* val); - -/** Free memory of contents and the string structure itself. - * \param sb string handle - */ -MPG123_EXPORT void mpg123_delete_string(mpg123_string* sb); - -/** Initialize an existing mpg123_string structure to {NULL, 0, 0}. - * If you hand in a NULL pointer here, your program should crash. The other - * string functions are more forgiving, but this one here is too basic. - * \param sb string handle (address of existing structure on your side) - */ -MPG123_EXPORT void mpg123_init_string(mpg123_string* sb); - -/** Free-up memory of the contents of an mpg123_string (not the struct itself). - * This also calls mpg123_init_string() and hence is safe to be called - * repeatedly. - * \param sb string handle - */ -MPG123_EXPORT void mpg123_free_string(mpg123_string* sb); - -/** Change the size of a mpg123_string - * \param sb string handle - * \param news new size in bytes - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news); - -/** Increase size of a mpg123_string if necessary (it may stay larger). - * Note that the functions for adding and setting in current libmpg123 - * use this instead of mpg123_resize_string(). - * That way, you can preallocate memory and safely work afterwards with - * pieces. - * \param sb string handle - * \param news new minimum size - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news); - -/** Copy the contents of one mpg123_string string to another. - * Yes the order of arguments is reversed compated to memcpy(). - * \param from string handle - * \param to string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to); - -/** Move the contents of one mpg123_string string to another. - * This frees any memory associated with the target and moves over the - * pointers from the source, leaving the source without content after - * that. The only possible error is that you hand in NULL pointers. - * If you handed in a valid source, its contents will be gone, even if - * there was no target to move to. If you hand in a valid target, its - * original contents will also always be gone, to be replaced with the - * source's contents if there was some. - * \param from source string handle - * \param to target string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_move_string(mpg123_string* from, mpg123_string* to); - -/** Append a C-String to an mpg123_string - * \param sb string handle - * \param stuff to append - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff); - -/** Append a C-substring to an mpg123 string - * \param sb string handle - * \param stuff content to copy - * \param from offset to copy from - * \param count number of characters to copy (a null-byte is always appended) - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_add_substring( mpg123_string *sb -, const char *stuff, size_t from, size_t count ); - -/** Set the content of a mpg123_string to a C-string - * \param sb string handle - * \param stuff content to copy - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff); - -/** Set the content of a mpg123_string to a C-substring - * \param sb string handle - * \param stuff the future content - * \param from offset to copy from - * \param count number of characters to copy (a null-byte is always appended) - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_set_substring( mpg123_string *sb -, const char *stuff, size_t from, size_t count ); - -/** Count characters in a mpg123 string (non-null bytes or Unicode points). - * This function is of limited use, as it does just count code points - * encoded in an UTF-8 string, only loosely related to the count of visible - * characters. Get your full Unicode handling support elsewhere. - * \param sb string handle - * \param utf8 a flag to tell if the string is in utf8 encoding - * \return character count -*/ -MPG123_EXPORT size_t mpg123_strlen(mpg123_string *sb, int utf8); - -/** Remove trailing \\r and \\n, if present. - * \param sb string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_chomp_string(mpg123_string *sb); - -/** Determine if two strings contain the same data. - * This only returns 1 if both given handles are non-NULL and - * if they are filled with the same bytes. - * \param a first string handle - * \param b second string handle - * \return 0 for different strings, 1 for identical - */ -MPG123_EXPORT int mpg123_same_string(mpg123_string *a, mpg123_string *b); - -/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */ -enum mpg123_text_encoding -{ - mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */ - ,mpg123_text_utf8 = 1 /**< UTF-8 */ - ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */ - ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */ - ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */ - ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules. - * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when - * you don't mess with the reserved code points. If you want to decode little endian data - * without BOM you need to prepend 0xff 0xfe yourself. */ - ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */ - ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality, - * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123 - * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16 - * types (we expect a BOM before real data there), not so for utf16be!*/ - ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */ -}; - -/** The encoding byte values from ID3v2. */ -enum mpg123_id3_enc -{ - mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */ - ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */ - ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */ - ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */ - ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */ -}; - -/** Convert ID3 encoding byte to mpg123 encoding index. - * \param id3_enc_byte the ID3 encoding code - * \return the mpg123 encoding index - */ - -MPG123_EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte); - -/** Store text data in string, after converting to UTF-8 from indicated encoding - * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). - * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). - * \param sb target string - * \param enc mpg123 text encoding value - * \param source source buffer with plain unsigned bytes (you might need to cast from signed char) - * \param source_size number of bytes in the source buffer - * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) - */ -MPG123_EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size); - -/** Sub data structure for ID3v2, for storing various text fields (including comments). - * This is for ID3v2 COMM, TXXX and all the other text fields. - * Only COMM, TXXX and USLT may have a description, only COMM and USLT - * have a language. - * You should consult the ID3v2 specification for the use of the various text fields - * ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */ -typedef struct -{ - char lang[3]; /**< Three-letter language code (not terminated). */ - char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */ - mpg123_string description; /**< Empty for the generic comment... */ - mpg123_string text; /**< ... */ -} mpg123_text; - -/** The picture type values from ID3v2. */ -enum mpg123_id3_pic_type -{ - mpg123_id3_pic_other = 0 /**< see ID3v2 docs */ - ,mpg123_id3_pic_icon = 1 /**< see ID3v2 docs */ - ,mpg123_id3_pic_other_icon = 2 /**< see ID3v2 docs */ - ,mpg123_id3_pic_front_cover = 3 /**< see ID3v2 docs */ - ,mpg123_id3_pic_back_cover = 4 /**< see ID3v2 docs */ - ,mpg123_id3_pic_leaflet = 5 /**< see ID3v2 docs */ - ,mpg123_id3_pic_media = 6 /**< see ID3v2 docs */ - ,mpg123_id3_pic_lead = 7 /**< see ID3v2 docs */ - ,mpg123_id3_pic_artist = 8 /**< see ID3v2 docs */ - ,mpg123_id3_pic_conductor = 9 /**< see ID3v2 docs */ - ,mpg123_id3_pic_orchestra = 10 /**< see ID3v2 docs */ - ,mpg123_id3_pic_composer = 11 /**< see ID3v2 docs */ - ,mpg123_id3_pic_lyricist = 12 /**< see ID3v2 docs */ - ,mpg123_id3_pic_location = 13 /**< see ID3v2 docs */ - ,mpg123_id3_pic_recording = 14 /**< see ID3v2 docs */ - ,mpg123_id3_pic_performance = 15 /**< see ID3v2 docs */ - ,mpg123_id3_pic_video = 16 /**< see ID3v2 docs */ - ,mpg123_id3_pic_fish = 17 /**< see ID3v2 docs */ - ,mpg123_id3_pic_illustration = 18 /**< see ID3v2 docs */ - ,mpg123_id3_pic_artist_logo = 19 /**< see ID3v2 docs */ - ,mpg123_id3_pic_publisher_logo = 20 /**< see ID3v2 docs */ -}; - -/** Sub data structure for ID3v2, for storing picture data including comment. - * This is for the ID3v2 APIC field. You should consult the ID3v2 specification - * for the use of the APIC field ("frames" in ID3v2 documentation, I use "fields" - * here to separate from MPEG frames). */ -typedef struct -{ - char type; /**< mpg123_id3_pic_type value */ - mpg123_string description; /**< description string */ - mpg123_string mime_type; /**< MIME type */ - size_t size; /**< size in bytes */ - unsigned char* data; /**< pointer to the image data */ -} mpg123_picture; - -/** Data structure for storing IDV3v2 tags. - * This structure is not a direct binary mapping with the file contents. - * The ID3v2 text frames are allowed to contain multiple strings. - * So check for null bytes until you reach the mpg123_string fill. - * All text is encoded in UTF-8. */ -typedef struct -{ - unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */ - mpg123_string *title; /**< Title string (pointer into text_list). */ - mpg123_string *artist; /**< Artist string (pointer into text_list). */ - mpg123_string *album; /**< Album string (pointer into text_list). */ - mpg123_string *year; /**< The year as a string (pointer into text_list). */ - mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */ - mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */ - /* Encountered ID3v2 fields are appended to these lists. - There can be multiple occurences, the pointers above always point to the last encountered data. */ - mpg123_text *comment_list; /**< Array of comments. */ - size_t comments; /**< Number of comments. */ - mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */ - size_t texts; /**< Numer of text fields. */ - mpg123_text *extra; /**< The array of extra (TXXX) fields. */ - size_t extras; /**< Number of extra text (TXXX) fields. */ - mpg123_picture *picture; /**< Array of ID3v2 pictures fields (APIC). - Only populated if MPG123_PICTURE flag is set! */ - size_t pictures; /**< Number of picture (APIC) fields. */ -} mpg123_id3v2; - -/** Data structure for ID3v1 tags (the last 128 bytes of a file). - * Don't take anything for granted (like string termination)! - * Also note the change ID3v1.1 did: comment[28] = 0; comment[29] = track_number - * It is your task to support ID3v1 only or ID3v1.1 ...*/ -typedef struct -{ - char tag[3]; /**< Always the string "TAG", the classic intro. */ - char title[30]; /**< Title string. */ - char artist[30]; /**< Artist string. */ - char album[30]; /**< Album string. */ - char year[4]; /**< Year string. */ - char comment[30]; /**< Comment string. */ - unsigned char genre; /**< Genre index. */ -} mpg123_id3v1; - -#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */ -#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */ -#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/ -#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */ - -/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future). - * \param mh handle - * \return combination of flags, 0 on error (same as "nothing new") - */ -MPG123_EXPORT int mpg123_meta_check(mpg123_handle *mh); - -/** Clean up meta data storage (ID3v2 and ICY), freeing memory. - * \param mh handle - */ -MPG123_EXPORT void mpg123_meta_free(mpg123_handle *mh); - -/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call. - * v1 and/or v2 can be set to NULL when there is no corresponding data. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_id3( mpg123_handle *mh -, mpg123_id3v1 **v1, mpg123_id3v2 **v2 ); - -/** Return pointers to and size of stored raw ID3 data if storage has - * been configured with MPG123_RAW_ID3 and stream parsing passed the - * metadata already. Null value with zero size is a possibility! - * The storage can change at any next API call. - * \param v1 address to store pointer to v1 tag - * \param v1_size size of v1 data in bytes - * \param v2 address to store pointer to v2 tag - * \param v2_size size of v2 data in bytes - * \return MPG123_OK or MPG123_ERR. Only on MPG123_OK the output - * values are set. - */ -MPG123_EXPORT int mpg123_id3_raw( mpg123_handle *mh -, unsigned char **v1, size_t *v1_size -, unsigned char **v2, size_t *v2_size ); - -/** Point icy_meta to existing data structure wich may change on any next read/decode function call. - * \param mh handle - * \param icy_meta return address for ICY meta string (set to NULL if nothing there) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); - -/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8. - * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) . - * \param icy_text The input data in ICY encoding - * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */ -MPG123_EXPORT char* mpg123_icy2utf8(const char* icy_text); - - -/* @} */ - - -/** \defgroup mpg123_advpar mpg123 advanced parameter API - * - * Direct access to a parameter set without full handle around it. - * Possible uses: - * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE). - * - Use one set of parameters for multiple handles. - * - * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt() - * family) directly return a fully qualified mpg123 error code, the ones - * operating on full handles normally MPG123_OK or MPG123_ERR, storing the - * specific error code itseld inside the handle. - * - * @{ - */ - -/** Opaque structure for the libmpg123 decoder parameters. */ -struct mpg123_pars_struct; - -/** Opaque structure for the libmpg123 decoder parameters. */ -typedef struct mpg123_pars_struct mpg123_pars; - -/** Create a handle with preset parameters. - * \param mp parameter handle - * \param decoder decoder choice - * \param error error code return address - * \return mpg123 handle - */ -MPG123_EXPORT mpg123_handle *mpg123_parnew( mpg123_pars *mp -, const char* decoder, int *error ); - -/** Allocate memory for and return a pointer to a new mpg123_pars - * \param error error code return address - * \return new parameter handle - */ -MPG123_EXPORT mpg123_pars *mpg123_new_pars(int *error); - -/** Delete and free up memory used by a mpg123_pars data structure - * \param mp parameter handle - */ -MPG123_EXPORT void mpg123_delete_pars(mpg123_pars* mp); - -/** Configure mpg123 parameters to accept no output format at all, - * use before specifying supported formats with mpg123_format - * \param mp parameter handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_fmt_none(mpg123_pars *mp); - -/** Configure mpg123 parameters to accept all formats - * (also any custom rate you may set) -- this is default. - * \param mp parameter handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_fmt_all(mpg123_pars *mp); - -/** Set the audio format support of a mpg123_pars in detail: - * \param mp parameter handle - * \param rate The sample rate value (in Hertz). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no - * support). - * \return MPG123_OK on success -*/ -MPG123_EXPORT int mpg123_fmt(mpg123_pars *mp -, long rate, int channels, int encodings); - -/** Set the audio format support of a mpg123_pars in detail: - * \param mp parameter handle - * \param rate The sample rate value (in Hertz). Special value 0 means - * all rates (reason for this variant of mpg123_fmt). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no - * support). - * \return MPG123_OK on success -*/ -MPG123_EXPORT int mpg123_fmt2(mpg123_pars *mp -, long rate, int channels, int encodings); - -/** Check to see if a specific format at a specific rate is supported - * by mpg123_pars. - * \param mp parameter handle - * \param rate sampling rate - * \param encoding encoding - * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, - * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ -MPG123_EXPORT int mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding); - -/** Set a specific parameter, for a specific mpg123_pars, using a parameter - * type key chosen from the mpg123_parms enumeration, to the specified value. - * \param mp parameter handle - * \param type parameter choice - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_par( mpg123_pars *mp -, enum mpg123_parms type, long value, double fvalue ); - -/** Get a specific parameter, for a specific mpg123_pars. - * See the mpg123_parms enumeration for a list of available parameters. - * \param mp parameter handle - * \param type parameter choice - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getpar( mpg123_pars *mp -, enum mpg123_parms type, long *value, double *fvalue); - -/* @} */ - - -/** \defgroup mpg123_lowio mpg123 low level I/O - * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket... - * - * @{ */ - -/** Replace default internal buffer with user-supplied buffer. - * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio. - * Note that the required buffer size could be bigger than expected from output - * encoding if libmpg123 has to convert from primary decoder output (p.ex. 32 bit - * storage for 24 bit output). - * - * Note: The type of data changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param data pointer to user buffer - * \param size of buffer in bytes - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_buffer(mpg123_handle *mh -, void *data, size_t size); - -/** The max size of one frame's decoded output with current settings. - * Use that to determine an appropriate minimum buffer size for decoding one frame. - * \param mh handle - * \return maximum decoded data size in bytes - */ -MPG123_EXPORT size_t mpg123_outblock(mpg123_handle *mh); - -/** Replace low-level stream access functions; read and lseek as known in POSIX. - * You can use this to make any fancy file opening/closing yourself, - * using mpg123_open_fd() to set the file descriptor for your read/lseek - * (doesn't need to be a "real" file descriptor...). - * Setting a function to NULL means that the default internal read is - * used (active from next mpg123_open call on). - * Note: As it would be troublesome to mess with this while having a file open, - * this implies mpg123_close(). - * \param mh handle - * \param r_read callback for reading (behaviour like POSIX read) - * \param r_lseek callback for seeking (like POSIX lseek) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_reader( mpg123_handle *mh -, ssize_t (*r_read) (int, void *, size_t) -, off_t (*r_lseek)(int, off_t, int) -); - -/** Replace I/O functions with your own ones operating on some kind of - * handle instead of integer descriptors. - * The handle is a void pointer, so you can pass any data you want... - * mpg123_open_handle() is the call you make to use the I/O defined here. - * There is no fallback to internal read/seek here. - * Note: As it would be troublesome to mess with this while having a file open, - * this mpg123_close() is implied here. - * \param mh handle - * \param r_read callback for reading (behaviour like POSIX read) - * \param r_lseek callback for seeking (like POSIX lseek) - * \param cleanup A callback to clean up an I/O handle on mpg123_close, - * can be NULL for none (you take care of cleaning your handles). - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_reader_handle( mpg123_handle *mh -, ssize_t (*r_read) (void *, void *, size_t) -, off_t (*r_lseek)(void *, off_t, int) -, void (*cleanup)(void*) ); - -/* @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/win64/include/mpg123/out123.h b/win64/include/mpg123/out123.h new file mode 100644 index 00000000..bace3ce6 --- /dev/null +++ b/win64/include/mpg123/out123.h @@ -0,0 +1,734 @@ +/* + out123: audio output interface + + copyright 1995-2016 by the mpg123 project, + free software under the terms of the LGPL 2.1 + + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written as audio.h by Michael Hipp, reworked into out123 API + by Thomas Orgis +*/ + +#ifndef _OUT123_H_ +#define _OUT123_H_ + +/** \file out123.h The header file for the libout123 audio output facility. */ + +/* We only need size_t definition. */ +#include + +/* Common audio encoding specification, including a macro for getting + * size of encoded samples in bytes. Said macro is still hardcoded + * into out123_encsize(). Relying on this one may help an old program + * know sizes of encodings added to fmt123.h later on. + * If you don't care, just use the macro. + */ +#include + +/** A macro to check at compile time which set of API functions to expect. + * This should be incremented at least each time a new symbol is added + * to the header. + */ +#ifndef OUT123_API_VERSION +#define OUT123_API_VERSION 4 +#endif + +#ifndef MPG123_EXPORT +/** Defines needed for MS Visual Studio(tm) DLL builds. + * Every public function must be prefixed with MPG123_EXPORT. When building + * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible + * for clients and includes it in the import library which is created together + * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which + * imports the functions from the DLL. + */ +#ifdef BUILD_MPG123_DLL +/* The dll exports. */ +#define MPG123_EXPORT __declspec(dllexport) +#else +#ifdef LINK_MPG123_DLL +/* The exe imports. */ +#define MPG123_EXPORT __declspec(dllimport) +#else +/* Nothing on normal/UNIX builds */ +#define MPG123_EXPORT +#endif +#endif +#endif + +/* Earlier versions of libout123 put enums into public API calls, + * thich is not exactly safe. There are ABI rules, but you can use + * compiler switches to change the sizes of enums. It is safer not + * to have them in API calls. Thus, the default is to remap calls and + * structs to variants that use plain ints. Define MPG123_ENUM_API to + * prevent that remapping. + * + * You might want to define this to increase the chance of your binary + * working with an older version of the library. But if that is your goal, + * you should better build with an older version to begin with. + */ +#ifndef MPG123_ENUM_API + +#define out123_param out123_param2 +#define out123_getparam out123_getparam2 + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup out123_api out123 library API + * This is out123, a library focused on continuous playback of audio streams + * via various platform-specific output methods. It glosses over details of + * the native APIs to give an interface close to simply writing data to a + * file. There might be the option to tune details like buffer (period) sizes + * and the number of them on the device side in future, but the focus of the + * library is to ease the use case of just getting that raw audio data out + * there, without interruptions. + * + * The basic idea is to create a handle with out123_new() and open a certain + * output device (using a certain driver module, possibly build-time defaults) + * with out123_open(). Now, you can query the output device for supported + * encodings for given rate and channel count with out123_get_encodings() and + * decide what to use for actually starting playback with out123_start(). + * + * Then, you just need to provide (interleaved pcm) data for playback with + * out123_play(), which will block when the device's buffers are full. You get + * your timing from that (instead of callbacks). If your program does the + * production of the audio data just a little bit faster than the playback, + * causing out123_play() to block ever so briefly, you're fine. + * + * You stop playback with out123_stop(), or just close the device and driver + * via out123_close(), or even just decide to drop it all and do out123_del() + * right away when you're done. + * + * There are other functions for specific needs, but the basic idea should be + * covered by the above. + * + * Note that the driver modules that bind to the operating system API for + * output might impose restrictions on what you can safely do regarding your + * out123_handle and multiple threads or processes. You should be on the safe + * side ensuring that you confine usage of a handle to a single thread instead + * of passing it around. + @{ + */ + +/** Opaque structure for the libout123 handle. */ +struct out123_struct; +/** Typedef shortcut as preferrend name for the handle type. */ +typedef struct out123_struct out123_handle; + +/** Enumeration of codes for the parameters that it is possible to set/get. */ +enum out123_parms +{ + OUT123_FLAGS = 1 /**< integer, various flags, see enum #out123_flags */ +, OUT123_PRELOAD /**< float, fraction of buffer to fill before playback */ +, OUT123_GAIN /**< integer, output device gain (module-specific) */ +, OUT123_VERBOSE /**< integer, verbosity to stderr, >= 0 */ +, OUT123_DEVICEBUFFER /**< + * float, length of device buffer in seconds; + * This might be ignored, might have only a loose relation to actual + * buffer sizes and latency, depending on output driver. Try to tune + * this before opening a device if you want to influcence latency or reduce + * dropouts. Value <= 0 uses some default, usually favouring stable playback + * over low latency. Values above 0.5 are probably too much. + */ +, OUT123_PROPFLAGS /**< integer, query driver/device property flags (r/o) */ +, OUT123_NAME /**< string, name of this instance (NULL restores default); + * The value returned by out123_getparam() might be different if the audio + * backend changed it (to be unique among clients, p.ex.). + * TODO: The name provided here is used as prefix in diagnostic messages. */ +, OUT123_BINDIR /**< string, path to a program binary directory to use + * as starting point in the search for the output module directory + * (e.g. ../lib/mpg123 or ./plugins). The environment variable MPG123_MODDIR + * is always tried first and the in-built installation path last. + */ +, OUT123_ADD_FLAGS /**< enable given flags */ +, OUT123_REMOVE_FLAGS /**< disable diven flags */ +}; + +/** Flags to tune out123 behaviour */ +enum out123_flags +{ + OUT123_HEADPHONES = 0x01 /**< output to headphones (if supported) */ +, OUT123_INTERNAL_SPEAKER = 0x02 /**< output to speaker (if supported) */ +, OUT123_LINE_OUT = 0x04 /**< output to line out (if supported) */ +, OUT123_QUIET = 0x08 /**< no printouts to standard error */ +, OUT123_KEEP_PLAYING = 0x10 /**< + * When this is set (default), playback continues in a loop when the device + * does not consume all given data at once. This happens when encountering + * signals (like SIGSTOP, SIGCONT) that cause interruption of the underlying + * functions. + * Note that this flag is meaningless when the optional buffer is employed, + * There, your program will always block until the buffer completely took + * over the data given to it via out123_play(), unless a communication error + * arises. + */ +, OUT123_MUTE = 0x20 /**< software mute (play silent audio) */ +}; + +/** Read-only output driver/device property flags (OUT123_PROPFLAGS). */ +enum out123_propflags +{ + OUT123_PROP_LIVE = 0x01 /**< This is a live output, meaning that + * special care might be needed for pauses in playback (p.ex. stream + * of silence instead of interruption), as opposed to files on disk. + */ +, OUT123_PROP_PERSISTENT = 0x02 /**< This (live) output does not need + * special care for pauses (continues with silence itself), + * out123_pause() does nothing to the device. + */ +}; + +/** Create a new output handle. + * This only allocates and initializes memory, so the only possible + * error condition is running out of memory. + * \return pointer to new handle or NULL on error + */ +MPG123_EXPORT +out123_handle *out123_new(void); + +/** Delete output handle. + * This implies out123_close(). + */ +MPG123_EXPORT +void out123_del(out123_handle *ao); + +/** Free plain memory allocated within libout123. + * This is for library users that are not sure to use the same underlying + * memory allocator as libout123. It is just a wrapper over free() in + * the underlying C library. + */ +MPG123_EXPORT void out123_free(void *ptr); + +/** Error code enumeration + * API calls return a useful (positve) value or zero (OUT123_OK) on simple + * success. A negative value (-1 == OUT123_ERR) usually indicates that some + * error occured. Which one, that can be queried using out123_errcode() + * and friends. + */ +enum out123_error +{ + OUT123_ERR = -1 /**< generic alias for verbosity, always == -1 */ +, OUT123_OK = 0 /**< just a name for zero, not going to change */ +, OUT123_DOOM /**< dazzled, out of memory */ +, OUT123_BAD_DRIVER_NAME /**< bad driver name given */ +, OUT123_BAD_DRIVER /**< unspecified issue loading a driver */ +, OUT123_NO_DRIVER /**< no driver loaded */ +, OUT123_NOT_LIVE /**< no active audio device */ +, OUT123_DEV_PLAY /**< some device playback error */ +, OUT123_DEV_OPEN /**< error opening device */ +, OUT123_BUFFER_ERROR /**< + * Some (really unexpected) error in buffer infrastructure. + */ +, OUT123_MODULE_ERROR /**< basic failure in module loading */ +, OUT123_ARG_ERROR /**< some bad function arguments supplied */ +, OUT123_BAD_PARAM /**< unknown parameter code */ +, OUT123_SET_RO_PARAM /**< attempt to set read-only parameter */ +, OUT123_BAD_HANDLE /**< bad handle pointer (NULL, usually) */ +, OUT123_NOT_SUPPORTED /**< some requested operation is not supported (right now) */ +, OUT123_DEV_ENUMERATE /**< device enumeration itself failed */ +, OUT123_ERRCOUNT /**< placeholder for shaping arrays */ +}; + +/** Get string representation of last encountered error in the + * context of given handle. + * \param ao handle + * \return error string + */ +MPG123_EXPORT +const char* out123_strerror(out123_handle *ao); + +/** Get the plain errcode intead of a string. + * Note that this used to return OUT123_ERR instead of + * OUT123_BAD_HANDLE in case of ao==NULL before mpg123-1.23.5 . + * \param ao handle + * \return error code recorded in handle or OUT123_BAD_HANDLE + */ +MPG123_EXPORT +int out123_errcode(out123_handle *ao); + +/** Return the error string for a given error code. + * \param errcode the integer error code + * \return error string + */ +MPG123_EXPORT +const char* out123_plain_strerror(int errcode); + +/** Set a desired output buffer size. + * This starts a separate process that handles the audio output, decoupling + * the latter from the main process with a memory buffer and saving you the + * burden to ensure sparing CPU cycles for actual playback. + * This is for applicatons that prefer continuous playback over small latency. + * In other words: The kind of applications that out123 is designed for. + * This routine always kills off any currently active audio output module / + * device, even if you just disable the buffer when there is no buffer. + * + * Keep this in mind for memory-constrainted systems: Activating the + * buffer causes a fork of the calling process, doubling the virtual memory + * use. Depending on your operating system kernel's behaviour regarding + * memory overcommit, it might be wise to call out123_set_buffer() very + * early in your program before allocating lots of memory. + * + * There _might_ be a change to threads in future, but for now this is + * classic fork with shared memory, working without any threading library. + * If your platform or build does not support that, you will always get an + * error on trying to set up a non-zero buffer (but the API call will be + * present). + * + * Also, if you do intend to use this from a multithreaded program, think + * twice and make sure that your setup is happy with forking full-blown + * processes off threaded programs. Probably you are better off spawning a + * buffer thread yourself. + * + * \param ao handle + * \param buffer_bytes size (bytes) of a memory buffer for decoded audio, + * a value of zero disables the buffer. + * \return 0 on success, OUT123_ERR on error + */ +MPG123_EXPORT +int out123_set_buffer(out123_handle *ao, size_t buffer_bytes); + +#ifdef MPG123_ENUM_API +/** Set a parameter on a out123_handle. + * + * Note that this name is mapped to out123_param2() instead unless + * MPG123_ENUM_API is defined. + * + * The parameters usually only change what happens on next out123_open, not + * incfluencing running operation. There are macros To ease the API a bit: + * You can call out123_param_int(ao, code, value) for integer (long) values, + * same with out123_param_float() and out123_param_string(). + * + * \param ao handle + * \param code parameter code + * \param value input value for integer parameters + * \param fvalue input value for floating point parameters + * \param svalue input value for string parameters (contens are copied) + * \return 0 on success, OUT123_ERR on error. + */ +MPG123_EXPORT +int out123_param( out123_handle *ao, enum out123_parms code +, long value, double fvalue, const char *svalue ); +#endif + +/** Set a parameter on a out123_handle. No enum. + * + * This is actually called instead of out123_param() + * unless MPG123_ENUM_API is defined. + * + * The parameters usually only change what happens on next out123_open, not + * incfluencing running operation. There are macros To ease the API a bit: + * You can call out123_param_int(ao, code, value) for integer (long) values, + * same with out123_param_float() and out123_param_string(). + * + * \param ao handle + * \param code parameter code (from enum #out123_parms) + * \param value input value for integer parameters + * \param fvalue input value for floating point parameters + * \param svalue input value for string parameters (contens are copied) + * \return 0 on success, OUT123_ERR on error. + */ +MPG123_EXPORT +int out123_param2( out123_handle *ao, int code +, long value, double fvalue, const char *svalue ); + + +/** Shortcut for out123_param() to set an integer parameter. */ +#define out123_param_int(ao, code, value) \ + out123_param((ao), (code), (value), 0., NULL) +/** Shortcut for out123_param() to set a float parameter. */ +#define out123_param_float(ao, code, value) \ + out123_param((ao), (code), 0, (value), NULL) +/** Shortcut for out123_param() to set an string parameter. */ +#define out123_param_string(ao, code, value) \ + out123_param((ao), (code), 0, 0., (value)) + +#ifdef MPG123_ENUM_API +/** Get a parameter from an out123_handle. + * + * Note that this name is mapped to out123_param2() instead unless + * MPG123_ENUM_API is defined. + * + * \param ao handle + * \param code parameter code + * \param ret_value output address for integer parameters + * \param ret_fvalue output address for floating point parameters + * \param ret_svalue output address for string parameters (pointer to + * internal memory, so no messing around, please) + * \return 0 on success, OUT123_ERR on error (bad parameter name or bad handle). + */ +MPG123_EXPORT +int out123_getparam( out123_handle *ao, enum out123_parms code +, long *ret_value, double *ret_fvalue, char* *ret_svalue ); +#endif + +/** Get a parameter from an out123_handle. No enum. + * + * This is actually called instead of out123_getparam() + * unless MPG123_ENUM_API is defined. + * + * \param ao handle + * \param code parameter code (from enum #out123_parms) + * \param ret_value output address for integer parameters + * \param ret_fvalue output address for floating point parameters + * \param ret_svalue output address for string parameters (pointer to + * internal memory, so no messing around, please) + * \return 0 on success, OUT123_ERR on error (bad parameter name or bad handle). + */ +MPG123_EXPORT +int out123_getparam2( out123_handle *ao, int code +, long *ret_value, double *ret_fvalue, char* *ret_svalue ); + +/** Shortcut for out123_getparam() to get an integer parameter. */ +#define out123_getparam_int(ao, code, value) \ + out123_getparam((ao), (code), (value), NULL, NULL) +/** Shortcut for out123_getparam() to get a float parameter. */ +#define out123_getparam_float(ao, code, value) \ + out123_getparam((ao), (code), NULL, (value), NULL) +/** Shortcut for out123_getparam() to get a string parameter. */ +#define out123_getparam_string(ao, code, value) \ + out123_getparam((ao), (code), NULL, NULL, (value)) + +/** Copy parameters from another out123_handle. + * \param ao handle + * \param from_ao the handle to copy parameters from + * \return 0 in success, -1 on error + */ +MPG123_EXPORT +int out123_param_from(out123_handle *ao, out123_handle* from_ao); + +/** Get list of driver modules reachable in system in C argv-style format. + * + * The client is responsible for freeing the memory of both the individual + * strings and the lists themselves. There is out123_stringlists_free() + * to assist. + * + * A module that is not loadable because of missing libraries is simply + * skipped. You will get stderr messages about that unless OUT123_QUIET was + * was set, though. Failure to open the module directory is a serious error, + * resulting in negative return value. + * + * \param ao handle + * \param names address for storing list of names + * \param descr address for storing list of descriptions + * \return number of drivers found, -1 on error + */ +MPG123_EXPORT +int out123_drivers(out123_handle *ao, char ***names, char ***descr); + +/** Get a list of available output devices for a given driver. + * + * If the driver supports enumeration, you can get a listing of possible + * output devices. If this list is exhaustive, depends on the driver. + * Note that this implies out123_close(). When you have a device already + * open, you don't need to look for one anymore. If you really do, just + * create another handle. + * + * Your provided pointers are only used for non-negative return values. + * In this case, you are responsible for freeing the associated memory of + * the strings and the lists themselves. The format of the lists is an + * array of char pointers, with the returned count just like the usual + * C argv and argc. There is out123_stringlists_free() to assist. + * + * Note: Calling this on a handle with a configured buffer process will + * yield #OUT123_NOT_SUPPORTED. + * + * \param ao handle + * \param driver driver name or comma-separated list of names + * to try, just like for out123_open(), possibly NULL for some default + * \param names address for storing list of names + * \param descr address for storing list of descriptions + * \param active_driver address for storing a copy of the actually active + * driver name (in case you gave a list or NULL as driver), can be NULL + * if not interesting + * \return count of devices or #OUT123_ERR if some error was encountered, + * possibly just #OUT123_NOT_SUPPORTED if the driver lacks enumeration support + */ +MPG123_EXPORT +int out123_devices( out123_handle *ao, const char *driver +, char ***names, char ***descr, char **active_driver ); + +/** Helper to free string list memory. + * + * This aids in freeing the memory allocated by out123_devices() and + * out123_drivers(). + * + * Any of the given lists can be NULL and nothing will happen to it. + * + * \param name first string list + * \param descr second string list + * \param count count of strings + */ +MPG123_EXPORT +void out123_stringlists_free(char **name, char **descr, int count); + + +/** Open an output device with a certain driver + * Note: Opening means that the driver code is loaded and the desired + * device name recorded, possibly tested for availability or tentatively + * opened. After out123_open(), you can ask for supported encodings + * and then really open the device for playback with out123_start(). + * \param ao handle + * \param driver (comma-separated list of) output driver name(s to try), + * NULL for default + * \param device device name to open, NULL for default + * (stdout for file-based drivers) + * \return 0 on success, -1 on error. + */ +MPG123_EXPORT +int out123_open(out123_handle *ao, const char* driver, const char* device); + +/** Give info about currently loaded driver and device + * Any of the return addresses can be NULL if you are not interested in + * everything. You get pointers to internal storage. They are valid + * as long as the driver/device combination is opened. + * The device may be NULL indicating some unnamed default. + * TODO: Make the driver modules return names for such defaults. + * \param ao handle + * \param driver return address for driver name + * \param device return address for device name + * \return 0 on success, -1 on error (i.e. no driver loaded) + */ +MPG123_EXPORT +int out123_driver_info(out123_handle *ao, char **driver, char **device); + +/** Close the current output device and driver. + * This implies out123_drain() to ensure no data is lost. + * With a buffer, that might cause considerable delay during + * which your main application is blocked waiting. + * Call out123_drop() beforehand if you want to end things + * quickly. + * \param ao handle + */ +MPG123_EXPORT +void out123_close(out123_handle *ao); + +/** Get supported audio encodings for given rate and channel count, + * for the currently openend audio device. + * Usually, a wider range of rates is supported, but the number + * of sample encodings is limited, as is the number of channels. + * So you can call this with some standard rate and hope that the + * returned encodings work also for others, with the tested channel + * count. + * The return value of -1 on some encountered error conveniently also + * does not match any defined format (only 15 bits used for encodings, + * so this would even work with 16 bit integers). + * This implies out123_stop() to enter query mode. + * \param ao handle + * \param rate sampling rate + * \param channels number of channels + * \return supported encodings combined with bitwise or, to be checked + * against your favourite bitmask, -1 on error + */ +MPG123_EXPORT +int out123_encodings(out123_handle *ao, long rate, int channels); + +/** Return the size (in bytes) of one mono sample of the named encoding. + * \param encoding The encoding value to analyze. + * \return positive size of encoding in bytes, 0 on invalid encoding. */ +MPG123_EXPORT int out123_encsize(int encoding); + +/** Get list of supported formats for currently opened audio device. + * Given a list of sampling rates and minimal/maximal channel count, + * this quickly checks what formats are supported with these + * constraints. The first entry is always reserved for a default + * format for the output device. If there is no such default, + * all values of the format are -1. + * For each requested combination of rate and channels, a format entry is + * created, possible with encoding value 0 to indicate that this combination + * has been tested and rejected. So, when there is no basic error, the + * number of returned format entries should be + * (ratecount*(maxchannels-minchannels+1)+1) + * . But instead of forcing you to guess, this will be allocated by + * successful run. + * For the first entry, the encoding member is supposed to be a definite + * encoding, for the others it is a bitwise combination of all possible + * encodings. + * This function is more efficient than many calls to out123_encodings(). + * \param ao handle + * \param rates pointer to an array of sampling rates, may be NULL for none + * \param ratecount number of provided sampling rates + * \param minchannels minimal channel count + * \param maxchannels maximal channel count + * \param fmtlist return address for array of supported formats + * the encoding field of each entry is a combination of all + * supported encodings at this rate and channel count; + * Memory shall be freed by user. + * \return number of returned format enries, -1 on error + */ +MPG123_EXPORT +int out123_formats( out123_handle *ao, const long *rates, int ratecount + , int minchannels, int maxchannels + , struct mpg123_fmt **fmtlist ); + +/** Get list of encodings known to the library. + * You are responsible for freeing the allocated array. + * \param enclist return address for allocated array of encoding codes + * \return number of encodings, -1 on error + */ +MPG123_EXPORT +int out123_enc_list(int **enclist); + +/** Find encoding code by name. + * \param name short or long name to find encoding code for + * \return encoding if found (enum #mpg123_enc_enum), else 0 + */ +MPG123_EXPORT +int out123_enc_byname(const char *name); + +/** Get name of encoding. + * \param encoding code (enum #mpg123_enc_enum) + * \return short name for valid encodings, NULL otherwise + */ +MPG123_EXPORT +const char* out123_enc_name(int encoding); + +/** Get long name of encoding. + * \param encoding code (enum #mpg123_enc_enum) + * \return long name for valid encodings, NULL otherwise + */ +MPG123_EXPORT +const char* out123_enc_longname(int encoding); + +/** Start playback with a certain output format + * It might be a good idea to have audio data handy to feed after this + * returns with success. + * Rationale for not taking a pointer to struct mpg123_fmt: This would + * always force you to deal with that type and needlessly enlarge the + * shortest possible program. + * \param ao handle + * \param encoding sample encoding (values matching libmpg123 API) + * \param channels number of channels (1 or 2, usually) + * \param rate sampling rate + * \return 0 on success, negative on error (bad format, usually) + */ +MPG123_EXPORT +int out123_start( out123_handle *ao +, long rate, int channels, int encoding ); + +/** Pause playback + * Interrupt playback, holding any data in the optional buffer. + * + * This closes the audio device if it is a live sink, ready to be re-opened + * by out123_continue() or out123_play() with the existing parameters. + * \param ao handle + */ +MPG123_EXPORT +void out123_pause(out123_handle *ao); + +/** Continue playback + * The counterpart to out123_pause(). Announce to the driver that playback + * shall continue. + * + * Playback might not resume immediately if the optional buffer is configured + * to wait for a minimum fill and close to being empty. You can force playback + * of the last scrap with out123_drain(), or just by feeding more data with + * out123_play(), which will trigger out123_continue() for you, too. + * \param ao handle + */ +MPG123_EXPORT +void out123_continue(out123_handle *ao); + +/** Stop playback. + * This waits for pending audio data to drain to the speakers. + * You might want to call out123_drop() before stopping if you want + * to end things right away. + * \param ao handle + */ +MPG123_EXPORT +void out123_stop(out123_handle *ao); + +/** Hand over data for playback and wait in case audio device is busy. + * This survives non-fatal signals like SIGSTOP/SIGCONT and keeps on + * playing until the buffer is done with if the flag + * OUT123_KEEP_PLAYING ist set (default). So, per default, if + * you provided a byte count divisible by the PCM frame size, it is an + * error when less bytes than given are played. + * To be sure if an error occured, check out123_errcode(). + * Also note that it is no accident that the buffer parameter is not marked + * as constant. Some output drivers might need to do things like swap + * byte order. This is done in-place instead of wasting memory on yet + * another copy. Software muting also overwrites the data. + * \param ao handle + * \param buffer pointer to raw audio data to be played + * \param bytes number of bytes to read from the buffer + * \return number of bytes played (might be less than given, even zero) + */ +MPG123_EXPORT +size_t out123_play( out123_handle *ao + , void *buffer, size_t bytes ); + +/** Drop any buffered data, making next provided data play right away. + * This does not imply an actual pause in playback. + * You are expected to play something, unless you called out123_pause(). + * Feel free to call out123_stop() afterwards instead for a quicker + * exit than the implied out123_drain(). + * For live sinks, this may include dropping data from their buffers. + * For others (files), this only concerns data in the optional buffer. + * \param ao handle + */ +MPG123_EXPORT +void out123_drop(out123_handle *ao); + +/** Drain the output, waiting until all data went to the hardware. + * This does imply out123_continue() before and out123_pause() + * after draining. + * This might involve only the optional buffer process, or the + * buffers on the audio driver side, too. + * \param ao handle + */ +MPG123_EXPORT +void out123_drain(out123_handle *ao); + +/** Drain the output, but only partially up to the given number of + * bytes. This gives you the opportunity to do something while + * the optional buffer is writing remaining data instead of having + * one atomic API call for it all. + * + * It is wholly expected that the return value of out123_buffered() + * before and after calling this has a bigger difference than the + * provided limit, as the buffer is writing all the time in the + * background. + * + * This is just a plain out123_drain() if the optional buffer is not + * in use. Also triggers out123_continue(), but only out123_pause() + * if there is no buffered data anymore. + * \param ao handle + * \param bytes limit of buffered bytes to drain + * \return number of bytes drained from buffer + */ +MPG123_EXPORT +void out123_ndrain(out123_handle *ao, size_t bytes); + +/** Get an indication of how many bytes reside in the optional buffer. + * This might get extended to tell the number of bytes queued up in the + * audio backend, too. + * \param ao handle + * \return number of bytes in out123 library buffer + */ +MPG123_EXPORT +size_t out123_buffered(out123_handle *ao); + +/** Extract currently used audio format from handle. + * matching mpg123_getformat(). + * Given return addresses may be NULL to indicate no interest. + * \param ao handle + * \param rate address for sample rate + * \param channels address for channel count + * \param encoding address for encoding + * \param framesize size of a full PCM frame (for convenience) + * \return 0 on success, -1 on error + */ +MPG123_EXPORT +int out123_getformat( out123_handle *ao +, long *rate, int *channels, int *encoding, int *framesize ); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/win64/include/mpg123/syn123.h b/win64/include/mpg123/syn123.h new file mode 100644 index 00000000..1c41c06b --- /dev/null +++ b/win64/include/mpg123/syn123.h @@ -0,0 +1,1118 @@ +/* + syn123: some audio signal synthesis and format conversion + + copyright 2017-2020 by the mpg123 project, + free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + + initially written by Thomas Orgis +*/ + +#ifndef SYN123_H +#define SYN123_H + +/** \file syn123.h The header file for the libsyn123 library. */ + +/* Common audio encoding specification. */ +#include + +/** A macro to check at compile time which set of API functions to expect. + * This should be incremented at least each time a new symbol is added + * to the header. + */ +#ifndef SYN123_API_VERSION +#define SYN123_API_VERSION 1 +#endif + +#ifndef MPG123_EXPORT +/** Defines needed for MS Visual Studio(tm) DLL builds. + * Every public function must be prefixed with MPG123_EXPORT. When building + * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible + * for clients and includes it in the import library which is created together + * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which + * imports the functions from the DLL. + */ +#ifdef BUILD_MPG123_DLL +/* The dll exports. */ +#define MPG123_EXPORT __declspec(dllexport) +#else +#ifdef LINK_MPG123_DLL +/* The exe imports. */ +#define MPG123_EXPORT __declspec(dllimport) +#else +/* Nothing on normal/UNIX builds */ +#define MPG123_EXPORT +#endif +#endif +#endif + +/** Support the restrict keyword for handed-in pointers. Defined to + 'restrict' if available. + */ +#ifndef MPG123_RESTRICT +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define MPG123_RESTRICT restrict +#else +#define MPG123_RESTRICT +#endif +#endif + +/* Enable use of this file without configure. */ +/* Also make sure to define _FILE_OFFSET_BITS, too. */ +#ifndef MPG123_NO_CONFIGURE +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup syn123_api syn123 library API + * I wanted to create some test signals in different encodings for testing + * libout123. Also, they shall serve to verify the decoding of libmpg123 + * in automated testing. Then, the awful drop-sample resampling inside the + * latter needed replacement. As digital filtering is part of the resampler + * dance, a chain of those can also be configured and applied. I hope I can + * avoid adding yet more functionality. It's a little utility library to + * accompany libmpg123 and libout123, OK? + * + * This is what libsyn123 offers: + * + * - signal generation (mix of differing wave shapes, noise, a simulated + * Geiger counter for fun) + * - format conversion and channel mixing and amplification, with hard and + * soft clipping, also optional dithering + * - near-zero-latency good-enough quite-fast resampling + * - applying digital filters with user-provided coefficients + * + * The usage model for signal generation is this: + * + * 1. Create handle with desired output format. + * 2. Set up synthesis mode with parameters. + * 3. Repeatedly extract buffers with PCM samples. + * + * If your hardware is slow on floating point operations, you may benefit + * from the period buffer in the handle that only needs actual computation + * once in the setup function. The frequencies of a wave mix may be fudged + * a bit to make for a configured period size. + * + * The usage model for resampling is this: + * + * 1. Create handle with any format or re-use a signal generation handle. + * 2. Set up resampling (rate ratio, channels, dirty mode). + * 3. Use predictor functions to work out matching sizes of input and + * output buffers. + * 4. Call the resampler on chunks of input, immediately producing matching + * chunks of output. + * + * The resampler works on 32 bit float, exclusively. This is what is required + * and appropriate for the provided quality. + * + * The usage model for filtering is this: + * + * 1. Create or re-use a handle. + * 2. Set up the filter chain for single or double precision floating point. + * 3. Apply the filter to chunks of input in succession. + * + * Computations are generally done in floating point, either 32 bit or 64 + * bit (single or double precision). The functions for encoding conversion, + * (de-)interleaving, and interleaved mixing can work without a handle and + * only use the buffers you hand in. Some support using a syn123 handle to + * provide the temporary buffers for encoding conversion on the fly to apply + * flotating-point processing to integer encodings. + * + * Only the functions that are able to return a success code do check + * arguments for obvious trouble like NULL pointers. You are supposed to + * act responsibly when calling. + * + * The size of buffers is either counted in bytes or samples, which, + * depending on the context, refer to individual PCM samples or to what is + * more strictly called a frame (one sample for each channel counted + * together). + @{ + */ + +/** Opaque structure for the libsyn123 handle. + * + * Simple context-free API functions do not need a handle, while + * others require it. Those that require it want it as first argument. + * Functions taking a handle as last argument after others make optional + * use of it (if non-NULL) to enable advanced functionality like + * on-the-fly encoding conversion that needs temporary storage. + */ +struct syn123_struct; +/** Typedef shortcut as preferrend name for the handle type. */ +typedef struct syn123_struct syn123_handle; + +/** Functions that return an integer success code either return + * SYN123_OK if everything went fine, or one of the other detailed + * error codes. + */ +enum syn123_error +{ + SYN123_OK = 0 /**< no error */ +, SYN123_BAD_HANDLE /**< bad handle given (NULL) */ +, SYN123_BAD_FMT /**< bad format (rate/channels) */ +, SYN123_BAD_ENC /**< bad encoding given */ +, SYN123_BAD_CONV /**< unsupported conversion */ +, SYN123_BAD_SIZE /**< buffer size bad (too small) */ +, SYN123_BAD_BUF /**< bad buffer pointer (NULL) */ +, SYN123_BAD_CHOP /**< byte buffer not cut at sample boundaries */ +, SYN123_DOOM /**< Disaster, Out Of Memory. */ +, SYN123_WEIRD /**< An internal error that should never occur. */ +, SYN123_BAD_FREQ /**< Invalid wave frequency given. */ +, SYN123_BAD_SWEEP /**< Invalid sweep curve given. */ +, SYN123_OVERFLOW /**< Some fatal (integer) overflow that prevents proper operation. */ +, SYN123_NO_DATA /**< Not enough data to do something. */ +, SYN123_BAD_DATA /**< Data present, but not usable. */ +}; + +/** Give a short phrase explaining an error code. + * \param errcode the code returned by an API function + * \return error phrase + */ +const char* syn123_strerror(int errcode); + +/** Create new handle with specified output format. + * \param rate sampling rate + * \param channels channel count (duplicated mono channels) + * \param encoding sample encoding (see enum mpg123_enc_enum) + * \param maxbuf maximum buffer size in bytes to allow for caching periodic + * signals. When this is given, it is attempted to fit any configured signal + * into this buffer in the hope it will work being played periodically. Maybe + * there will be tricks with non-periodic signals. + * A buffer size of zero turns off buffering and signals are always generated + * during extraction. + * \param err address to store error code, non-NULL if you care + * \return Pointer to allocated handle structure or NULL on error. + */ +MPG123_EXPORT +syn123_handle* syn123_new( long rate, int channels, int encoding +, size_t maxbuf, int *err ); + +/** Delete a handle. + * \param sh the handle to delete + */ +MPG123_EXPORT +void syn123_del(syn123_handle *sh); + +/** Enable/disable dithering for conversions. + * + * The default is no dither for conversions to integer encodings. You can + * enable dithering after handle creation, or disable it, as you wish. + * Enabling the dither resets the random number generator seed to the provided + * value or an internal default if the provided value is zero. The dither noise + * is unfiltered with triangular distribution (TPDF), as a sensible common + * choice. No further filtering of questionable benefit. + * + * \param sh handle to work on + * \param dither Disable (0) or enable (1, actually nonzero) dithering. + * Positive values > 1 may trigger differing dither modes in future, but not + * now. + * \param seed optional address to read the initial seed value from (if non-zero) + * and to write the current value to + */ +MPG123_EXPORT +int syn123_dither(syn123_handle *sh, int dither, unsigned long *seed); + +/** Extract desired amount of data from the generator. + * \param sh handle + * \param dst destination buffer + * \param dst_bytes number of bytes to extract + * \return actual number of extracted bytes + * (might differ if dst_bytes is no multiple of the PCM frame size) + */ +MPG123_EXPORT +size_t syn123_read(syn123_handle *sh, void *dst, size_t dst_bytes); + +/** Wave types */ +enum syn123_wave_id +{ + SYN123_WAVE_INVALID = -1 /**< invalid wave pattern */ +, SYN123_WAVE_FLAT = 0 /**< flat line, silence */ +, SYN123_WAVE_SINE /**< sinusodial wave*/ +, SYN123_WAVE_SQUARE /**< square wave */ +, SYN123_WAVE_TRIANGLE /**< triangle wave */ +, SYN123_WAVE_SAWTOOTH /**< sawtooth wave */ +, SYN123_WAVE_GAUSS /**< Gaussian bell shape */ +, SYN123_WAVE_PULSE /**< pulse shape, x^2 exp(-A x^2)/S */ +, SYN123_WAVE_SHOT /**< shot (sharper pulse), x^2 exp(-A x)/S + * (different values for A and S) */ +, SYN123_WAVE_LIMIT /**< valid IDs below that. A newer release of + * the library might support more. */ +}; + +/** Setup periodic wave generator. + * This sets up a series of oscillators with differing wave shapes. + * They are multiplied/scaled with each other instead of mixed + * in a sum of signals. It's more fun this way to generate interesting + * sounds. If you want to mix differing streams with differing volumes, + * channel balance and phase shifts, just create multiple single-channel + * generators with a convenient format (float encoding comes to mind) + * and mix to your heart's desire. You can then still use this library + * to get your channel buffers interleaved and converted to something + * your output device likes. + * + * You can ensure strict periodicity without possible shifts in phases + * due to floating point rounding errors with the buffered variant. + * That may adjust your chosen frequencies to be able to keep the limit + * on buffer size, but the resulting data is then strictly periodic + * without any further computations that may introduce timing errors. + * Apart from possibly saving computing time via the precomputed table, + * this is the reason to pre-mix multiple waves into a common buffer at + * all. + * + * The adjustments of the wave frequencies also include limiting them + * between some minimal value and the Nyquist frequency. Without the + * buffer, you can happily choose waves that are not resolved at all + * by the sampling rate and get the nasty results. Things get nasty + * inside the buffer, too, when you approach the Nyquist limit, but that + * is life (and mathematics). + * + * The default wave is a 440 Hz sine without phase offset. If any setting + * is missing, the default is taken from that. + * + * \param sh handle + * \param count number of waves (if zero, one default wave is configured) + * \param id array of wave IDs (enum syn123_wave_id), may be NULL + * \param freq array of wave frequencies, may be NULL + * Your provided frequencies are overwritten with the actual + * values if the periodic buffer is chosen. + * \param phase array of wave phases, may be NULL + * \param backwards array of true (non-zero) or false (zero), indicating + whether the wave is being inverted in time, may be NULL + * \param period address to store the size of the period buffer + * in samples (zero if not using the buffer), ignored if NULL + * \return success code + */ +MPG123_EXPORT +int syn123_setup_waves( syn123_handle* sh, size_t count +, int *id, double *freq, double *phase, int* backwards +, size_t *period ); + +/** Query current wave generator setup and state. + * + * This lets you extract the setup of the wave generator and + * the current phases to be able to re-create it and continue + * seamlessly, or maybe intentionally in some tweaked form with + * slight phase or frequency shifts. + * + * You only need to set target pointers to non-NULL where you + * want the corresponding values extracted. You need to have + * the storage prepared for the correct wave count. A common + * mode of usage might be to make a first call to only query + * the count, allocate storage, then a do a second call for the + * wave data. + * + * \param sh handle + * \param count address to store number of waves + * \param id storage for array of wave IDs + * \param freq storage for array of wave frequencies + * \param phase storage for array of wave phases + * \param backwards storage for array of true (non-zero) or false (zero), + * indicating whether the wave is being inverted in time + * \param period address to store the size of the period buffer + * in samples (zero if not using the buffer) + * \return success code + */ +MPG123_EXPORT +int syn123_query_waves( syn123_handle* sh, size_t *count +, int *id, double *freq, double *phase, int* backwards +, size_t *period ); + +/** Return the name of the indicated wave pattern. + * \param id The numerical ID of the wave pattern + * (out of enum syn123_wave_id). + * \return The name string, guaranteed to be non-NULL. + * Invalid codes yield the string "???". + */ +MPG123_EXPORT +const char* syn123_wave_name(int id); + +/** Return the wave pattern id given a name string. + * \param name The name string. + * \return The numerical id (out of enum syn123_wave_id). + * + */ +MPG123_EXPORT +int syn123_wave_id(const char *name); + +/** Types of frequency sweeps. + * There are no functions mapping those to/from strings, + * as this list is supposed to be fixed and small. + * There are only so many types of sweeps that make sense. + */ +enum syn123_sweep_id +{ + SYN123_SWEEP_LIN = 0 /**< linear frequency change */ +, SYN123_SWEEP_QUAD /**< quadratic frequency change */ +, SYN123_SWEEP_EXP /**< exponential (octave per time unit) */ +, SYN123_SWEEP_LIMIT /**< valid IDs less than that */ +}; + +/** Frequency sweep generator. + * This generates a sweep from one frequency to another with one + * of the available wave shapes over a given time. + * While you can just extract your single sweep by exactly reading + * the requestet duration, the generator is set up to run the sweep + * a bit longer until the beginning phase is reached again + * (one sample before that, of course). That way, reasonably smooth + * periodic playback from the buffer is possible without that nasty jump. + * Still, a large freqency difference will result in an audible pop, + * but at least that is not whole spectrum due to a phase jump. + * \param sh handle + * \param wave_id wave ID (enum syn123_wave_id) + * \param f1 pointer to beginning frequency in Hz (>= 1e-4, please, + * a value <= 0 being replaced by the standard frequency and stored for you) + * \param f2 ending frequency in Hz (>= 1e-4, please, + * in case of exponential sweep: f2-f1 >= 1e-4, too, + * a value <= 0 being replaced by the standard frequency and stored for you) + * \param sweep_id choice of sweep curve (enum syn123_sweep_id) + * \param smooth enable the periodic smoothing, if sensible + * (extending signal beyond the sweep to avoid phase jumps, a continuing + * starting at given start phase, not the returned endphase) + * \param duration duration of sweep in samples (> 1, please) + * This theoretically should be an off_t relating to the size of a + * file you produce, but off_t in API headers causes headaches. + * A 32 bit size_t still gives you over 24 hours of sweeping with 44100 kHz + * rate. On top of that, you can use the returned endphase to chop + * your monster sweep into pieces. + * \param phase initial phase of the sweep + * \param backwards invert the waveform in time if true + * \param endphase address to store the normal phase that would + * smoothly continue the signal without the period correction + * (You can create a following sweep that continues smoothly to a new + * target frequency by handing in this endphase as initial phase. Combine + * that with phases of constant tone and you could simulate a Theremin + * player by approximating the reaction to hand movements via sweeps.) + * \param period address to store the periodic sample count, usually + * being a bit bigger than the duration for getting the phase + * back down; does not imply use of the internal period buffer + * \param buffer_period address to store the period count only if the + * period buffer is actually in use + */ +MPG123_EXPORT +int syn123_setup_sweep( syn123_handle* sh +, int wave_id, double phase, int backwards +, int sweep_id, double *f1, double *f2, int smooth, size_t duration +, double *endphase, size_t *period, size_t *buffer_period ); + +/** Set up pink noise generator. + * This employs the Gardner/McCartney method to the approximate + * the real thing. The number of rows in the tree pattern is tunable. + * The result is pink noise with around 2.5 dB/octave. Do not expect + * more than 32 bits of randomness (or anything;-). + * \param sh handle + * \param rows rows for the generator algorithm + * It maxes out at 30 rows. Below 1 chooses a default. + * \param seed a 32 bit seed value for the pseudo-random number generator + * \param period optional address to store the size of the enforced period + * (zero for endlessly freshly generated signal) + * \return success code + */ +MPG123_EXPORT +int syn123_setup_pink( syn123_handle *sh, int rows, unsigned long seed +, size_t *period ); + +/** Set up white noise generator. + * A simple white noise source using some cheap pseudo RNG. Do not + * expect more than 32 bits of randomness (or anything;-). + * \param sh handle + * \param seed a 32 bit seed value for the pseudo-random number generator + * \param period optional address to store the size of the + * enforced period (zero for endlessly freshly generated signal) + */ +MPG123_EXPORT +int syn123_setup_white(syn123_handle *sh, unsigned long seed, size_t *period); + +/** Set up Geiger counter simulator. + * This models a speaker that is triggered by the pulses from + * the Geiger-Mueller counter. That creepy ticking sound. + * \param sh handle + * \param activity average events per second + * \param seed a 32 bit seed value for the pseudo-random number generator + * \param period optional address to store the size of the enforced period + * (zero for endlessly freshly generated signal) + * \return success code + */ +MPG123_EXPORT +int syn123_setup_geiger( syn123_handle *sh, double activity +, unsigned long seed, size_t *period ); + +/** Set up silence. + * This goes back to the vanilla state. + * \return success code + */ +MPG123_EXPORT +int syn123_setup_silence(syn123_handle *sh); + +/** Convert between supported encodings. + * The buffers must not overlap. + * Note that syn123 converts -1.0 to -127 for 8 bit signed (and analogous for + * other encodings), but still clips asymmetrically at -128 as that is the + * range of the type. If you do explicit clipping using syn123_clip(), + * the resulting range will be symmetrical inside [-1.0:1.0] and hence + * only down to -127 for 8 bit signed encoding. + * The conversions only work directly either from anything to double/float or + * from double/float to anything. This process is wrapped in the routine if + * a handle is provided, using the fixed mixing buffer in that. Clipping + * is only handled for floating point to integer conversions. Also, NaN + * is set to zero on conversion and counted as clipped. + * The ulaw and alaw conversions use Sun's reference implementation of the + * G711 standard (differing from libmpg123's big lookup table). + * + * \param dst destination buffer + * \param dst_enc destination encoding (enum mpg123_enc_enum) + * \param dst_size size of destination buffer in bytes + * \param src source buffer + * \param src_enc source encoding + * \param src_bytes source buffer size in bytes + * \param dst_bytes optional address to store the written byte count to + * \param clipped optional address to store number of clipped samples to + * \param sh an optional syn123_handle which enables arbitrary encoding + * conversions by utilizing the contained buffer as intermediate storage, + * can be NULL, disabling any conversion not involving floating point + * input or output + * \return success code + */ +MPG123_EXPORT +int syn123_conv( void * MPG123_RESTRICT dst, int dst_enc, size_t dst_size +, void * MPG123_RESTRICT src, int src_enc, size_t src_bytes +, size_t *dst_bytes, size_t *clipped, syn123_handle * sh ); + +/** The range of decibel values handled by syn123 goes from + * -SYN123_DB_LIMIT to +SYN123_DB_LIMIT + * This value ensures that a resulting linear volume can still + * be expressed using single-precision float. + * The resulting amplitude from -500 dB is still small enough + * to drive a 32 bit integer sample value orders of magnitude below + * 1, so it is effectively a zero. Note that physical volume controls + * typically give a range as small as 60 dB. You might want to present + * a tighter range to the user than +/- 500 dB! + */ +#define SYN123_DB_LIMIT 500 + +/** Convert decibels to linear volume (amplitude factor). + * This just returns pow(10, db/20) in the supported range. + * The dB value is limited according to SYN123_DB_LIMIT, with + * NaN being put at the lower end of the range. Better silent + * than insanely loud. + * \param db relative volume in dB + * \return linear volume factor + */ +MPG123_EXPORT double syn123_db2lin(double db); + +/** Convert linear volume (amplitude factor) to decibels. + * This just returns 20*log10(volume) in the supported range. + * The returned value is limited according to SYN123_DB_LIMIT, with + * NaN being put at the lower end of the range. Better silent + * than insanely loud. + * \param volume linear volume factor + * \return relative volume in dB + */ +MPG123_EXPORT double syn123_lin2db(double volume); + +/** Amplify given buffer. + * This multiplies all samples by the given floating point value + * (possibly converting to/from floating point on the fly, if a + * handle with the included working buffer is given). + * Also an offset correction is provided. + * + * \param buf the buffer to work on + * \param encoding the sample encoding + * \param samples number of samples + * \param volume linear volume factor (use syn123_db2lin() for + * applying a change in dB) + * \param offset offset to add to the sample values before + * multiplication + * \param clipped optional address to store number of clipped samples to + * \param sh optional handle to enable work on non-float + * encodings + * \return success code (e.g. bad encoding without handle) + */ +MPG123_EXPORT +int syn123_amp( void* buf, int encoding, size_t samples +, double volume, double offset, size_t *clipped, syn123_handle *sh ); + +/** Clip samples in buffer to default range. + * This only does anything with floating point encoding, but you can always + * call it without damage as a no-op on other encodings. After this, the + * samples are guaranteed to be in the range [-1,+1]. NaNs are mapped + * to zero (and counted as clipped), so they will still sound bad. + * If you want to hard clip to a smaller range, use syn123_soft_clip() with + * a width of zero. + * \param buf buffer to work on + * \param encoding sample encoding + * \param samples total number of samples + * \return number of clipped samples + */ +MPG123_EXPORT +size_t syn123_clip(void *buf, int encoding, size_t samples); + +/** Soft clipping / cheap limiting. + * This limits the samples above the threshold of limit-width with a + * smooth curve, dampening the high-frequency content of the clipping. + * This is no proper frequency filter, but just an independent function on + * each sample value, also ignorant of the channel count. This can + * directly work on float encodings and does nothing on others unless + * a handle is provided for on-line conversion. + * \param buf buffer to work on + * \param encoding sample encoding + * \param samples total number of samples + * \param limit the limit to clip to (normally 1 for full scale) + * \param width smoothing range + * \param sh optional handle to work on non-float encodings + * \return number of clipped samples + */ +MPG123_EXPORT +size_t syn123_soft_clip( void *buf, int encoding, size_t samples +, double limit, double width, syn123_handle *sh ); + +/** Interleave given number of channels into one stream. + * A rather trivial functionality, here for completeness. As the + * algorithm is agnostic to what is actually stored as a "sample", + * the parameter types are so generic that you could use these + * functions to arrange huge structs (hence samplesize as size_t) + * or whatever. If that makes sense is up to you. + * The buffers shall not overlap! + * \param dst destination buffer + * \param src source buffer array (one per channel) + * \param channels channel count + * \param samplesize size of one sample + * \param samplecount count of samples per channel + */ +MPG123_EXPORT +void syn123_interleave( void * MPG123_RESTRICT dst, void** MPG123_RESTRICT src +, int channels, size_t samplesize, size_t samplecount ); + +/** Deinterleave given number of channels out of one stream. + * A rather trivial functionality, here for completeness. As the + * algorithm is agnostic to what is actually stored as a "sample", + * the parameter types are so generic that you could use these + * functions to arrange huge structs (hence samplesize as size_t) + * or whatever. If that makes sense is up to you. + * The buffers must not overlap! + * \param dst destination buffer array (one per channel) + * \param src source buffer + * \param channels channel count + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples per channel + */ +MPG123_EXPORT +void syn123_deinterleave( void ** MPG123_RESTRICT dst, void * MPG123_RESTRICT src +, int channels, size_t samplesize, size_t samplecount ); + +/** Simply copies mono samples into an interleaved stream. + * This might be implemented by a call to syn123_interleave(), it might + * be optimized to something different. You could have fun measuring that. + * \param dst destination buffer + * \param src source buffer + * \param channels channel count + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples per channel + */ +MPG123_EXPORT +void syn123_mono2many( void * MPG123_RESTRICT dst, void * MPG123_RESTRICT src +, int channels, size_t samplesize, size_t samplecount ); + +/** A little helper/reminder on how interleaved format works: + * Produce the offset of the given sample for the given channel. + */ +#define SYN123_IOFF(sample, channel, channels) ((sample)*(channels)+(channel)) + +/** Specify floating point encoding to use for preserving precision in + * intermediate computations for given source and destination encoding. + * This should return either MPG123_ENC_FLOAT_32 or MPG123_ENC_FLOAT_64, + * unless an uncertain future adds things like 16 bit fp ... + * This is what syn123_conv() and syn123_mix() will use internally if + * intermediate conversion is necessary. + * Note that 64 bit floating point material will be mixed in 32 bit if the + * destination encoding does not need more precision. + * \param src_enc source/input encoding + * \param dst_enc destination/output encoding + * \return encoding value, zero if none can be chosen (invalid parameters) + */ +MPG123_EXPORT +int syn123_mixenc(int src_enc, int dst_enc); + +/** Mix n input channels on top of m output channels. + * This takes an interleaved input stream and mixes its channels + * into the output stream given a channel matrix (m,n) where + * each of the m rows contains the n volume factors (weights) + * to apply when summing the samples from the n input channels. + * Sample values are added to what is already present unless + * initial silence is explicitly requested. + * This works directly with identical floating point encodings. It + * may have some optimization to work faster with mono or stereo on + * either side and slower generic code for arbitrary channel counts. + * You can use syn123_conv() to convert from/to input/output encodings + * or provide a syn123_handle to do it on the fly. + * There are no optimizations for special cases of mixing factors, so + * you should always be able to predict the number of floating point + * operations being executed. + * For fun, you could give the same problem to a BLAS implementation + * of your choice and compare the performance;-) + * \param dst destination buffer + * \param dst_enc output sample encoding, must be MPG123_ENC_FLOAT_32 or + * MPG123_ENC_FLOAT_64 unless a syn123_handle is provided + * \param dst_channels destination channel count (m) + * \param src source buffer + * \param src_enc input sample encoding, must be MPG123_ENC_FLOAT_32 or + * MPG123_ENC_FLOAT_64 unless a syn123_handle is provided + * \param src_channels source channel count (n) + * \param mixmatrix mixing factors ((m,n) matrix), same encoding as + * the audio data + * \param samples count of samples (PCM frames) to work on + * \param silence Set to non-zero value to intialize the output + * to a silent signal before adding the input. + * \param clipped optional address to store number of clipped samples to + * (in case of mixing to an integer encoding) + * \param sh an optional syn123_handle which enables work on non-float + * encodings by utilizing the contained buffer as intermediate storage, + * converting to/from float transparently; Note that this may limit + * the amount of channels depending on the fixed internal buffer space. + * As long as you have up to 128 channels, you should not worry. + * \return success code (e.g. bad encoding, channel counts ...) + */ +MPG123_EXPORT +int syn123_mix( void * MPG123_RESTRICT dst, int dst_enc, int dst_channels +, void * MPG123_RESTRICT src, int src_enc, int src_channels +, const double * mixmatrix +, size_t samples, int silence, size_t *clipped, syn123_handle *sh ); + +/** Set up a generic digital filter. + * + * This takes a filter order N and coefficient set to prepare + * the internal state of a digital filter defined by the transfer + * function + * \f[ + * + * H(z) = \frac + * {b_0 + b_1 z^{-1} + ... + b_N z^{-N}} + * {1 + a_1 z^{-1} + ... + a_N z^{-N}} + * \f] + * It is your task to come up with fun values for the coefficients + * b_n and a_n to implement various FIR and IIR filters. + * + * Since it is easy to do and useful, this configures not only a single + * filter but a chain of them. If you do configure a chain, the choice + * of mixenc and channels must match. No conversion between filters. + * + * \param sh mandatory handle + * \param append if true, append a filter to the chain, fresh chain otherwise + * \param order filter order N (filter length minus one) + * \param b nominator coefficients, starting with b_0 (order+1 elements) + * \param a denominator coefficients, starting with a_0=1 (order+1 elements). + * It is an error to provide a sequence that does not start with 1. + * For a non-recursive (FIR) filter, you can set all following + * values from a_1 on to zero or choose to provide a NULL pointer. + * \param mixenc either MPG123_ENC_FLOAT_32 or MPG123_ENC_FLOAT_64 for + * computation in single or double precision, can be zero to refer to + * the value demanded by an already present filter + * \param channels number of channels in the audio signal, can be zero + * to refer to the value demanded by an already present filter + * \param init_firstval If non-zero, initialize the filter history with + * a constant stream of the first encountered sample instead of zero. + * \return success code + */ +MPG123_EXPORT +int syn123_setup_filter( syn123_handle *sh +, int append, unsigned int order, double *b, double *a +, int mixenc, int channels, int init_firstval ); + +/** init_firstval is the effective setting (extreme coefficients may remove the distinction) */ + +MPG123_EXPORT +int syn123_query_filter( syn123_handle *sh, size_t position +, size_t *count, unsigned int *order, double *b, double *a +, int *mixenc, int *channels, int *init_firstval ); + +/** drop the n last filters */ +MPG123_EXPORT +void syn123_drop_filter(syn123_handle *sh, size_t count); + +/** Apply a prepared digital filter. + * + * This applies the filter prepared by syn123_setup_filter to yur + * provided buffer in single or double precision float. + * Handing in a non-float encoding is an error. You are supposed + * to convert and clip before/after applying the filters. + * + * If you got no filters configured, this always succeeds and + * does nothing. + * + * \param sh handle + * \param buf audio data to work on (channel count matching what + * was given to mpg123_setup_filter()) + * \param encoding audio encoding + * \param samples count of samples (PCM frames) in the buffer + * \return success code + */ +MPG123_EXPORT +int syn123_filter( syn123_handle *sh +, void* buf, int encoding, size_t samples ); + +/** Set up the resampler. + * + * This works independently of the signal generators. You can combine + * syn123_setup_resample() with syn123_setup_geiger(), for example. + * + * People can get worked up a lot about differing algorithms for resampling, + * while many folks can actually bear the simple drop/repeat method and most + * probably do not bother about the distortions from linear resampling. + * A testament to this is that in the 18 years of me maintaining mpg123, I + * got bugged about the missing dithering and on subtle bias in shuffling + * a playlist, but people seem to insist on using the NtoM resampoler inside + * libmpg123, despite me warning about its horrible consequences for audio + * quality. It is a plain drop-sample implementation. The only good things to + * say about it is that it is cheap and is embedded with the sample-accurate + * decoder so that you do not have to worry about offsets in terms of input + * and output samples. + * + * Anyhow, this is my take on a reasonably good and efficient resampler that is + * neither the best-sounding, nor the fastest in terms of CPU time, but gets + * by without significant latency. It needs far less computation than usual + * high-quality windowed-sinc resampling (libsamplerate), but cannot beat + * libsoxr with its FFT-based approach. The less stringent dirty mode (using + * only a 72 dB lowpass filter, in practice still close to CD-DA quality) + * comes quite close, though. + * + * The selling point is that it produces output samples as soon as you start + * feeding, without any buffering of future samples to fill a window for the + * FIR filter or the Fourier transform. It employs IIR filters for low-passing, + * possibly in multiple stages for decimation, and optimized interpolation + * formulas using up to 6 points. These formulas, based on research by + * Olli Niemitalo using using Differential Evolution, are what enables a + * dynamic range of 108 dB, well above 16 bit CD-DA quality. Simple + * cubic splines after low-passing distort up to around -40 dB in my tests. + * + * There is some effective signal delay well below 10 samples. The impulse + * response is about 3 samples late, so this is well inside the realm of + * (nonlinear) phase shift. The phase distortion looks bad on paper but does + * not matter much in the intended domain of application: the final change in + * sampling rate before playback on audio hardware, the last filter that is + * applied before the sound hits the speakers (or all the other filters + * implemented in your audio harware, that you can choose to be ignorant + * about). Use better resamplers for mixing in the studio. Use better + * resamplers for converting files on disk. For live playback, consider this + * one because it is good enough, fast enough, cheap enough. + * + * Note that if you call this function repeatedly, the internal history + * is only cleared if you change anything besides the sampling rates. If + * only the rates change, the state of the resampler is kept to enable + * you to continue on prior data. This means you can vary the resampling + * ratio during operation, somewhat smoothly depending on your buffer size. + * + * Also note that even on identical input and output rates, the resampler + * will apply the full filtering as for any ratio close to that, including + * oversampling. No special shortcuts. + * + * A returned error guarantees that the internal resampler setup has + * been cleared (frees a little bit of memory). You can provide zero + * inrate, outrate, and channel count at the same time to that effect + * without an error message being produced (but still SYN123_BAD_FMT + * being returned). + * + * \param sh mandatory handle + * \param inrate input sample rate (nominator of ratio) + * \param outrate output sample rate (denominator of ratio) + * \param channels number of interleaved channels + * \param dirty Enable (!= 0) the dirty mode for even more 'good enough' + * resampling with less computing time. Offers -72 dB low pass attentuation, + * worst-case distortion around that, too, and 85% worst-case bandwidth. + * With this set to zero, the normal mode is used, offering at least 108 dB + * dynamic range and worst-case bandwidth above 84%. + * \param smooth Enable (!=0) extra code smoothing the resampler response to + * on-the-fly changes of sampling rate ratio. This involves keeping + * some per-stage history to bootstrap additional decimation filters and the + * changed final lowpass/interpolation. + * \return success code + */ +MPG123_EXPORT +int syn123_setup_resample( syn123_handle *sh, long inrate, long outrate +, int channels, int dirty, int smooth ); + +/** Return the maximum allowed value for sample rates given to the resampler. + * + * Not every possible value of the underlying data type is a valid sample + * rate for the resampler. It needs some headroom for computations. This + * function returns the maximal rate you can specify. For 32-bit long, this + * will be above 1e9, for 64-bit long above 4e18. The minimum is 1, of course. + * So, with 32 bit, you can speed up/down by a factor of one million if you + * want to keep 0.1% precision in the rates. + * + * \return upper sample rate limit + */ +MPG123_EXPORT +long syn123_resample_maxrate(void); + +/** Give upper limit for output sample count from the resampler. + * + * Since there is some rounding involved, the exact number of output samples + * from the resampler, being given a certain amount of input samples, can + * vary (one more or less than expected). This function is here to give you + * a safe output buffer size given a certain input buffer size. If you intend + * to vary the output rate for a fixed input rate, you may compute the output + * buffer size for the largest intended output rate and use that throughout. + * The same applies to the input sample count. + * A return value of zero indicates an error (zero, negative, or too large + * rate given) unless the given input sample count is also zero. + * The resampler only produces output when given new input. + * \param inrate input sample rate + * \param outrate output sample rate + * \param ins input sample count for one buffer + * \return number of maximum output samples for one buffer, or zero + * if no sensible value exists + */ +MPG123_EXPORT +size_t syn123_resample_count(long inrate, long outrate, size_t ins); + +/** Return the amount of input samples needed to recreate resample filter state. + * + * This returns a number of input samples that should fill the internal + * filter states good enough for output being close to that produced from + * the full input since the beginning. Since recursive filters are employed, + * there is no exact number that recreates a state apart from the full sequence + * that created it the first time. This number here shall be more than the + * non-recursive history, but not by a huge factor. For extreme cases, this + * value may be saturated at SIZE_MAX and thus smaller than what is demanded + * by the above definition. It is assumed that you define a maximal practical + * size of history to consider for your application, anyway. + * + * \param inrate input sample rate + * \param outrate output sample rate + * \param dirty switch for dirty resampling mode (see syn123_setup_resample()) + * \return number of input samples to fill history, zero on error + */ +MPG123_EXPORT +size_t syn123_resample_history(long inrate, long outrate, int dirty); + +/** Compute the minimal input sample count needed for given output sample count. + * + * The reverse of syn123_resample_count(), in a way. This gives you the + * minimum amount of input samples to guarantee at least the desired amount + * of output samples. Once you got that, ensure to call syn123_resample_count() + * to get a safe buffer size for that amount of input and prepare accordingly. + * With this approach, you can ensure that you get your realtime output device + * buffer filled with each loop run fetching a bit of input, at the expense + * of handling some additional buffering for the returned sample counts above + * the minimum. + * + * \param input_rate input sample rate + * \param output_rate output sample rate + * \param outs desired minimal output sample count for one input buffer + * \return number of minimal input samples in one buffer, or zero if no + * sensible value exists (invalid input parameters, or zero outs) + */ +MPG123_EXPORT +size_t syn123_resample_incount(long input_rate, long output_rate, size_t outs); + +/** Compute the input sample count needed for close to given output sample + * count, but never more. + * + * Call this to get a safe fixed count of input samples to make best use + * of a preallocated output buffer, filling it as much as safely possible. + * This can also be achieved by calling syn123_resample_incount() and reducing + * the value until syn123_resample_count() fits into your buffer. + * + * \param input_rate input sample rate + * \param output_rate output sample rate + * \param outs desired output sample count for one input buffer + * \return number of input samples in one buffer, or zero if no + * sensible value exists (invalid input parameters, or zero outs) + */ +MPG123_EXPORT +size_t syn123_resample_fillcount(long input_rate, long output_rate, size_t outs); + + +/** Compute the maximum number of input samples for a resampling buffer. + * + * Upsampling means that you will get more output samples than input samples. + * This larger number still needs to fit into the data type for sample + * counts. So please don't feed more than the value returned here. + * + * \param input_rate input sample rate + * \param output_rate output sample rate + * \return maximum safe input sample count + */ +MPG123_EXPORT +size_t syn123_resample_maxincount(long input_rate, long output_rate); + +/** Give exact output sample count for feeding given input now. + * + * This gives you the exact number of samples you will get returned + * when feeding the resampler the given additional input samples now, + * given the current resampler state contained in the handle. + * + * \param sh syn123 handle + * \param ins input sample count + * \return output sample count (>=0) or error code + */ +MPG123_EXPORT +ssize_t syn123_resample_expect(syn123_handle *sh, size_t ins); + +/** Give minimum input sample count needed now for given output. + * + * This give you the minimal number of input samples needed right + * now to yield at least the specified amount of output samples. + * Since one input sample can result in several output sampels in one + * go, you have to check using syn123_resample_expect() how many + * output samples to really expect. + * + * \param sh syn123 handle + * \param outs output sample count + * \return minimal input sample count (>= 0) or error code + */ +MPG123_EXPORT +ssize_t syn123_resample_inexpect(syn123_handle *sh, size_t outs); + + +#ifndef SYN123_NO_LARGEFUNC + +/* The whole block of off_t-using API is optional to be able to build + the underlying code without confusing the compiler with prototype + mismatch. */ + +/* Lightweight large file hackery to enable worry-reduced use of off_t. + Depending on the size of off_t in your client build, the corresponding + library function needs to be chosen. */ +#ifndef MPG123_NO_CONFIGURE +#if !defined(MPG123_NO_LARGENAME) && 0 +#define MPG123_NO_LARGENAME +#endif +#endif + +#if defined(_FILE_OFFSET_BITS) && !defined(MPG123_NO_LARGENAME) +# if _FILE_OFFSET_BITS+0 == 32 +# define syn123_resample_total syn123_resample_total_32 +# define syn123_resample_intotal syn123_resample_intotal_32 +# elif _FILE_OFFSET_BITS+0 == 64 +# define syn123_resample_total syn123_resample_total_64 +# define syn123_resample_intotal syn123_resample_intotal_64 +# else +# error "Unpredicted _FILE_OFFSET_BITS value." +# endif +#endif + +/** Give exact output sample count for total input sample count. + * + * Use this to determine the total length of your output stream + * given the length of the input stream. The computation is exact. + * But: It is only valid for a constant sampling rate ratio. If you + * play with that during runtime, you need to figure out your output + * offset yourself. + * + * \param inrate input sample rate + * \param outrate output sample rate + * \param ins input sample count for the whole stream + * \return number of output samples or -1 if the computation fails + * (bad/too large sampling rates, integer overflow) + */ +MPG123_EXPORT +off_t syn123_resample_total(long inrate, long outrate, off_t ins); + +/** Give minimum input sample count for total output sample count. + * + * You need to feed at least that amount of input samples to get + * the desired amount of output samples from the resampler. Depending + * on the resampling ratio, you may in fact get more than the desired + * amount (one input sample being worth multiple output samples during + * upsampling) so make sure to call syn123_resample_total() to get + * the exact number of samples you need to prepare for. + * Again, the output offset is only meaninful for a constant sampling + * rate ratio. + * + * \param inrate input sample rate + * \param outrate output sample rate + * \param outs output sample count for the whole stream + * \return number of input samples or -1 if the computation fails + * (bad/too large sampling rates, integer overflow) + */ +MPG123_EXPORT +off_t syn123_resample_intotal(long inrate, long outrate, off_t outs); + +#endif + +/** Resample input buffer to output buffer. + * + * This executes the resampling configured by syn123_setup_resample(). The + * input and output encoding is fixed at single-precision float + * (MPG123_ENC_FLOAT_32) and multiple channels are interleaved. There + * is no implicit conversion of other encodings since the fixed internal + * buffers for that may not fit your chosen extreme resampling ratios. Also, + * dealing with double precision does not make sense with the mathematical + * limitations of the employed filters. + * + * You are responsible for having your buffers prepared with the correct sizes. + * Use syn123_resample_count() to ensure that you are prepared for the correct + * number of output samples given your input sample count. + * + * Also, ensuring a minimal number of input samples using + * syn123_resample_incount() helps to identify an error situation where zero + * samples are returned (which would be valid for low input sample count). + * The only error apart from handing in an invalid/unprepared handle is + * a too large number of input samples. Check syn123_resample_maxincount(). + * + * \param sh handle with prepared resampling method + * If this is NULL or if the resampler has not been initialized before, the + * function returns zero instead of crashing randomly. + * \param dst destination buffer + * \param src source buffer + * \param samples input samples (PCM frames) in source buffer + * \return number of output samples (PCM frames) + */ +MPG123_EXPORT +size_t syn123_resample( syn123_handle *sh, + float * MPG123_RESTRICT dst, float * MPG123_RESTRICT src, size_t samples ); + +/** Swap byte order between little/big endian. + * \param buf buffer to work on + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples + */ +MPG123_EXPORT +void syn123_swap_bytes(void* buf, size_t samplesize, size_t samplecount); + +/* Wrappers over the above to convert to/from syn123's native byte order + from/to little or big endian. */ + +/** Convert from host order to little endian. + * \param buf buffer to work on + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples + */ +MPG123_EXPORT +void syn123_host2le(void *buf, size_t samplesize, size_t samplecount); + +/** Convert from host order to big endian. + * \param buf buffer to work on + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples + */ +MPG123_EXPORT +void syn123_host2be(void *buf, size_t samplesize, size_t samplecount); + +/** Convert from little endian to host order. + * \param buf buffer to work on + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples + */ +MPG123_EXPORT +void syn123_le2host(void *buf, size_t samplesize, size_t samplecount); + +/** Convert from big endian to host order. + * \param buf buffer to work on + * \param samplesize size of one sample (see MPG123_SAMPLESIZE) + * \param samplecount count of samples + */ +MPG123_EXPORT +void syn123_be2host(void *buf, size_t samplesize, size_t samplecount); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/win64/libs/libmpg123-0.dll b/win64/libs/libmpg123-0.dll new file mode 100644 index 0000000000000000000000000000000000000000..deb7e15c893e724ac9da94b12db423e15c83cb15 GIT binary patch literal 427370 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�XJGEx-!os=r?FR5F-!>bvdT*c=|Kc8a^ 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%0D~O zB$(L|S<1Z5pN>_il_p+Uc+d|7V%4QyBW7_#WdOxH!b4T`W4i%B%+t*LPr;;6kC_dL zmqg4oPvUA*Y->8Ct2t3NHWNSK#zIOqA9PxVqHZLA)8KSEmBR3gsE1pNU1qA5f3+GW{^?O?#P;(VR+U6HN5AFp*+d8*7y&k=+>PRJI4)sfR zHl3fW)zy}BAj&Q-46%9Zw1`;As}V20(SC`!a*JZGk2H`PrBkNvC0n@k55@3Ay61?~ z)7gJagw~?#GTcnI)$3qY5+1iwo|(Nh99qYc8>-shJzOotGTj|j2O0^~ZZhZ={#C=C z)A_OePvQ!N!z*6+lzmIZEm@qGIztws()OfVzS|7%MmMy_O=mw=Le3@LbMf9Q<5gP` z$Zyq^;tcus8S*Eaf&K+UUaHG+T_#yA0Ss>p`Mc~}cEuHZ=Twa3d055w;2s>26K8+f z^c6=}*c@rK=1h>QaLte+K9|2&4GiaI=CW5~fj7#WsnrEgvZ(kVfHG!c?+Dd+19ejX zg{xX;R{$l`Gjj=a{&WL%cL2rJZnjVyWXbf4vp-WP@GUbiVW$x5D}zTDy@rz?0>I_5 zTj`B%;A<--g;05S$LUtAqvwD zo|9yshZU2t&Dv%2FpSkKjZ<2Ohvo{-5!H@Oki5D4T1TYw&A19XG@LE8v4k9@VM^1h zt;C#BR9>fxLrZeJn_na@jaH(5;?zu2OlmPzRt~lk%v9nhy~)fleox-*Gi>?G%;=|m z%s{3c%$V|fS?y7?!<=`l4h>BwLWXc_hD$D2{&1u(1YETrBKs=?jkc-yJB*ptWzq~V zJSQdULq?8Xywo>vSy!MKaS*Jv_ zu34w{LZG}swCn8~M0>Y=%dWVRn4F3+JP)h*K5gKH`GX?YXqjq9k>{AkxF(>YBp_`R`AbpUU4DGn zP>YEVDDpzZ+wz8;qbUef4*#sKl zjh}z1p<5B_a6`5t)?XU3)wsQorHkaI3N=gity4Zw{>wUL$=r?(xiMr|dYE|?!*cHh0`Umv5b=JsB} zAkEVtjfWp-Y#pcrTLYwaecE#+22Wqe==$Hg?%E|4ZY3(JFn= zkd5|t{+l*3zs?`kwzFLvnV9j~p0MZr2g{7ilqT^vD~hDXdtpR*^%4;|G#;+u01J{^ z!$?@cF+FC5H4m{_O|Sy3h47FWReuXv00Y+Ud%x(;ajOvyJRWHPphQL{-9Kp(=Qi*u zwy~F@=UiD5T6bEwJ{x}>UmPC3W+T#qMEcz9t@+VVi`_@RYpqquC<4546|c3df!IHd(Vw3>0dC4-MY@t|52 z9m7hAw_$urSvIOk15<{n|~H`F98FpW%be`u8#OOmRAv8)_cLKteux zH&i3ewu1FQ>{)fV`UwUMmXVr{M!Bt1{u$}KszhhIHgN~l?@$pc>HR{yYI|OM`SwnU z@B^USFj%~PxzJICH?Y+U!WpWE5f zU1YX;_n1i)sKKXyx-JY)svwLy8h0Q725YJZXkYP2bkMMbH<1=I%tl)t(Gb)JE`S-28| zp9xnNA;)QL3Xv5_FEjS@=Shdc3bHM$IyyZ1R(49XO!Z$*T+vlQ61<;3c6Ltx@rs z-p=#)CA`{xdn8y1Btgi(Jy;1o)|Y3N0$#2)YXNCIvl#GlvsnyyG5xN#so5;%?KlKk zsWZ{9+nxErZzc1pZ*Nn}nZS-!9js}%({=U42DCyaXiO|@zhf? z!$Rq~?wnBb^D9BzdO6I>6|I-U+%v3`7_wgQiTA%@_{6`xW^Y99Z~4T#VZ5Y&vz2r1 z%(>*)Ttn(MT$i@t`Z>4|4Id63r3iCS3fgmo7T&QJ_|WG$6Z9-d<2RyslP7dP>VU3S z8@g_w1M+si09`D)T+oSG^U-BnbooN}#1)|927-2_dtG1twa?*s&+&ym1a>m( zK=*rxs&Ib&38sL5d({@drBzAjVe-g~7xLeO077#*C(`9w7@U;k^3Yi$giY=tPw3Yp~iUd#XSN3R%MvFvLp2o{5 z&z^?%$hYz3qgx-fcm`NJFM}5Buf3wSTh75if&ehRA%w!8nIm-fbwGDZ8@ejc(Um9q zrTb5VHKz`A(#)}?>pIQitOaN0WT7hqK|EF8!0Cfute=1fCZ3#o0~PJf@!Ikz$7`Jd z_f6`X-zL?3`)>f+wo;yvvrK06><}X?nXSn^5z?k_Y)H#qSqP5SnGkY#P7NWw$hUxr zEWyM=FrWE?C+*lQB}jyN5~Rcgm1U7SUpV-fkOh)_q2gm|mT(CpAF(W<5i&j!Swa9B zEu-$Km5>sLZV0ef`UUrY&cs2MMAC(9-f9QW37A$ojWvpZ*x7^g&d*jg@Ri-*>St0zL@3GZ3X1-38y z)77v3!TtOVB(V_fK2NMTfy&oBFDW8A#eKvXP}$Ih{V zjR7PF(#f0&HqfF363w0DvA?u|HuLZ}RA!Rh&$MBbqjUp*Xm^$Fpc!_>2S0P^H>gC; z2Y*$CP;+Oc$xab6LH$GJu7n{TpmZK;H=0n`}rx-{3K4gL77C?3}x@O`n@hKOESrgz^Rlwu(1d zc^yuR%3rc9p?5;o=4czkv}+CBQ|c4HL8;qGjN#dCAXDVPp^6foohrg>LX(!?^W?Jf zlH-0r6LR@zgZY7uV*?s2bsMtI8PJHSb`;W%`ecg>F3~ma;_~BrQ4+A}-X|SCAR4fl z&5!D0%my^beN=4(4@Ke@488-Od+>Mk9 z7W3Ya`>-aP>>sfKc*b8Jm2NvcPj+;``eLuqAX37uT|gV1^PEk%UI{nZgm1+Ltk-x~ zvSjYTtwUot0&Z&|RkY@4o%Wpu0hxYletD1aUo2bA>i&eP?{IM=dfR(HcE_e4D+`q-kG6f~L)~43kMiOWQ4{d1-(c zRrRP8jbYn)z2D9++jibcJC~9~Eo&)+MTZaUE&r#!0|jYTHyhhZ!xO1umj&X1r)oLT?F{RbYAh8h+mg|3&0 zdq^y9tpqt&ByvwIJ=^^cf6*M~96OKSk~BA?dY^3VZ|EV4v3T^+17V3B<~5$6fw~5v z!IsL?!b^MR7uWrAe+i1r)yFdYK`^vGj}bEADq>1>Tlkt$$QwroVP{G&-ljM4cK$%# z%x)EVPPlZr60zDRC1c|7F6{JCd;=d64bNb?Pfmv>v>rJ#SbCDvS%pfO5}g^W{>ka= z59A`!nZlf!ob)_j1|_p@(p?qA!9gS^Z3xm034$XE-YkLx!HB*}vW*AlKsqOs!#7i; zven^!Ilo?lwc6ZfQF*_{nFVT__?i`2$Yz?~Hl$ya1@ubD=gOxi${z~XeZSJYlBoHt z4$hqp8!x3->$m%KNBjZKIjp z>HkM;|JSPjaoUew{P8qa_X$9il+$+3v1jp$WUL6P7?L|O{qUXgkQS@Es%h&$yB?^m z3>s+9lF`#5qoR1#>Pq%WeUFUR{bqlB@IHHfsJfpfxrQ^XiQ*15yVEn&FH>Y%7cN^X(s~xs+S8f)ZJ%v^fN0yk z7-_?A)M}n75)Z&-FRYrY+zwu|@Lx@5ov`>Gdbi&{W}a>d*yePs$qCJ%vH97|9%eJa zEvuR9`t8RoX*H%t*l#pHgapB^?}$N}qlzM&U7t@N)j4q#cqfLh+&&S?PlTU(q4}A% z`LZNkxe(aQ!=Ex(@<=eTjh7Jr>igTCggvmE`kUrSH+8RSgWGL4jm93lwY%nb3ei8; z`!B%^SbyL~Y2>(Gy*?A=xSd$e%y^jVaRx$zG&r&_uN%?A!QiM*Vs&G7^HRDqRyS@B zZsd0*z&yUFZpIhf712^uH)Su8d+NsR3omu|){Vfq<e|q{klFfav!~a38_n7)HSg1e{C9 z?F=uSv5Vi9@X`@`Vs#__Nyc!BOGn_ha_Ja~G43-;`gz^B-E||rAby_;79ZSr$=|I* z;FaxKbmIKzS<$hkP3LU8oAxS6-EG#M)ZL~K{L~sKtY-)c z+s$F(h>V+htbK32&INREmUx>Q565FqC6kGrLL#h1DTsv~e^$2>pAn0kG2OUeZ&DsUfn6@6H zn3Pd@P`=X7iJU@@*%J8Zg}u&2d#io~QNg&}Ek5S;RWc>sz=`XrFCJou9C2{T@jTk`@8aT2oLD?5MA>w3SxNcgwQ+qF$HOx5 zFmp-Qa&-P)1GmH`ouJELxpHn{63<>Y0DJ#jwpU&Y6_(ua7(c|Jcc zGjFm?cjV^*uzY+w#{NtE{GA8$^Y{Dw{GSa!A5Q+ou<&wD555JKw@=<+*?7ag(~70? zzwF%V^Z2*;ygh2H+60uo8}4_){kMsqUrVnVI`}d_FG*JS>w)t5`5Io~=L=i;dHGI; zpWm_dKmQd!zoIfe=Od9*N0z>y$cZ9amVROrjb&N-Y1?=`->~#&WO$td{Uk@IlUE7e z@b-qSm&Rs0&ix=R-*WDINekT>$MT0}>+K$3gYpsS+N5vtdA{gXN~6xSwS0aRTW{00 z^6@q;B$Yg$;UT&defcc?CPP~}v0Gv34SfYH{d0!C{u}(fS=6dlb-YTA{_6VXE#l*! zpLwPwU(3gzpnQ+}G9Ulk_uBLEOTUVb|CI@}^B?s%p%VP?^Z)o){QPF@Seg(2GCzNg zVTg;&TKlM3j8g$qZ1~QDd7Iz)yv>4M@HTLOteoZCsB^1=5kY-ZYi)Xr6RqPwbm`d0 z@x^tcL%fwmBE@ydPI~!%v@Y41r7zMeT6bA?cxf!sCt4TH5w5<`y7*xx-ASa=MUiEZ z{-n#*%gLncqI3gEcZAaYh;&CP9hZMLkQ7ZzvivbgyPBj!NZL(Fe@arMEelNjs#X=j z;RXJ%JMIVUhQ@o@?gy?@9aW)};SiDF9M*&oDlNmSX5&gPLkjK5qe8eV!41smNh zRu|VrVR5G}+7-ZKVs)c)Vs%MXX!JLzh0+uh)m=p4lSkE!4wJ42Y4Be)x~I~8r!M+! zszkDHlB|1O@@Rm+RX6%rfR6Kb5ntucyK37YfBh>-EmCDmIxkYkNR)+PKX(wmSc51_ zQ&;K%BgxtnuK5Eq2DhRl(sL!qs`^LRGg0wW4{pen7%P_kZ96Ge-ZzVOJ&h3Sha}^| zvV(+JUB9~@snu!@I?QZ#Y$T_=HN&4aYbvr?EojsAdqo-MkofH;N zs$P<%h9`z!VdswpHtsq+shYT77}bTdw-Hx`E5$5+@5}Y$PTQe$7>2QY5}wNT!_R0T z1j(>-T`xc6>ln5E0KGv-}X*(XmDoGAIaHMTp2PRp^JD@g^ZngjC@c z$ly6mts&vu3PP_Ns8ExWg_4D#ayzX-&$HJ8b6H!97UPO5`sn>8jj_7#-q6JA;5 z2o>J%UC2Aw3rCzj$T3X4egQ_2Fc&Ffu;i@e&B+QHZTLuD(R!E zY_*N8$<17G$Djc3s&*&_DllAXQVt1HHV8n~TWcVlKlb-yZhhV+6{(1qQwL_k{a&~< zfq-`V4eG$TfU2+DH4Ty$Zv9D{OpVf=__%=jZ41}_tRq~rv=)PT{-D8S#+AlX9))u5 z-^DQysfFJ=vVE3r!A>9I)*Tk&IvEZE@ki+wD{1X!8&M^tNb0c7;A^sh zcgUv9R1nBpGdA##1vZdwvwYx!Z9Z;eDWT$Q^pi*0CvWtV%N-|4bxV)4V1u7j4mb(4 z^Uj+#u&OXf?q_sogO7Jedlb)`KtJg!KdI~;spfV4^{c|KwGn@mhO#Mm$8MW>s(R`P z&0~pFz2-4?;(g&qrbfEe?2_=-h!q_qjI6{RnLRTuPuzVStmHYizn?b!y|k^rJIHNg z-oDJHZw34w=FrUzE$VT`X&etzEXhW0dyxsOHv3)ZrR#h$V2ODFp6|Jd_%KIYu(f$4 zf)zXdPnb@;#{Y+i`VL5%v8H*lIV}V)>2pTe^c;PJuUyjx^C#$dzT*4a_*DnZA4vX*2|2lt!|Q+S$?wrf1jUp;k6*@m>9~Je1;PJ^CNZ67pv<;R3dUb;#6^y zVvY?N#oUx%NBdsr>O4o9HL^8zOlNYVkZ-klSp{D>siTe)vEqt0PX(h zU-Ew{lVll&w~ZaOgWVE$_APZg@felOqx3L>O3@8iI{k=fog3n16nFJ4b-NYUxt)va zM&%UOl^!0gEA0}ko6gb6sIEYTTRAw*#|OzT;;EaIUA*&6hNJdY7u&N*EPCr80M~m- z-XM*=K@F_jDV&(5YQ@U==3>%Jl4toF@+9M!w-duyTtO$&3k-AD6jr=v62!cDvNTPU zPrwX6)kl|!^esuv$Sv_cL^A(pQCo3(Y6NZ054p*N!%I#NL5gyxcs@*daXNW_!h1dQ zt)urFZS1~@RIM1lr*w#E&MS}oU_O@5y+6b@wg|%N{xY91e#`K?g(*Lo$J1vQm89=4 zg3H-@lz(2arIIc$N(|l-uHMBEElw8Ykoc{SRyCoW zaUl%3oFP|CL>SOtUcrn3c>;JsD&}lI(u5x?%ehgYhoDf`XFvqpMXo z$;xcu{Io{m;b#ZbTA*;brd<0X;{HLnR_zS6J!N+f=HMB)MZhtA=l!I(E;l^)RErgF zn+B^drtvEd^bDYxdZ~M~ZdRx8+yjOz)kGajVXz}4&pR@nX8x{ovsHtdpR#@yd%G<~ zMwh=E=7w}=FNOkqFS_*DZ-ZW4do;h;)0dR*;bMs=i^yc_F|4~fBZn+1bu*BIsuXL4UVcMWAv;+)sZpS#ZA5KUj8xoZkeT`Eq5 zEc;#%Ux&K-YEhrKUGAg|C&y??U_LR|fF?EBn7M0mf2Cyp(YC^wJVaj&d}$7v+(TcQ zS(u}o^Blg;*NkLv7VtGjbDoLosW{D!CS9)5?eycmt0<-}n=D(&G&!1Nd5Y6Csxd%F z=?ZJG-zX~QVX3@D*SbUIjH$S>X(?sK=M6=*Z`(Hp!CTN4VcFs8MfNR6Qyg|JKZMA_ zb3e*4q*wKO)YZH_eqS3AaiWb{b*hFC_KoJA7X+h?+I*O;-LNG%A)Hk{3nJ}Oy! z@LS=UBT3><*oMTJs&yI-q1PM@%a|y)*PqE5sQ8kh-s885?T|m;W85DY$sn#1>xjY_ z>t$>kZ}sJH9hqm#k1-2G%{0)l2Cb{q)pg7;wW~pPFeJ6QkVt4N2hbsxGN7Yv z&{r^D{NZ1LGf5uSx>y>Aqk~Z?1IgaGn(UJ>H7o#U@YzwpDj`EV&|hNU4=PPicvV#+ z;)qMn19SwSU#e#?6u8p4-B76hOdE2|AU8;Q-!G?|EmpX89^a_uny~ZlC@!wwUa0kIH6iV0N$G zXPN!*a^`9zS!?!f-h@&Sn-Xn17*N`knEmZ#1dAfgaaZ#OHkGC+%^cf&2HCW0*|W$+ zu(piHXj|KFt?PXpu3cr*xt3#X{=5D3k>)TsNM>_bOB6a$3nS<`J^v#6*hlfTE2Ori zj`mX;S!VOA*v~7@CcWN%#eKD}8a_L0fUSPioNba<1xiM~%7{H(Npq*CYYrGXXi1ra zhXLy|+hvAoHAdh>Pv!Jsd2sr$E)%W}F?a^7hbPKDJCPm($CjPn7M&Q}7_QZLVLbFa z+f7gD6ss%CMqJj zjm_`e9$@3ltKgja{({6gMRim2v)e~D%sijSY*LOn49q$0;~Hn47L@96mFlpzNJ=%c zx2iNPMykVuh^iI2u8NG-U7nc?t0@_D!#$r!UcAT58Zu{<8rrCL`EoKVe<%#vzQd7L z=nI`@d9TvWHLR=VWXEXYxmeYxdArlRNG_;F!RhgIJT$a!?CBw`i`tR*-h;PVwEV-h zA5jhp+!L6n+W2(Z*q$xnv0~j8*(}#$!9g?U4J%2H?p&7`1{SmG#e07dU$?bn@XO)a zyMa)9ok>pFL+fH^9*l*YRA+K3IK3pDBrFr)M&}Yph!K2dHJ6 z*m!DCynL5c%btipBhbpuJ36{+HRoAJl2TgSMz*mLrR>|Klzr-9I?uYro@ce-cpu-? z<~%E&{&`U`ZsvOb6CZ6UTpn(X82LpMxn1;0vHKH?y#X{Uj`X&$D|kIzeJ#`lw_P-l zhwJNJJCop%ol)@DSf6O0VNSzl!F|(aec_>{i0X{r$Q%1brxXU>nGR1+TN-2JQH?TE zxx9y-c&Xx9WGwV$F6_7)^c*jne+SiRo;Zo|1r&u`H2~|Ld=`Xb$QZj#DKCT_Gz^jw zV=w33Xzl`n@sI5Loy+B_pDR81mIn^!@&bMD_EU}#&#%kWO;VW*CD#T~QXNRDIHh~o z08Ep~kdHDV6qr}F>2;48B4FLZUJ7alV>$4Spw*0W1<8PAS^U$L;=HbgI#rZYZ{#x; z?$;u{Ty;TKB@_EBt%;^zNS!ka5N$tJH;-=@?#z=kq1aolD4hod(u8XyP2f&*-8$GS z;c=>$oNLa~{Np%W$2aICC!D;|9Ky+=R$rCnNpot4aqUy)v`+5B!0Ky|%r&QPY6t=Y zMUfkg@E~ZDCym%a>CFip!SY_=JZVnh6l{*+OedJVmoyo2uKTSR;}f**Q2(byfw<-C zGSR!D$W5OfBeR^@fVemD)^!?h>W7zcx2e&HJI`8af^Yq;X}m`b{l+}G6A}Hw_OGr? z;7+dkEK9@EFyhdaLJc)Go#S#L$*GVen*LCMGsY0)7)KDOiSXp)m8Z^1rIf_$jJ~{1 z=^slC)p)pkP%K5iQ@LNrb42pA7MgV?VKGpZkM!jy-E9&7O zMS84{)7~VZPS*g#cP0DW@-2Z$O!RYG1jf`Nkl;7&j1{E&N53d!v_y^rUd|@gG+)8?&|jB> zbAz&{8J4G;)Rhz~;Fq)*nlpp{mP)zRul)*@@_L#QGgCCSCwe1xpu{<9GnWdE!H;8o zX@)nHxa+5H!#%ZWw22-H-Sv}pO!TI-0I+kSht_$$+d^7thmP8-w8*(OUUDaLWBR03 zx4fO=s$b8J=Lvx-jnyYvV9ML3UtVeT%j?lEuOGuWTT#f%xJ^~q%+VS;cRGM*HDDy{@^ApOrOF(-B#D2Z;lKcJR1v~HkZ?4ZJsre$;lFsvWR#D=u z_FmQDgihR8rK70@GO8-^8Zl9;nV{qU)RS7LapOClAGz*5N}=2c5Kqsu%k_uhV$T3A zligPDma3NHt~xThrdA2`&rS6%DgQXZDMn#5eQD^7bkDyiIFULp7mt?5Vqmp~wfsib z@~RKQhJ2rmr}G}pT(W;3>o|*MynLQ;anoTXKPBGFEa;Evz`{*Gp~*ebn=62$c*uOl z{TvUbegBK){r4s14X(F^TNWpgCIJ)R?b-T$zkL}x%gl5+)Qi>b)wL@+TW|;OL0n}g z%Q2ethW4O;i+GU?&Ka?)Z3)LxmvKCX*~*#G$YUJRGM^c^+$`NgHTOB^XY`yRcUjI1 zF%4rhQ92`-C>;sml2J3~UZ$CNf>;NM^~`D=PBQHoZ3M)Iun|mLW<9yAm*Pok#L(vz z5|NZhyYxeRLzPab(!}drHb_8P;wiFoUVj07V1X2?*`HYaWXhk3oKyhK%4VSp$WJ~b zz^KTc0@g9L{bn9fz-2T~nL*x{sHB;DE&M=5@3HU}#8fPK-Vmi=&AV-;Sb)ozLxum; z>-jV+0D64%ikZ-UWhU4n<~!DZ;+dBk{Jn9dC z+RV#n6eSH7`6tXGuZ9$?f5`CXfKR}CVQHkwBnX&=Ck(R?B=ETntDb6F+^ChDF!d6# z31|Ck!XrML@U!A{{2LRao+}E?NdRN`gcDBVt)yHHw5KG!q(&@4^NqAxoBXPcUl5-# z@icF2?OxV|N^Z1c5WE(yzCeS3wm^}T=lPMimm!Zn{EZOt7)mEX9E3AN3!(x?75E1WUnBMepCv0v~)HF#|Pr+=|rc!lq&Pu+lrnV8Pq(>G<8h; z@`DS390J7#e4X!jl$N6GyEDJ$yLqh{p9i(~|2z8o;iszULG*Xh*8e8`ZU5wJ z(%*zf{(nw?-=ij9pZ-4k=OO5?Y%gg32lTfXgl_rQq`yl6{#W$(d3{Iv`;hOiqQCze zdEHCWJrCq{n_uzB%!KLRNW#x6lNZBf{Ll?=)>(bmx z+A6QxfqitFyzaM!#avaT+iq2<-;JX=?>X=GI?Py|ktORBXV0K1V35hhg)LP-sRkn8-1tK_~_a*U?>{ zyd}j5j0ez}ZoGRI2P;$%1l>(bcV6l(=_ zVzyxI;WwaB>3*?4hU2lA zjr@*H1a9A9%2d^)WyD_L)d;!9Q0U|#wE#d-<&`#@xu zd{UA+H@(1^hynkQIC#}%sn4>n6Lz1eo@YdOLHj>sc=Mp89}C#=Ck;DJu<4K|4dZS| zL)Zf*f2m>e!DKEzz->mUT4wEJTBa87W=51}h!atsHWY{?E-i%P#2?wn2<{zpZN{`` ztW57#Qc=k6f8f{jk(*vvC3CQ5bFv-SOTv;xAM@pV-?H+(6&M$8mBO$Q@s0E8UFKcR z`66#4=o^!*c9qXUXQ<)TMKB1d1u)bI`m7WhZXJ;G+0^-hz9}NyDTZ5@5EoIO0H6_C zci2ukZWzE;rIY-F%(Api$5Ajf7qx{#~-Z za}AH(K+qM2V}D0T%$9PKFrB+rbo@HNq$+)z8cicr^5QoIwiO5@guHDQY0cDHRA4y{%_=b z-Dm$Adg`}M_Gha?RxrLK;KzM_2=0@vl$`JM?fa1PtwhcTd)54)VaKUYdpX~ECa_xb zaTYDowGjO5t6ywByFDLn{YXsxD@)IjCPAg(JMceqwq*#?c~Oz3Qk@iWQI8=jWSjZd zM=FWtWnpkqv^cWJhAatAiXM(M*pSDK^S3XHq;NQNH8=7yy1f@WilpXzStP}Z^uzzY zNNTVzlIj&rUwDv6D(^Tek@`EURneBo6kky?^@f2);9^@^7-7#|V0`vq$i8fb`_ zD*1j=LMhQ<_a}ZOCEAZ%uQ8S$+6k9*+@AVSBK?4-HzZT>)KZD1;_1F)xOB($_IPWy z4q$SuCcT|OP&nW;K<7~G2WJ=Wb>}SCXxIKKAvIfHPG!a{+jM^)?p%(Th0VCetTe>5 zXQz7xFDY-nR2@+mOOGx9dCp>>teomr-s0uYYT0`^o?cjKmc5%Gf9&a5@1C&q zzoHT$`P35V->!C?-Ww6sB&~Q*qnIXVM9+k`TrcLVN;E%KG%x!02L_9th#9&yoFMbl zR6`z;VUZ4^=K1d=RV+H&q8?|N$#b==T|jFkPp5g4SG-B`R~e(7h8dj?GKsN#M}8q zVqMf?;2(Xl9w0%}Sy!+ga0Vt33?adK!0Fe6HY8XN9J?NH`jsK#pwlnL6SZsDf2_;q!$$P{2`^}tsua#HzYChk}tE@iD`2W5=O(C``a$bTt&6n-73z79=g^a6| z2qS7VmNfN{3$Mv+z4av;qvrbAk^a10mdni$k%7ELj}XQ|yvf#@)I*fIn@J5T>Lnee zjw$swl-gD50;NtU^-)SqzcvU#4})N=5FBF=lnOylAt)1q@3h%#kEi>-mc6#>Y_xh> z?X?@i_1J6I$FsxrQRO(A%NXjDdHiuQIJ#4~{vwJux+iof!}I!h;Y2Tb46p+U8GQtg zq-r-hGLaf7Wv_|eMN}i%m(<@Ob$_Ki9*99oJ%rRhQvFE$eI@Qgx|2w9GT=WJ=ug`Y z=lu1#z5UOeZDLfU2eSyGl^Tqt>ip_}%egvmaeIBF2@t~@?XWM4jSEmhmYBN$d3iWe z2s&OKH@5(`iaH+@^BM2_U^~-rw&%~+$eySh!o4RX1>@SznyX08)g-<$4U#+0L>bfY z&#h_rRR@`d>-cSv6o!FD$k)!l;V194Zp{OW@L{q9XFfZUzjJ%Ux%hyWGsSC^Gs7m? z3NzQiL?rccv8Jig9=u(lwSAPMAv_EYLcUFSJ^lY{lXAX*fqxKvRF!KE6^f=|a$TD4LYrM0$x>)L9;)};v`n^plg z+;MG2P|;ci+5Yd(xz971M6@pLx8L9E_0Q{-XYRh9d+#~to^vi6v}~Q=Jfa`YDTC!4 z&n_*2l+=uY@=i1YwTfJ*2jf3Qv~`L{oN!Myl4J~dp&0O=YiGXchf6tEgtLs7@I~93 z@06h&`jm}x23sYh1Kvk)ESBRHee{@y(RTGBCXBeK*TvPV* zq@$-&Abb^fGfHD6sHm9g=wynz$W)2FNP{T~d#Tx>0`p=uWS;5jdZ~G)tZY;rp|?9_ z=hTg+am*>Vi8)HWrTZK>W4kNp+Fad``_V&1dGCGdprusAarb#hZqRQJIF@re>Q~ zu_H*YHVswg9ypht1cP@1?VV$K#ndSlj%-&(=9!K%2}R&?3re{+nj*6BB0Nv4aqUXI zk&<**$We|3bt^!ZTJ@X3EDydo1!Rp>?jFrJYrOrJdM*2-^(B4O*j+lD*B!`xfzf@T z{lIE}d;1a3Zw>4RauVc@Flk}VNtaFdlgi9!FaWm^wqP!^K_>WW8%Z43+qeKZHXY1P zGMZGro7}WS?hb|;h>Fwan*snxMQ%-aHb8=iIwBk07z65- z7!W&Bi5d*i#BsNcorZgikYPQc06{^EIG-5*h5$gppwlSgGm%ciQ>ld;wjUEg1Xmg7kcnD4aYJ=DEBs?U6fk`s0 z^Bmq{0R|R~brBnWb>=eJHJIcdZCJ1~(ZKEyAy5TgZMGhmAsK>Dz+I&{sx!{k0&R^b z+)J5gLPKA9=+4&aOrx1pAcM2PK;WWG#>^@ZRH@Rvl#w8JnDqy0>S=+IJIu-i8Ltma zN;uOG1Y9;iDHsK-?5;{xhHov+N^KGmp~v-74Fj!3Mo!MFaA{JG>{J?&v8lTTyM_iO zl{=r~ysEfJLrD;{gkfH+Iq9hY$we?97SPWH*aU3>9?X>Lyg@D>t6il;<)c1LTfJ-b z0G9wFmbqU#soFbD-dB z)OnXkMj{#w{wVqG0B9o(A#=3REd!(58v?Sh(bfn}at${UkIap>o~&6aJ7j>~ZR<5Z z6Cn|Kw=GZgOFe1T(9wz8k5ngq%7RxXjEPyieUg7{BtDUso15+mAS>mb&EcIc>g9z* zj%QI<@Djlq*7L!(F){WYkL|yyF)KBp#?*e6`1qq5O_{RN!bnXP2^87)`_!&{abpKU zchx;FFVeVtCxg>^r?E4qW|#ya%y9VX6d=POk0=gV!Ib730*;A?=?|kFhpk+_U{?1Q zd-bc+4`Iz6_{0(FXoAJ7jye&-b>B67fRvFQHxW;|RuQei0p^%_4N6Q#k7QRrx|}xN?rd>Hw9V47i<}V;QY4AI(X4lnfmea> zUSy^|#GtKK+Sz6TgjilPBeub8hu{@ch@tq0Dt}H18v^4Y2sp}nmznAyp>|nD0uncM zm$T^+Ie|TyB)6O44&uaz$0!sj=9wuFf@H*3Fp`>MmN-a#qqEVGnjIMJsM8fgYL40X zAj3*kBC!riBdbxw+vJkKhpsHZ4Vhg=_@(JT@b=#$et03=IV5e}K(`OloPGN#e*d*7 z=!BqYH1Gt7Jopbxpz$B5G;(pYNob2lx27=Qr}b64E^>x9=$5doo1+a%LgG_}HKlHJ z7C0F38N^;3U`Py=p*?1BgS5^%fJ&R~jB`Yq0xT4^29a%@cno=d9ze85=@@Pac5|&W$T-HN1{$c*CVJoJ4`pis zgL{b;a{jBi?-$5#FbF+biH5(v$W*X`_06Cic%!nx0%AR%|Iget;wj8l`q?i1!rYfS z`0k|dGehY)KOR?x)w!1#e@j0hOg|7Usjz&8``|+qL6bJ-w%co&)q>r+9s>!6A)!+4 z&rL^p3w$z^Gdb^<@caLQ7E`znb*69E&}Cs$|4IFjhkf)z5Zy8TkfEr)S7)vlMVq-y ze0GVQ{*IHaCVN7ZQzPT#PG!B{65VTZr;jym{mKQOTiU1$`io}{NKC{+>tWdRPe&n$ zOHAyP=g@X?CjIxNM9KJ=9M1~me*W0rjr|F$vf|~(Ou|$=oQc+kME`Y2mxya0&)%xz z6*<=HvcpQal1!-aPxAI=jsH^I-;nU%iT6kH<_%1^F@;kiEQ83HzBm)+JX=mQN(ik0 zf0sH(yECzKHH^xem>#qxHs zq9$`JM7WA(P1;?iW9}RE>vTa3A3>UwMJ@SnsedFYNS<2m@(lOtk{4grMLDRKR+MBP=VB%>F!qMu?-7sXNsSK7v+S9+&5l28v_2B(~nI(v`{ zaSA61olF`gQz7$n2xp{i(lGzXo$cO)IPOhKq)OL(3db!xK<;Cg(6_g% z{U_nCb4eS^j=<`xS*>plkf>S0o#Jz9(IO#v)(|K!b*b>DWH#C?7-RY(_XfyU>aT`$ zspm@WnD{AENO7%K+7O3w>L6j-01dm;&@k&epPm<5=^=XM^h&}U0T=$#5JQ8&ty{)5 zbZnGH;~&9j*uH8CCDS5wBztqCpO@DbeiP3v&xB ztUEyiP1>z4dd~savG7k()bN@Yp!8aq-r)S%}ZSuav)|I6-~^a3|AxV z6^5medx7JFq^>ktnwWbHW7Cxn^T;?vvWArjehdj?IAB?&E)6L7)L#R}Nu=2jFa`<2 zB{j>aY%<+qNEeP93}<8H3>Ub~=zHq_onrtXbwX7)7}7@KxdA@*J0syqc3sHXcv$If z3Gg=YM^d*L)lcZ3oJqFS0;BXP&v!f3 zO#y&PB3Z-7n9%gz;tbbt&9|gNExpv3Wu#~}^o;J^Yv>bEvz!$*mOMy=hU1C=KZ|4o zgzZXW(NT!;<0$0b08>lZwB8EcL@ZZpmx(Ki^9Mur;#EKLVS z>UYL3)aHoL)Mg=EyMRH;!n=rTIx3ABod8=VrqdfBIUj!#PhBU z46R8^ATl>F%XXbH3rUs@(LLQ>VUAH_Wh^tMQACo-ZoEx!{RVu}`l^3NAH7*w{}yw4 z;8i2EO*I8;3&n7FRn`6-I=Y#Hqd)^qv&yanKm&z)K#@p`hwY|XLI<1`6Zl>eZJ-bw zpFy)~Hf@Xa*p()MmM%Gqd!>+m%T1Q>?QHIox^d1gH$>q`B$S_K!-zND@8m6N{C9HF zPVcyXYJ3ejXr5rnW~%6rZ|FmAEJ+IRv;(iJad_I>x$dDnDudPQA_Yq>qox24WM%X^ zJxISScZlsw)l3=T-x#a#YU!mN3vL+PPdPb`-&_h_cSl!s_t4&3)hEB7s^YGOI}>Dk zK49-H!o2B93d{SrM#>3Ng7a{!?Jm&u6dF)mPeBKw0>$kV*YlJ7bEHOvd;*cfbUT%V zvq$dFcbI*v0!1%;eM9?rXML?M_J7sJ0{d^s`Y*u#+k!Zz-xiFKs}5st3+f_#rj&DO z74L>?OkY0ne%xlocj7bVbA0MPPi&nuET-(nXUvzCc+c=IsAIOV|6YhMH?ALClbJ0o zszfKVaCu{J4=gx*{Duhi7B|o(b0=u%~o`bCsme#@|Da z`EBIsW%z4jV(g@|#&8jZh)RvW@~mAL5qB)IlDZ=mRzj+;TdLpe8m97Q?M#k>1iM&* z;bwE}!;5*TN|p8c7pd;GR8P>Kk80ADmg-mkBGnm|YT`$wG6Qwf#qSOb)Cu&=G~ELN zz~&3sE{A1@?wQ~<3t{Lnf1|VQW(ngBi^i4xJj^kkl<=d&=e-XT*&1vK?twsC_&3&uD}G%_h{E3 z`#wSTddohCSU7ke+KTU3suRLgkGQs)$Y()QB9>~;FcnRijGF}3l;n^Hyr!*;hMlV{ zq!$iW!?aHF4I}gcLe;)xc4~>&a+ixWUN@1qDl+Ep>CO78EgV|Rh2*7(O_ zWNDu;mNxWuu~S{_2y7%(gt3o$vtBiKkE2}dq@LcaJzQ+HO0IBuzw4?!Hsa0tQka+6 zcU;~t1@)GDvyQgKMXRWHKCy}Hu{sDx^i}7ZOW9~Ktk)ltcpK3o7YCwOJ2yEx3!dS( zcsr;-B75Y7qRV@;3EEyX0-^ zz2V_I{?VH3Xzl+euY~E66{rL9ned@gTNVG$+SS7n=u0ffr&z~&r`2l`;h?u#c>&gz z;bs=(Z=I_oeGV}_(xds>g2bxT46crVvbuvnU;QT>keiGm0C|vGFr-?JEGwzLMXGAq z6#WLdCb@Xot0Kj8mm*^2ta9a;a24fX&{xL@sbVhGYu{6CJ6=+xl3f;RTWqO5v`vrE zWl~*BD%x~bDJ#k~yrA8`a%s-7l6KUp#E@sa=DFY!dTKzmrt+#KnV&*Eq+lyGpOf_`ON-D z25**(pSko9=(ueFjQZBIKk!%bBeL$#wx4$Rf7;ofJCY^dfnk%5N+wZB%&2y?fqiz3 ztAnUfouW#;mbGE^nw{KBR((}49A1lffE|rH2A|^}**O{IZMr9=(uW+;9=KKS? z_}>+=RS@5r_lN2m!4Zh?kjQ)0XoB7>E_#IlMA7B+$p3DaMWF=#xj=`T`W}->fT`1h zb?S;31$2lxK^Zlcq;QeCB;$b&aV1Eyw~5!fSaJKZ%Ho z<@YwP<l-VH_PpUQK0X2vgyxjZPzz>HsBJZ&+z zK8{)l%VTYA$-Nd>_j6Ew2R ztJYs}z|*nD7r~tx*@zO2?-!>};oB{JG~e#&7~higH~IERe~Ir-Uh_Mo6EkYAPPcyJ z81`bkN1C_XyfCBi`6Xf8$4v?>q<`XyPG*k~eDoVPjKZ!c;ufmpaKhjQ4)4yBr}YGl z@cSLEiksDr@?pf3kb?IQ7Svl%zhRy8?nH{6X|3K|-9dgTpVo+FKpFfi-W0OVFtf<` z!#z7@k+-0x=x&CLo^{J@X2&a-E8#I8)Ba+g*8y0)td+NB2m{7zdWM2g@ihvRiE4~9 zMPUEMjW6t+o@$2Bk1<2&Nxt3Fpro5h(qHG>BmG6bOpC5%>H8P73>c6jcp7+t9g}#* z^HQggm6LpoAulk5mVF+lAzYLE;W!OFo#c<&79a9d8s6{%9spi&1WLh+DsYU)IMY;& zGo6cZrr|QqH0nif!KjVIjFMTVBVJWC*k+oFZKiXv%{2U7ijrw2D{tEE1$GpJ{a!T$ zjUBZu7vmu4Y+$hyKk(nIuU(rlN$^@H3GP20bG$}uH`O|}qL}nD-ZT~rza|h1=lWd2 zdCqE+@en2IUE?If;~CW1Fy=9#RL1qWCjS%jQ8Y4}^B$SP zSaavr?X{UJ#4E(oL#_XhP-)w&E6#7Ah(vbiPf=}Kx2Gv;+{G|mP~&&!SziP^WM1(f zUeon7R@`^f)1EL817KAUmNU3)j!e<@UgR9zP$PR#2~S*h{^G6p?a^@V#0OMo;<{Ks zcblYoW>N3cr<}6tWZf@COl~MrrAtZltsx}`Ds+NfpJQr~J9LTRI;CtZ*^uF7K1iH# zTPbldL^EZn5mrl}D5f@*Dpt~`5($f(Q=(|yq#}ky^x@@-UM0V^%V}xrW|`8I-7dkc zI2Ru!l**J}(pDzlWct+-fx|``YP2yPBsLY1qDHQ*Cy>t_E|;>-5?FtP-pJ&*|;xc;g#Y ziN>WcNMMjJ3D&^*6%_b+jm^;|`kq$G7bq9Y<+PsFnbCt3daQ|%jMlYtWP}7sMhKiD z=OZ~1Ia-S)GD)H%$4V6BEXjwQKUCm&y4~@gZuk0!+O7XsyXil~?)VRF*XX@Y!pP}s zaHhrzZc;zgB|U;;HhZrMc4#J+CTy+p9mg zDj!-W9Ny?r?wX%Ft2cQL+&hSUDEB=oBmIGqdBM zGD`pM>r3RvDD}YU{oR5-E2bg17r1N49b`9!MciMO$bOSdLB>!U=yw}hJ=kp;3fZ9Z zpT{Xm5`jI)H$ddsEov$4tgkanb$z~y^X-^7;I-U(QF5dY5Pkpc_FmE1G7 zXQr%?p-9on{+a7Dlh^tuZ^+cOV?#0%-{6njNcxSW2ZvuXZGHmdA)V|)iUH#gCnuNN z`M$A>eMoCxXdeWPj+t34h1CO|;5B75u&OyMF@9u|GNTm3Y+zLa;i2vqRI?l4T6?>dtIf@Umfsw3!RMl zyE}3!Z~dxv$Re-lW_DmOzdGT7PNQ~=aLX}<9-fI4g*suChKNI9iNF#qWd<=Mw-uQn zQfP+IP$!)n?`xK?puD8n5t&>H7B)`BPmsKC1bth+Rs9Hv3lYWc6^NgsZYar&BAnS* z=$@gWZwak@URl1!2g(XG1N1I(W~s1Fqm-n$8F)Vb>|9CV)S9eQ)Z37t6LZg8xqKMupVl~ZaCL1 zjBb<*)lQ)&1IUr%4Tg_5!fKd7^2ol5bXKtruaNs3f%Qmu>BB@_9gYcnvx{}IGl9>b zI0EYeBdUI6WY!@@W*s8ZDs`yQQ)7*ul5}M1^u>ZvDVj-JE^>j9VW%%s)Mmv zksrM*u>N7IVni@S4walXrfLa&Q2rko-DI-YFUmg_3aQSj7WJfbh?SBEVUK4%!nSrj9OVAv{Dk_`TLcC zUg9cc5%kiV?dyLfdg<@E@d3RgfH-((3Z%oE&)Q31_g9K*$Q|J5t*-PG$qwAIJEQhZ zt^LPw(UNVs?v}b*Fl_Rg{!{I5pU9ynddl!+wfn{}^d4Vg zIVO;!g5SyHh>~LpIV#C9gB$~pZdChWsFIH*nF~4vW(R5|8oE7?4TT`G*b7oH2pK#7rUm3_o@%9U*;^^hf%sdjE_Q z{KL|uI4_hD4fp>}^vb^(f5{sNvG;Zo;d?t~zjH}o3i(K+da5(Om4vA*gfw%Cm?jnP zX?18)Su|EcYA3$q40xUw?PMmz=}hfK-oQ)<($GkcVh4Ct`vcc*-EI=2@$65y*;xZv z@^+GV!`KR`#Y6}XfF^x31tOC{2he(A0ZkEm%Nfzsemt^N$J`s*T;Xb^PL629dq_!~ zc@U5n0>rVcV{$MI;-wZV79@pFPs3@zY$A2yc}=lhyiVtSB+iBnzGG*ip7E)BP5Ynr z#x_#Q+*t~<qG2L! zZignhH*SUY<#P%5S`N0;R5I&2`rHdJrA`MbK69azOX5Q|dClhwUExHzNT`MeTlh?5 zwr~o5L61_G37^pMYiH6NacFfGp<9&7gnV1mOiNuIFl__1a#Y2Is91AVrr`#ZXQ+Yf zHWJub*Ib<=aE@UkJZNvoNWl7=9Uvo@88TucSGSO^i+QU#>vi64#=Kp|Fsx!2`lRuD zE#H(7kQ9Cbq$27cRUxIP-#F_9oR{ZCbv(m>vokdvHDvUJ=oSKrvqM{EV9-8#hM&}t zQ7IgyUJcC z8nL*OQQ-ju=@5p$Nl`1 z>kEPQgO0O5*a1}~{IwOq9`wqXWR9?2Um&qg_f@$|NaFOR?S4m%y)!CpB@}6dl-^-F zN{s2nQBz&Q)f6=iD$v4AV2dQx80t@595n?hO1V7hl-N@lXIUh5S*RU#P1Mw*DCwSP zpk;NnDN0eIvsJ>Fh{Qk(*mSM1lVBQFP^HoMNKP;Q8i;gW~d}sUX7+0MVfn} zfx;9enP!#2V(M}9dih^&BnsOCM zFOHfX6^Tr{%0Psa&Ws8rODD@FSYT2oizN=vHXspo&QZ;Km16f_)1fc*7ePht9x-t9=NGHW&}uim(s1%?wF5h2Lv)DQ zB2c4nPt+hR8Kv&%8zlNo)Rdt}-V`;(EQZ+> zq1a*lDbJ25zB@59+q(nOfj6A3PlhALGzN7txL zBz;Fy<%}?q(v+$g`u9{alSCpGzq?b*n7WiOcjB6&rZYv0E{>X>6s0&DO3b2=T@pE! z$IGLpHbo_Yt`uNHy=G)tno&+i?nM@|sn@DKb*7B_mRcswxN)1=iuOOaxeQeDT&>f) zwbl8@3=Wd83=PH#qV0CUQD0IjD1LgHN&l1Y2vNo{8UBczLuWSDzzE3?NXB|u2H@>4dHn;n8 z-(=RsZvhYQRS|@)%Gn#f*8Y%BJ#-vc`_%~91nnYs{lRZ~VT;Eb1w?--=NoGjY^AS+ znsE0_D!*0XqL=1$;Q562xzUBM&VAjef(AMe$ZJga&b7GKQ017ANSAUc^BPb`NLoeC8KrZ=obo| zG%lVXEWHcA{v+{qwW&Z~t2LG>t;xjs9}}s`)b)*J>MCNHDV6A6mBcb*2F5b+!Dwmq zL`kb09j$(-XhqS`8i0bVZMph(qTlbyx`CBefRqbMr4fvNS^^5O)a#pIX9rwnV%BNSsOkg+%sf*e_J&uTJsJbkLmwHPEq@GgY1GzULkMOe zDtVG!dyKJ1It{u1Hvj@$NK`F!F691y;anx@(@c(Sgyh)LdxO+1^k$`dN8;(C5*kw#ripK*6(qec1aM|@+!(pl0XeeSqIFn(ECiU>BB3X?c%94 zRDz*doogNw6hX~b;&e49hdk{yy+|MO_>1dB%NYQ7zAYA}1(cnNwDC_|l;K|%BlWI} zY%#cAPoelA%lSy;H@hfxIT6PAqY<*dFwFCsH*2pj2CH6uy;&CodDeNe#)mQfu@$Io zgn1aNSnCjU=s(AL;!T#uh>S6QO0D@TCD_%|i9JjzQMIzrAw6kC~ za$r5bz}Cw^#(TcxA^ts#Meh0Ub@$~hla#b&-Q zf$#IB-)s6^iHe%+&x55m@)>Q$u>pFDFHrDu=4b5WI7hp;i2KAKVn-UWtc{+h47sea z&D;)#*g!2qPJ{61hz+%XRt4C0Z+7le!`R8S)FNj`RDd>rE4^H$w})~46t}h`YpIo` z(?D6dF-V=mLE&z>c$Gi_VHg!d^Gz&x%DlI@VNs zBc6-3z3J6t4~5q@z!vK0?4SqYZLcHVdVg`_E1VEdvsc6$w{k*AX#*E0#8ZGPE>4Kw zJ6DO6!w{@d%vJ*1@ZtXmoPl9H9NU&l$Y0-gY=4k1;w{~Vf% z%o_-}AtxHS7%Nl%7~CsvZAVS_WL%B9+hUB_zblTw#eS6Ew5m*z>*d_&P`1O63c8TPJgG%;T=S?t%&6Qu-t4d8|mJM zMYF*;#hx7(&L-2oquewL@!ds(bz(P-=EQM8vx}%TLsGn!owNfPmO^(0G343kl5G)* z6eQb(n*@q*sWl!g8wx`y2tFs{5bE!^#6d8M9g@Pzmk|W_^;)FN+BLW$uh`S6kV>zm zuS@ODqTKHI0{V_3g21DoTAemnnhX9f?zGr0= zZW*qOQ-BZ$K)t@W<8}Ze>kUSFy<60^9f;K%oM>e>O)@T%kXcPSbuJ-2+lJTj7Jl0| z7z2Tde@Xx;?JnV5E0}~Y6u?EeujN$()!_SVWOZmusVtm*V`tG8V5I=E+$=B#Edt0e zt%X+m^t%v%f^vbA@&Hb(%&u_a0)GrAp@Y7nV9T95z!(f2^PJl(o`CcRt|%3$YWQg^)W&JfQtSpkDJ@E+&9@!=duqfFWPA8i^vAzs_rEC`e^;7vNznGYSGx zPqV!OB&_A!f^chtFtC>M3qnJ*6ZETPWSmxO?ae z^QCki<$YAjd!3U0)%l#z${gphF6B-LRJ?2ib3>fZ)s}D`*O_i%I+lDxt_)u&?+elN zY4pEpKU)6_q~}el%Iklnr;Cb7AIGMTs>t1u4T{f!iPLOsOSuN>Mg`1PMtF8u z*q8%~9qxc#UCl+C}m%!)vx2PrF9mXYh(Fi%hy$c^|~_>Cf7hA-!`-K=cu`AilG_5%O1X+uE0OxAIeUN(%)cA?k&?lxFE)SDF> zr>0okyU1K|aFW?qU$uQCabL;xm_qmsH^s@%D7Qin=AZ zjkY)A$#6?>D{c4Ja|7m%F?4922-V090dMGr;QCtwWhO+Mjg15sse(F3WpBPg>Oz*w zt83>M4zA=5B7L5JuN&cIr#C=yLpKogV+JNt%jvxo!Kqvo)ua;j1l6pEPHd3(q&mFE zOqMe?2Iq-W$60XRGimm;Za*8gLh&8QOUnJ zT0xOg8PSal0074vF%ib1ETQ>7ob_3DSUaw9ti`g_dR)hor0lp2xK1Xb>?BrnWEkEu znCIl>Qq~?tA%>8k&7{$%kAI_tj}Tvm4B07wt3@E!OXO8aR2mxF=7!5mm!;IGSgd<^}UFEiVp z?)`UdlM?va@%!(`F&-cP{dZFDQ2*t;Lv1C0ga(Y;2R}>?X3GRMgF8yi&Si0ak{|vK z{KF)6dI)G2L0z#Abb1H=^r4;g5Ppb1*UHw@u?KV+|NkC5?lWx%@c71wpAsG)OaBXa zJo2FbpuA~z_ zI|Og6@zde6kL?hjU62lBLX+7;sxT2CWHv7o%5l)=-8Z^*AhQi@Geuwl1^BGgq}v-n ziQ;!DVp2t7=8_OgyS9?GOH|eEin>*ndGOWU$Y;VlK9gsIKNuc)iMV)#=*>}X(nx)+ zn1f19*|Lvl0(X($iZ`h27b(ppJ%d~q6E6Y#$Zz`v@z)Sy*xa?{K{=NbVrcTMG8?4Y zoASBXJgn4v2$9TInp>kmIlr-T3=2bEGR221%H7pM!T>@z{2 zKhFgUdux6)2%LGN3$*OZg1}$h=>n~y)*$eg_qaeS^T8m{zug5|nTvzKnRmHB$`p=o zgG>Sliw;csYKKX)z-|>f*sw!1y6S^?^h;9;@#sCb1m|ZV9{o31njyz8dLUcXl>~Ib zUp|Ze!oZ~F3mM*u56Cc8fkp}`wO1s{?CoFVmPoIC}D^Y}`fr|ONLvXckkY>GD6*q05X zR^$O4Y?Ya&(BSHR7>p1o6xG}g+QeQ+)mc<6) zicP@9n;YbvjO(y!T!&4;l}h4D&A@fsk$g_7=My`DPvTTQho$+X^12Wm*wY8(u{zGH zLLCP2Umh{htB1sYkyX~}%Giu!^qj3Nyj+UxsUNdF*uJVsT$^hwq)TFVq&{Kc%8J+th52YY=o)MB6}3slLbb z)%V90`ku&qXgx+o4VJf-snDxckt53G@f$g%r)6Qvj7T3pP~KyhJZ+kh@q^6E z%-E*I3#uxLN!D2wnb=R>6PZx92+ z3pRNZlpK^<2~)JVtVX?T)U6}G*9W_=dqtGOZ!r04y#nbH+$8E!rO!3tZ5++PQx>T! zOy--ATTIH@wfcI|y-I(BNmQGdb>wOjvsEGXx`dPicm>czY6-l;WT}lI#9M)3c9SCy zvYTkJvfIlW5}qcz2_-ALNt4_06S>LciwV5Ngw>tG!Fu)6UO^z@1{2N>iZCH!JBuSX znIx}rnuxc`wbwEji9mojH8*%%gYu*TqE^^3Zi6bYYP6BzUCm$&ug?#VJA8SK5eW+t zUL8oAr>@Z1tsVgzIg9Ng2v0fonvr z4rKCEbKU!wdR8xTy^W<(2G3=>K~)0@yux1A3u{*+F>B%mRpr>Dl1PYGxIn2{MCJ~5MFj6+3Q`>( z^$PbKWy+q}RLUEIha;~?dr)P%?7{Pr!6TS-hm=>?Ba}1?*@lkV?XgN~FAuW^72RMj zNQNV!cG_E%q{QT*dUyR${i1E6#$Wq>5QcPO>_5dmkj$>b1F6z0}}Jz%Z`$5Q}GS z|Ix1oi&mxRPuY(vDfT9}@kJVK?_nsyweKE%q{JKT1tJC{+|cKl5)U!%0ZE1-+~Mb# zdQQ-9+h$4C;Iw&MGs8_}wo~76Ep^+U&2Va-)7xQagDqi>DeKr`kAzw`sd<4;4&8}d zX4|ZqV=6mA?Y4oacGLO^vWJ`9Jg0eMXYAE>nvl}HHyNBY;Z8N%J%!|EGTfyaf|rd1 zeZsRl4XTdp$c=#}%uONH+F<%G#LNyJ32L-6iX~_VD-m-{jfT|`oKul`ftHIq;?ylt zH3W(=p+bypB6Cb{hOBm)*-qdnu-SpGO?X;I=9$V1YtzoCU=NyODl=qv#~a;IJ58g8 z_StzJ)^55ptaUrI!|bL7Lv}kd1KMw1pzw0N9g`X&l^MK1beSFRVVS`bL&1CGc2a%- zQU^D`tG6MIgI%=)k_9GV6Zp6Id0qMc2nwT=&3ioAW>KCu0N#WEl zUh#ZO5vX2dDw7kpCebjd&K`waeu;#J;LIm`6ji-@KSGv0CGQQ`xT5tJqHuAE|5gI4Ew$Net2hML^`0$0mhMTg zHpcZjxazR%pt4X_{e12HIs_u|Wln8?oq42=hzTow9yv@6Q(WDeHhT&|7eA57YpdOR z2*>jt!q5kJUBo0uNqh2I4CJC+&{oWj#90`LYo9lP*OycZXIg3;AEOl}aDt_d*Dz=CS$Qka3EZO1P8(eReZarzs0vC9p&32y&K=1(xogD6B+oV zzsMz~2L_p{_#Ms&mksA!EgQ~|mJMI44}(=UoZ%@O&eihfX)8_Zz|CF%w*Wrouel1| zNi19bEez%fLHAcVp=a-svmFr<`Gv5gnXeT!*vT7d32>y;6(QDit07AqHdcW4#7hiY zBE;Bo3i+*JM1*7wUn1mML!bz`!Ek&WA+K$vGPD@BL}E^?*0Kli_|YnFT(YZVt6nkJ=}@iD0$~+HMoH-6m+eP0)6mpzSt6+dtC; zJ^cwM=;>)ICD87#s_vgFejNbobNw1&N0B{l;x|4K<)=HH==vAk{SoUBxLShg*;W*9 zn644oer3D>+VL(G134n9;T&C&UyJs3c;vJJ{t5=8YK>wiRkpq6;hXSib#^3Um72^# zbmH415#LTAzAZUB2GGee3?fM!fHTZ8GHI}~y46Hsrva8J8Lkb4D~8I;nh%64`pU}^ z;#yoaN0e8q&6Qk^S8F_o?Wb5kImlb8yjpOU_p6H3(sWr%lvS(W72H#?z`mFS1d+-c z3tp32$YWtP^;>P~x7yTiwW;4~Q;)`J3uG6tu021 zU_-TkB+7cMiKLHhhxX^kZ{02h3fpGH1T3-%-Iqa(t#FR(57xK^iQmf?g$3a&W)W4_(eb$q+0hx6@XAKlm}@K5h& z5ta445RoE4ID+&VUc}d&7uhwu{X*{v=8cBlQ_VXd^j4d<#JtHN%e*Evg)*rknXTi9 zu0!l$47(21{bLw)JzK<2S@~6@K@5*HKxtXOs}y&_V~C~I^-z5D=L$Gg3C8TCfC0*Y z3?CUVl-?>xEU`?<$E?7fmLXrdn$kRtOO}t4s_WobQg%(zU5u%E-YxeeKvsYePWl(} zcFxj0cJ2Eh-Wt#R!UQn-zaK{p&}({~LNO6%ih&5-J;IxIY#qpb^Cn#STwZxAPEX|9 zEj@;B_w>PhO|X$S;1F!wh_u}TH=-utM)O9oz#}Gmhvx`+O!^MbczO1bxE-E}^6VFQ zPLU@(Rfi*p@npJ=kX`wAGI%(~ujDgvjcQ=$ikz~RkDZrCuvbJzv2jF>U^6Kj|ENlT zhR-Q%T4lr8s>(*O1<@ADH35$bDguCHi3yR;it2O`8 z^0w*Xit&r`^i(_(tBN9OX$;MRkxz0TnK%Q&}6pPX?Wx8*_Cm>Et&0c?@GMcK5hK8 zH>z(-TZ1kR1_&F}2h2J3q>p{8{pG4XzJ0B0CvV4B5U%#pCwXCCtN@uSso{6JZzhe8C!SOj1q)@9j6Ypukn5nVg?S1|@se94Vq9)q3 z?#~_bulm|&jiR$Ioz*{ab$j`_k~3H-Yga=SPTR!^y;d%oy}i%Ll*5Z9`~{`GQ~*Bi zera&re2#TU12Z*HAd9!I{;i^~KUokQ6XxiJiuOTvye7cFg>aYj+m*J+&< zz3!EuA4X4hD)0S1pQSv5PhhkCj^4bpo9|#GlO#wkpYSX40Y!8kv?bf!jrFXDob<%RI&#^1HS zVee1g{`~w+-J>w`$DaS#QL!Tp$7)<3XAI*e$DQ;aW>@l>o@bY+8EnHB_c1$J9Ua(y^#BdyVphzaNlai2tev>3 zcE~EP`6X}!8`f(7^YP}@({`)&*Rp)_)|@q@z-Qe5Vj@#p6mNU6Tl?%|8d=aza zHT_&QX7*1IM2ph*#r-$qnRIk;%>l1Nf_Y8%Gv@Ke?Jz2?a;|P^?pPtkj^$gDuHxGx zy*FP_195RjW_rGnoY*$p?|D;lNE_rUO%!c1nsAzZ2;tUrarhKIGBfmz_{62d{h>F- zhb;A)b))CP%L!jG+%G45h1a~1+Fdy%l(Xy*zl3tYs@4YKDknMd36+x^@`TsCEC^2w zVOU=QgBqDBp}>{H$rvBP9Q;lRq_CbTd58jQ{F00nc&UZ|q+2{wvMs5-pyci(=F!hh zWRL0|&-8qp&c*zmm(jUtKT2eOQj*N{+?JTwR^#`)J3-hHwb`S3jLeij?izoYwzMC> zz1fKdE=f*&mGeIFEWes|jbv8B!0U#t=Lsu5rj?Qc{U)2DXU zlMqO0)`sVRgs_{p2hSz@8x41!26kMWK9+B{bdqoP^!NCdq$~Lv!7AMO2x=WYvHX%l z{qhIJG#fp!AMSqU9yzh+C8PYFfx8@cn5Kj@B|&%z;m!>ZrN^qU(G%-0DH%C2c}eNW ziAP@2bM(aOOClrrl&h9Q{rU$>M-$#x$@-1*lMhBl`A0t3_fWt3!HQ9QDi6gwQ0WHK zq*B4=|LBoze^YWIqxxd|`J4zb|NfjbA>DowyVuQkm$4~waJX%_hPhcYz)+{t0N^M% z-~j-}rA%f3nDDa#z_>r=Qv={$wnD&3c5-xW!Y_&DBy1E+r~y#p-?rxlsqJ}qbg(lf z4&gqJ#>9C?W43<9?tMTzFS|I~ZXElea|ky&JUG&-YA3eFK_J1$-fADTZi}#({@Q}8 zl6>OHi3^h)YG19L_*CtXr>5;G{H7ZR9+1|(+UNbL#bX>X(m=Td=bXcD)&}@Z{yh3e zzfW}@<@0~a^Nhac>Zm$AkAt;lN896Y#O+*@@LK!AuhPJb?Kzt3voNTh*kxn-`>d*D zwvXP4OJ?`Dm!HI+0ev^^UiI6IN79d%CcJ7C+Nbo5`!gzxA!3x;q}g$42f9rv+>-pd z(r{bqNEx;-*#Bbr{ZDN<2_*ax6h=e1lO|!X@m=QNF8-`Ty6&wtTis% zo;#3`0^}sGzhOAM!wr@u{fBG}ZzoUt`TKSn!>=!`(#@uJVYmDGlLs+KSb*kIoe`~5VJFa9U`eO$iZ=@0b#ctQgBjUBBW8mgfR8ZF^JZhgIyK6Riv z>78SZKPfFv_e=V3JCd!+*)GUE9~Iy=kXpo58*0H2Rqv}q**+8bY5)G$4A&p|mm(4+ zS%%+8aZLC%5s=J1`R$qXU(^0Q|FNxZbv7;z%3c(Ew<%gZrKqSPy?1PBQ&fBYZq(ye z-xKV5?T1mH^Df)o=kiqdqD*P~F+V6SG76Amb$g$OjmSJTI*`^)TqHHQ9xE2=Dkg0d zAg$~}sOZD_Ok;Zk1+M#fCx9q&sKgk*fAzL;0`$l5Xl>x;L9e<#;zJ z0UqbZs$K67vF$t`^Vg8Yjb4~Cw_zW4>u~%lC>7>AIf5tPrsBJykU*bYJz7(XLWhr!^3%}q4>F?;8zJnJcR~LPb!3qCikoV&t@xA$x zcs5?#wAyQW73lH&;e4yJ!@eJD*m%(NA2htb&}%x4poaI~^qTjVV@B~`d5}`6y!i(t zvy;1F!>u*eu&rTQS`3Nq?)xo4<3?Z{_{S^5L)% z<8!){GQ1)7AJTlyqH<{T~mySNu+U zUvhf$k0Q&;!bbL_kt?Qtsn&nkve3hh&b{(I5KQuP>)Nw^WO`~U^*r~%dTu9EJUgws zI@i1pdoC!NHZBVnL3bpu43KtKQlulfd7#h@?>~RmK?0tZznSm7=@Y&AL*m&f-5USi zTGg<7ud-IDM*R~EN z!w-}}OHcsB{VhPgiQr0t2|1ei8UgITNH8sHE+ZHSg>3yFq{c~bEK2ety2lz{B7y4P zK(IjAYr4oKnADvFB?$JCU<-XagW%i>J_oesZf3_7FdNhGaYRDnSfs4XT|uzcbK|C- z7wr1pDt}p9`&ZaRiW+mDKcJOcW$zcQc1{~BpG0TvS{S38?vI0D$Nb4Ve&pt|%YKvR zHdKjYbK1RIwrB3xf?U17^xZ}~-n?d?fjYQodT~*ecisInx5?#Q*SgF7jdxdZ{uO(d zHUK77O|MTYZQg!{OWkBp`F2Ym z$+x>*=a-}h;O>#`%NN?~38gE3Tb2c4GheiaqW?X-W+GW97bJUYLDs6t( zyL1Hrm!IMco?NX!Fq!>@hQ(0qpar=yL&x0ubEB5iQ)l_y${4V2Z9!rQ>|Nr@zBDl)vbWd#7n9B#T=$W&3KvK8qVZOuF~TY>7%M zwbI0ydBfIcBHNH3KZ{!D+rDRwUNmWT0^Ym2BsH3Zzq&f(7k0@HyY%ADX}Sbko-VC?NzE~$iqF2(!?fg3*pKkY|}?99&n%bg7< zbkM`r&o0>trgV1ZXX>wa+t1X~?mtuM*$XuxUSeU}MlU|6%l=ez!0Lp*(uV9(w{~3# zR!>k2YuT3XDvc>{;5FUoT-uSHt9$xXg9ol6S;m6|4{1zqUYPGo!e409m1uk4ix;od zpu*M+f;M}##ZTo!+k((dgs#Yk{+rV#bmKgi##2Gq5INh_mPf+YTFCn-IJ-6xV7ZC(-2{!~C94Bktuh_`M2L9+jvc-y)I;?&r-$qRScW%2$`L794&tYK)v zf>s3u(Nzk%$`!PVf|S)2l%pUOn=fchy#ER-NIcrGphtp&o>r}&tVQRK3=7#&YiNq~ zXS0_mUZYOZLF-+%=a*-`U=8m7q?&W-^K5}2!Q;by-G+F|CGhxVK?x-2-l>EOW(38%+$EiIUogI-ZgTeMob&sga_-bQ z=Uzc1*>+C$Uu}`r^#m6fm-H}rY;|N*kNkoce%7J zWxIp#HDqD>%aqvOznXfX;;~c?r8TuQe$dp&nPUwRq%c@G+Lw)!<=hQwpfdEzx92q4 z<1&0`qk?j%AhM)-;P#?**Sh;2+O)gNI^?j@GfP9b%nfI_t=_^7fctc~HLg#v)BoI; zmb4F{a>pxAe=p=D!I-jEa$TTb5$TXsx%L{;8bLk<>IVU*x7(j)LBI_7V$!YzXr-v} zj``7zJAS~II;%u%om_QA$dQyJ&`RR+I~7UCNTrmeQLxF5rY@A z(X&}LBbxbpv)5EwFV~yB@{C8!Y%-)(I=8l`bBXLp#qonqDV@GDp4nAZP+j{j)Dou_ z{}g&PFqlU{QBZ!z;mdpkqfhVPg{)53#WTYIr{(D%#xrL`V5O#yPG$K=?yUmpGsco%UC zo9z4$xxulVf&CWPhe7P1vxjkS5vOGP$u!W;FIv1!F{*rih2F*OTbo$pjKxn9IpxRal z%uEm0V&KQLOY7tnj78FnrEd6KWH^3a)AVl4aV8eg;mB2)*K(2t>;i4ROHC6O>h0n!mHxESx=N>k(R{ z30N)~%`*w{>|w>=+qM3hME{j;#9kySHuHs6noUe>=B5T*4D;tm+YMX73mGu*?Yl{a zi}98L09>&5E_SXG5z`FqFupsb_Y4X{yt7kT-H~cd6fX>8mlwo(SG1vk0FJUE-;l!0 zGy))4SX|qYyD&P4{mf`19&h=N#-B&5$b}oZ{I9SOkWF#ZdM(Vbplh&PJwC@{MLN3zBX0BCM8;Xs}NWLDF z*amyH%~eQ8T}9NolPXg^R$)hF^GELN2DMZbb_^VS3&vd;YoRuVJmNKf8Cc25!icTE zWVWg}x3pt_6EIJEO^d=9T&!QvYE~cuc`VUHgcU09A8Bkn(``w0>2`icvSUMOvOX`G zO++#q+n!k3w(V(vvT<$q^eKQ!aXQAg8(2Z+%ZcJe^x_L}<9bd1VXb%lsxwouCEela z#kT6SDAu?Y!`1FJJw|NXnFlRl`=Lc$vPLcIo|ctZ@4}y3qY4W+ODuCl3rD)+g#E}0 zd`$&rK8J)ZxcQo7@sm_oX3be?Wv(DTndzoF6UD7eMrp&QUeoVPc-JpK^VZlBdYI{! z$PV8|Bpr!Z&RPyE+cO zm1Gm-^f_o)B)yYPpGC9dncl(~|Au}X3eOYD@pgZ-_rEw4p{CL zuk;UzWOn}H__)9Rm_@Tye(>O@*MCsd>wjJ}QtkDJ704IyBfeaC^R4Gu9Wag-W@obNqU|Pdae3>6_?CV}+7nzR0mO}*=AO?E9Ppb09zUx(P z@|JABtlFzwSmP~emE!>%%jI|!$7(sA#qqQ~OZyb|_w@*EWEBp3h;|u{C;x%X|D`x2 zJ-iLG`d(#^YgKFIJKmC4MthZ;y(Q0$_Kw`Z>vdk`+uo8V@NDF9Xsi7p7xTDR`JO_@ zwyJ>LmUxw~c}v#4>@9hQ{}*5ODj%aIgT2Zr5wCIvLsD5aFy^J+^y=DiKg9pvYrIO_ zspb5?#Q%C8Yx$d=<>LPZ;&a&NU&rstYPz)+$A%iOUPk-Z^EBU^Bzl9ehbd$uzwZVG zZRYnK(oj(Sd!%^_f18&=V`2-T_Y+7hOO#1^8yJtSZ}aM3L{}8e8piWB65da7YhqsI z`k2?}^%}4I72Ft???Z9r?|EYnY#IU|(yLrt-<#LoDz_2wZT`=V zP{k9}zm0Z0PQ(UAn;iADEk&Z#`y_gp794gepHw~bwL6aEqI^y&_m;fAJ6WXcQU4b2 zPVtCGQrvY$4Tn2J-`RSlerUhh?2 zZy8uB`*{Q6&2s#@fs-GQ`2&^y!EzJ@F;^8SrXxpSIiu{?MHCtHdM~2UW?=KM^T-!T z)#-bjEMG)UiU3N8n@hc|UawXHS}7^2yvqMS2|s=ipEG3zplpnClvSDg*A1Yx^8T@i z)>1xj#JE)cObbMH#F>10*!#G_F>klys)*|EEqVDvhNt()!QO5od28*0 zg?(WRWqff=m8$!x89c)A<--1gS}XF`MeGWlMyLU~1;t#YW)=NKTk&zKThga|!H;|y8s>gVKuj7p0KhAT%f4SX$ zD_gxvE!NfiKMl;w{W|}w$4V}gQr*xyjPRCgg|9>cTl6L_g(3JZZUQxjM% zsWBCN>Zmd`p^DGsF?^;>;4_0Ala)~Sl&zq;N3>1w1R#q`JB8NsBK{v@fw3jlvA`$!1|gGOp_o#H%P|%oq(szQ51XGoBozQ-7y8_4zse*%BV4lubMA8x^(k zPoBz``G14$s*V3g*t)=?`fyB?GhpR3s1I9OAKoLXT}Ctu%~pH6wRycs zYkS+f-fpjWz1eH)7qU_E^Qu=*-a6{3qmEQ}{`c`JmwDxjy*>}JK8pEIL~65%itWq2 z=HG)%1t3;!WB(aYx8>~M&?%n^nJ$Q$``cJNx z9qqwx3kO#Pb!U~c{igPcc?)|(A1~Y;-@>oU^=+Q*8Q;qP%ih?9-q=_2JGNK0vsZR# zWRiEvWBjA1bH-|q&m(-cKEi)_)azd!jb|^g?fjH*J9ly{|7rN_x|#jQcJlm8x;^i| z44GZK{mJ+6F8%pW!sL$j@c&hqoGyM%Wi;ybUJSf0e%qU}>?l4ff6r$P0#{qx_~)7W zt?;$ZZ{2tMb~esRZSCOcZ0+Fb?5p7EZ0+FbWBA(E4xT;*ceu5Ks%y(7B-q+#F4iIO z!($6i5Ia9OKC~VG8;%c-h^t^<790@;2TE|7bi&{N)9bP7e+zTZ!*3zx{$E~|T|58D zarPbd>OZ+Q|MhwC5$8mR({n7e39tVbM+6vuL>T{!@Q8q){GW!$t{dh5e?ELn96t|< z{~a8^^ZD@ahry=*){&r%zu-hjptt^SVc(z{cKg1?MKCo6^FJlRrcpJ8Pke&7fAFbx zCwM9Ua8>JC`G=!g4^y=MEy5;O@R=}BdB!MDRY9J|hqJBTgJ8StQ@65Np zGRd3zR)sf~y|@w%e&uR0cVOZy4;VZ!d5mXG_siS7KD4oXwb$pxFtu0zfLH%0)rwR0 zC?f-ZmTEPiOiwuj*N4F@hl$sR8-q$XIhBu#T|^Bq(v4;G1Yytc4;QQa1y{q{t_Dk; zuK`Ye-8=ajVAWSLHRZ4c`{ekAh1TbNQM_Z9GtEm{yXm{U8@*du!Dm$kxebCl(k!$z z4|Gmr5ZjSvv8DN2=QL|6E7y@`iKThCbD9mL*(88#o1yOm_I=F0&(EMiYfAV$sn1jT zJY7P1z)Gv7j^$9dS-BQk`iBbA!_@%fjW-GK)otPirfjB|=yLo_{C7EgvD@YNr8xEQ zxM8*QhJDwY<%cuou={ z_U8ZhO33dYEvHxZ7Zn9|-1-Ke<^Lah?*blGbv69Ygai@|o`6BI-bM{d6qU5vCK@#Z z6FsQ|MzIof82fZL8K+`)N_Em)s^Hh{{Ffen&lr z0mK^w1m^p#ea@Lo5G;Og-{<*1@Aub-$+_&y+H0@dUVELjOZ=P&?`&fj1Rm#B;+xSX?$)IOUmv{I3>gM1QYvE}m+UmUuOW5ZWF z_+9?36F3`NoDmrn?igDHVqQ(CkfCi>gW9fsKUcpgf%S(K{5-9SGB{P2!AWC>8k|5t zonI)B7@UHU!3og+4GtyT>}+Y)ACB*SX3-?}|1S5*moCHkz<7gJ)w&@|ob+Rg7dS>f z^8ai5=Mj8g?SNaQE#O zN`oPWFA!1Zh&d5?Z}3d~)(1MQmAPyC5ess0=2sWs4C&H37p#%;A{AjP*#;U^jf1*E zc{H9PX3arw#lH)`eauou_Eq@3s^Q;++yguPD&$_(@HH{37WrQjv(JLr!*kOL?T0(+ z+xdQA!N1F1%JH3Ovl3i2%)Z2s89t?;QX9Yd;OzBpoBuv5#eXsXYJvN2B7p<@{VEbr z{eDd<_%eUNgzU8mm*Hbv+n=BJm7|dig$HLlESaTPGSlDTXaDNjfVO{=%ZamHPV9|O z{5Q$F16kvLB0v5+XClf>h}!Mgj)q={E?vA`W@^3sY>=Og{LEVa?^l>M|38ZEKOB`g zRqeop)DFxmMGe$~*Ka<~W_x&jn(+FzgY)|T^?vvNtNL`Ptej-k)b_Tp`FqZO!YwVt zmWb`RhM&!AFbkK875^DO$wy7=Ry@K zCxLMrKE-J%fpKKil)$)U{P~>N5(4kI+D;bcj!i$v-=C9M-?@1#p&1>UZk9W8w-fV^X_3;&{95gT{MG7rWB$Q{VcT@TcYJSG^Lr1_RN^ADBygEqqTjFOE z)^xNE9kQ*%KeX`uj@H~EyE^>2D(dYwq@m^2F~rUd{w%TRn70!8;C&G6xA=EgL5JTn z5syL5e!!EsH3q>VPomro9pRSfA-E0m`2R!kZGx3U#;}AW0u-B8=Tad-S@A^76-P-@Eiqkqa-PHfuNv9>Y z;xkNaCZaO&*~Cv0dnbO8*j%$dv9-oZbWA8qESzw=FEJA@X5t;ZmWhS<7CSb5um3i0 z$EGp;cX|`6C%&2Jn7B5vx+an6sCh5(3S9NdgjG^yQpf0v`p@@tZ2Ecs4RreR{#J=< zMEd_!LGeXNqN6i)ylQ0O#C58Xg*D3(FVM&f6IMz6mO&l<*@NdN_7-kP>>XkywibSx z*gE8k#Olt?%cZsH0@8A6X8NI<`FVEB(}}&EEz1+1b#^b85ige!FaL6@j3yHhXEYuD z^6@Pln=Zo|Kr@x%i|+Md!Mc z5T%<=>KI*?-#tKnm#E)W>UZ;i#B(*<5>M82Cw^CxN<3P#N*j8=_`;B4^G`}l>0EMB zq6dj#)-26zfJ)s|T9xRTp$(lQ<>fed`P0?XK;SrzoHO{BJ%FDPm+=$4tU-^L-%AV| zA##Ip5Dv!II(S3kXM;5U6%OF%gv8;*W>4L^!Fh7 zH$r~$FXhQS+ThK2=(NGxw87mxtZg{3$jq)58coda>^!MsQ(1n?0IlW|^Z-smrB4QZ zhYE!PZn=Ov(FQ{sOyuwaZSaTMV2)iFB(L-3r%1|7l`^4wDio|cfpH1{Qv4%sR~vMv zKyVEI$_2<193Xc}4Bz0CI1s;FA^mc%;~yG6h(R$^vFiHxG7b>@Uleg=8TK&aeTEBn~b zGMul2uNJ}AdWEkRg|GDo#aD4#Rq@xxSBv0_w!s&5!I#M2FXKzK{a?pd4fv`#Onf0v z4$m+37|I_&+vA1pDpO5f*`g1YlH7>k1 z$Dq63P+IF9Z{p)ywj?&(vO2Nvx|YP^eaVD(-@e4&@vVKh>Is*tGNLi%JLa#8@Biui zCHVeMo`dhPT>KaC4OiA`AIYBJ?zd~%jT1%CZ7$HDi0F8(X{&S2QL{<|3V0DUXph8}5c-@;C` z{k^EM*m{XO_xq*ZddAl?&C+6^7|JhuVH$k#Z3{q)3HcE1` zGwi3Na+J16RNDJ}wVi*|$%tR!pU0wxOa(`Gpj!G*=9{8$puxVtx^sSZbk#6Kk7m!@JL|%YAvG0u0?Es|_x0F`AAkm^ zF0~Z;7-FYy=?k#DH7Ci4FX~6PcdpXo=YKJcGu~ce(aTH7>0?vpJq^50*)hiZ!T9;h zD52WCUGm7D!fTa*vE4jIT8fWglDqWym@IS7hl0yaAM%sTEFb8W!LzKw1qDd`bBvUG-T`{_$ITawB!6EJ`=pHU5+UkOB@DKb^aS?cdJ zf596&o5gthVQR>_tbVH0r92oDpIXF$Q|BK`O*=8P>PO{99x3Q|3EVyy#U&;)MxbA` zWi}_HzyLx3cHR}83?ai)L%!#QkK~dBJ*NJFWa8NzdPkb@(WW5#F49(J*6pLNq37}G z48gR_JvGcAZAiL3>y5teUHpmEMCg#in6xU((vw-0_l_13nX5Q$9T&kk9IFQMiTNyP zTZGyEEYCU9O_=R_o?1q98ZukaM{Rfy{5H?#w_NSTYKPyJ)V)83O!C*;ElD=tA3BZw zLN$hXtJGdRmfX3um9#h9#Ye4Q8a%>pw^(W9QmQ(OBw|@ou5P_Z(L8nj$f*K#eBg{* z;k_Z-_Ng?KFqV_|H$LQM^eBGuYZ6i#Db#kZ!q0fB^;~jm2_8@ zq(omnXzNQZ!MhfXV2+7CP=N4|6v>td11{AJTa#4*_dU-yTS4ACHN~tCTyk1 z@HtR1Zwja|ucxNngMFrpo7O8n;x84t$PXLKq0)f*vH8LVduEnb`pGL%#;kzY*1xCHtU_b z)A$SizFay0^c>6}U8jbe3Lw;`pm_-ulE1g<$UPrS*)oz^<5XVu*4ny9)q-M38)x;R@-2i)#%)65lYv<_vg3xJtET)DZAD5pR@-!`y`e-d8UDUOk zKTNc%9>1K!bXv?0exBs)hcK^w>|Hl3=`s;2rek@Y83DZ8tcr&%k#Q{mn1Q8`N z|EXnIDr4kq6iI=(&?$nw;kC^9fF$&Nyp55%r3a3l??zI~1TXUreAAp7CiK(H-(Nd_ zf1&=m@>}>=kL5&>n|e(3a;l3dzQWj$ z_7H+QmSwaG&z3>mK4X5^B8SuoZF=#1Jo0TlYMe*w;bg8}_G#VcD1%ud!D#Hd>#cD$ zdl7)-wXx?pKwcrE^}FHnHkh!bZb$O3_VZZIHxj}Rq5gLMo35Px+vkIBeCn;k zB{%M|D5;~>;=~2k*5BqW1IQRG<<)ch{5ZkDrzFq{mu7|fcX?ock7U_BS`zM#O&6A9 z#G1)lZ)9U5#m~Q6{&3psI)yJu$Olw%njoiA%Bil~`c!oBZ6-yu$! zlh0qRpGf1sQ0KU=nt1}7oCsJWrwmS#lxgym{Nl4_`o8bnR4n@bB1e0CZ=UB|4ih@D@@p$M!t2kG&fa#glF z+YJ7Gdsogiyb}5~OQ2*9LDO-wwF36NCKe$~m1n@}FMZ zA!IaCH*${Wkxoi*(&~nL2F!XS24nUdsofu@?N~piC|XRN*ywDzJV`Fc$+?gmOwTnm zp0AgEp@k^R>0CLQ zY+r+RUw_)IYTU=SrXKD7-9RDg{#ML|%BFMD{l$43J2DU(og0YVksb8zrhRO}yfNPW z;XOY4v|#Pt4=EMilN-7_yr+OXdbEWh?1BLtwYWCE497R<-NP=acHdpp5K!d1*ZXg? zK@kwlwX76sD~)qx?03sKHO;XhZ?!O0WbnR{$p!C|KgAea6^!4s*O3c3>YNMj@<7Z} ziG(02W;L{|=Z;~Gu`JvPakdY?@cbrPnYqNuS7e19LW|KSWw4{OjkY7l-yc0~G2IymqbF9Cs9z6aS_-G5}t;b5Q(yBy8 zXU@rSx@6j)&A(JtSz^|$D(^m5vnNYi%UBwK1?wi&Rs%gC3899upbTfs(4S#ba83P`axoE(|K_}Q~0$Gl;shJ2r7j8Okr?nT9(&&0H;N9W(dANVeIWNI0f zYU(|h`zTrD=IIa>u!-Wkj?Ad5>Q;+W06Wg%KUQwzsoRHrD|+)^#&Rt3*sEX*nk*3Q zqAEIi^5vl*Nu_c#7rzI()DelHi-PfC3#6JH!K8X0@`oJ)dCo&T1sdHr@fTc4Letcc z<-Af>pwlu(LM4CoC3wWb93IQLPMUoKPzE|x>~%gJPOzI!4JlP!4J?)pP}pabEJ+@z z^7UbAV2j7RWy>Y2W?fR&#HZ`Vr~>nRU>76}3HHJway7mGjAU8yYL+MYu9NRnpz(<^ zy>!M1TB(lZwDDRrfTRHI%6X1E7%Z(4$%U-=1|43PL_es)p$%psG?H9d+ic#I-KTIY zXSymUSI%k9 zRcgqPk65%#f%?tIpy}iv()>oX<0zFHa-ozcr$i<-Hj}@#wy|u?wRM_4`O0$LySTBe zy3*qbrSl}q`=1UyG7G;d1FgVo=cib!_M*QK$?P4fy;#*>mIlgn$~Ra6&u6V&!MVN_ z9Ea3eRkmnGZa*CZWAO~mLuwfwNHr4}ET?K3R!eIQy0>G%~kFfHS!B7-TRXo%&Jed#QuxuV) zRrXov4F5}LbI`g{`1w!R6p$LH#jLkEMrcCKV|twh8}YCiNOu2N$k+y?AP68B4SpMv zUOd(MZIDQ~^kM}E{_q*fi`D(B;sMW4$mpE#7T_v;5cDhpJ;+NNKW!YHIX$-@7Hiq! z=`S1%Kd{zM>7P|oZDXlDPu0Dc2<38QteO`GBYf%xChUg|LL|XhPMHlqAWQwK$<^gS zl5Aekcb;n-eLL-sJ`30>x#DJAE6ote(> z7|ZDOxlJ1w(P>RP-0EwcH=CKn7I#ND_Gup*h^3qfGPn8~9# zTzk1o0djy-2K+7^SpHZ;Gx!IVwL%I9z_&ms^$Oq{8^79t@4NY9$bwupe|lb^->BSR zS<7@RoHmGeN!>=emu?tG(7QZ&1b=PZ7eYqajJIw;tU90BS{Ch|{eFP6t;cv*NQLI+ zRh#)Fz;dZZ+{=KT~grXU1s#v3_J*Gtz5!p?e z@zu$>wj9x&Ox{W#D^=D<-i_2_-(ZD3#^``3^|CkW&cI#&vS=2)j3XpQt>lQVcB-TLGPrGf+ac+2IPxLA^JW@udU+pF{N)GFBL zSM$NX(-`9|N#A~*0L3^8!H2DXa?Q`)Qe&(8sHzLe%YU+|gfspqbEUkoM_I+~8{Bg2 zZB^fKr}t@sB&Nqvc`ItsJ{(ucSM|CNd}@AUjrl^NVh)5(f>8|n{?S;VF;@>~$@<9E zyE_{TDC(`Ngcf#&bLBd8Jn3}h02FGUuZkP$C_d5DG|D>4JO^N9-G7W)R`oWi%*N#J z8e*zZ`!4gqLe|q5E1cHitvd>g)#U++94TMn*?G6!_Zd~;;ojinyJY}O?I@JzNHcqoP+DGGEUAfbvl_ZXF7RXoFrT+QCd{gI+08 z6caA$@Vp0cMNXrT_&Pb(Q4-k5e;l?gw=L?%4ny3qPz0|Q{RxN&#$QmwhWgkJGatu1GP;<1Epps3ELX7H$$_uIWoJ5- zx@n%pLF8xB{LZMFRxOf^8K;MzQB8TPCO>QwC`V$?d|2k!Z$#A-Ml2{7E;>f(d6$o# zc|$$LjuX#@;MbiRos&x_4o~Hp_ed${hzlIMGAZVCo5(R>Bn?tzQaj*OlUIOQHrb1o_EO(ey@reUCK$25IE%Q`X ziVo#XMmQ+S4R?9vp!adySCy@+d)J!p_9J)%je#kRw_v{6<>*r^S(vd*jPz!ni3 zuTmpy2FuTxaSSJ|eaayKk^p>i_T3o&sr8JD<15*0?v;=c2zlknVoyV1W8$;C_y@G; zF`y$p`qlEYw0n;f%)AT+_wQ%xMc4k&rro^@pJu}slS9)RzW9-L|EcP(NSkvh7xB@n z%13GUUdSZ?oO5+w0670F_B{_I5NE#A)MyFya;&0PP!x>c>9uNQMD~MR_27GoJHV%Z zXGb=>XZ;xFzLYYaw1A059M&N7$)s!1&vA$aj7^Q3Br~%X8O7+}|7sCv?Ptm~qb&4T zDW*44Sgs|OLs$H%MP{DCa#JGc%M#ky1nxG1RVY+r-q9t*)S_&Hpus*l*j{puH1~od zvUY|rc#hG9eva zw<&naUsj2uQbi%>;AnSH65LaxJep@C9~WAgAlF3Mi{8YpHuxFZ-x! z@~&X~1~@WQRIO{lT|wiSqDgdIX}rbmj&AJJz59)IL1UGiEOT?GjWNNLzl7Q0fbNef zjgN!IwkmIrY~lrD(vGn!$XUJ8jCBpu+;=kNJPH4<4tpxs=Ln$&i>fP$JBh9rMQcyy z(2U6x_25kAv%~PgKxrQH9|*wRA2@5A zA#OL9F>4bS6^QPwxse|GOy4KwP3)jK!s~h{OiVcR>hnSXs4|nk@}C}mTwM>7;kuK` zbo!00LPNUoIjqyxVJqhqr$g5;ZOKlfC%Qz}0-Qgk+}LbGf7}#NjoW+aW>+h1hkH0h zFH@( z0JjR&3J3mG*)@s-4>4(bPCI}DVHALb+;Fn3RV zmY%z6a2~HDx@EJ>(7~oo&C}$B9)HH3UGD4MnGC>{zJNj2M6^sr(<`ckaAfom&;>6{ z<6zFnF9iFbi%lwM3~~yB08X3C)5{>;y4%zeKbfiif5a)foGNxFgFJ1=&i| zwXr)`G3s6p;VJyKxwcJa4T`^egfz}pauuQi0)``XY`7X7j^-yz&XW`lN!u4XVCleE zrB!|gb=d@^OQ^%g<~01!Hd(DaDos{*eVWGBov^e+h{^W&<-cm!t<4ywWVXI^{Zp;Y zNayH-h}wqTM`)2Iq;|vZ9Q=d>1;jK{YLQlWrxzZF4j&hiR&@A#d7bu0vOK9amSP-? z=fsUGvH~bdzrkTPyYpt8?l)F6Ulz|cWNmY4JSd8EP#}JlU0_e%otpw|uT^u9NRbwq ze1wV}RAz#;5$Wjgff;L|V|bT8o|w`&W|QHZ5`;BXn%dxl+qsDKVYR4r1OFVlRd7ns7OXHtdX%IbU>ao0tzoOg> zn4v(b4oB-Ud$ziS+L>L--mX1IrdM@O&FExm!fEBAAf^#on=3#=F-U93$}56F5ma>S z(Lz@J!sb~|!Uz@I;VES&P6gLh3(wh> z-Ku{|S!F;g%Wi*AQ3mfE@Ky>IkFAJdeskf#kV{xWa zou4<0zCV`OUaSpXb=}h=fB8=jf5=w;?#5PWtkvrGss0yP5SM>ni`1e>%g@##*YmfE z1#+aN?s#i9l2XaZ&g}kPN?yj+ycW5cr&8rNaG?|}Kf7)nFRw^7?EZe}-AH$cU6{G! z_mwV~F<%S62}x^n+rn+$bQ`6MW^7B&72+xYCTkm{;^u0&*8DXZ|!b$_D8(Q>nUh9 z0L->&za4CdG^h}Vi^NaL{sqfVD;MF72d0-!wYe2&FwT?2F&scoirp;UpGY~9e+<)i z7IZ9dkHm0+BIbOPITs{P3ChD{Kf>{}xmo@Tvh%d)aiT5aKg55vAy~Yaz3iDAv`9V` zw7H|a))zQ5%x9PbS*9DMuPd4SE>)Nl;@}=VPKnxTJ&c`^72P?DZ!Bb82fLZ~Y?e|} z(JkT`v#Bro4P+|zmJe`j_na18!&+5lj$@gx7BWyD-f-|~i+STl3bO`ciDF75&Xb7du8*2$^{X$K$9>hBM4^@fgd z?cYr)&!-{)dTSkXIZ-Y zpmCvWE2(GaDZ)XR2l3|O`m`~wyxPj6Jy}U1Q9UBiI~j?5k%$$>neazRI0oCvE7=Fv z%ZRmQC;S-zgD+$!yuUp!jBrx#FSR_?1`cV(ClJJnN>fqwSPtE2tB-?Lwv8~UXR-*tGI*eT?HXzTaSKF?saL# zoVuQ(NW(?k=te@$bXE)>%|$X}|7B~D-(!gC@%xH?M-kcfS+0tkAN$6`&~ z#i~`ryn2oIJ(6H`8Gc2{z_Zst{GVtA2){Z~Opot`POHTSJbs8&Qi9}2Jw6UW!a0JU za1?_sEf~^*Fjbo9o&**6WH{dTltqlCoKKc=d8t-(B4*h76X$GtWsV%3rq=DQPVgIo z)A~&8_>#Bw`k(yv0$#g!6NWiAi!Y>g?f!SUb5wCAE`6ATX7M^0P>GU2Q~6LAnQ5Pc zSqzH(N~RFyzKtmLnb_NPj|8wUI{zm2Mcp5R;#3S6NXP?bSJrzTEt-u{$F%sg$O+3c??tKaw;iF6nZJ$@~!SiWF#~R`9|XRBgT>Ly+}VL$?93RQeUm3*pN_REEN& znr-YBi5FsL2Pf|a;7otRW(>NaNFmTx4caaonx?K^HPw`*NXq&?61%opCgTW*7ZnKi z*Nb`f6Rt(djEru39S+4evyUA+V^Kity7{n009VA>jz5tIfC>lmeh{L3RP%vPn|l;{ zGiCF&=oapD6e9Ll!^NJuw;+Y+Ha13!QrZs@ZoL+URnLK)( z8Qtjd>r?uL6Xo>`5lP0nWXVC748cB|!?Ig+A#n>@YBZ0dnzYD!JTeFV1+<6(JYNbJ{j3)L(#)eE%DN_* zN?jf=ykrdDw~N_VGsf61tDQ+$f@~$ROJJ-ak_&}rCZ3krw?EM^9OX2e7Z`pPC+Wt>pm#q(GS+@sB#Kg#K#1rh5%9KF>$?t|B!isqW{RcJblX01@qn-}*~pFu=(^ujR+>?CeW_{uD!T zDcD+WTX2U5@Nnyb_l2`E)TU^fh^LPy;jY74oLg^*rJ8BUC_-`BO^ciXQK#WNWH^nr zS6OlC^|cnMTO;Hmq0zbKgePf3ExB&ssqLiKFMP(9rqOTWWVCdam$n@z6D2Fze7Hc( zH6H?{H(kZ>j$V$rVI4~a<>zqqf{PEOAIyuF%dkYxR5X>kBEDDCU9tk`T+M+i_HCAe zy-NXWFI!6@Ky;U3guHx^*FNP!jTALN{d$?bQq&?b%uO+9r@7i+8Mc3dWn};uwitpE zXB#lY7|ar55WZ8!pifG$;87N#mjJ^>n1uiFXTev7N$9p~@56C7oc=vlfF11IM6ll7tcNhqyQ&Y%wPwmNr!2iYF`COhLQU6sy_I80WNgte4wv^p^gai*_{oO$y8P=bC zebc9_H(;i8S6M68_bwj4&Eh!I=37;!tUfD`o)GlnYQ|c`v5r7??ZoGM>-1`JBg>sZ zt9hk#kFn&^tFmT@Q+d}V*gmfIN8S_lf*tkhAI14yuSIs}fU<4Mp24_OCT80yizKvI z*_Ut)au)p}UdG3;;jP;hr(l-U&4MJK;I(TAe&o7&V%%l z?qrT~i4k93w^KxMq&q&2G1#({wLM|5fu(wEuyr|A())$x@nX|Bwv+WbD3iJ}*%~8o z&`RvDyC$bSflW7tS~;|1c02)v--3IySNyjyIN_Iy0~a-uT=Cz{SgpM*IcuB2akcDt zZy0chO6k4Bhon*$m6SZu(eLvC#FZ;0-TxHxlC4#djP>T`r84MJQ1Q`ib#r8@eHl(KKJ0UZ?&jYEvBEfH-4^F zinu|HtjEpgcwm(+6ADEtxo(|GBO%HirM{NgW@V*&Q5f~OdeH4b<1JC|A5asJl%+61 z2}$u9A=Zrjl?Gu`pSqDZqU0w94Ik4}AMAId$UaOTE1xMBi4h=4~h78y$wI2f4L zDZ+LKtUHwA`(Ie!y&CI0nQ*uIp*7Z2Djg_1dmFh1QmdNG$Dy?4N>mQSz;dWG0`Xk- zCS+b(APm2uLQJigQluF=qqnhThX>KGa0~SkdxfIg13Xtau1s{3V%x|K(4{LDXCF-L z)Kc7s01?KMQOG(e{Dn89#YboGZ?^7JG&Jl9sKtDSuzMIs0>v&!ZKc@$gl0jU?AYM^} z(&O1(m)RwA%8PFW436F z&XbTF`aur$%J`;U8UGA5VW3hKh#>0jB?jpRAz;B&_Au5H+ll`ptl*Rl5%RSSnkSbY7ZLg z+*wQh#F1?|0=CMi^Fw6Y8NYR9+a^BhMYNTQXw%t9gfQ#z1|r}9PbUV5*l&Mvhxy01 z0L58yE3r9(S;+Y#wHs!Zk|{o7??>#Cos0V<$_%}r(1)BsZWX%XE$27Pfrz&%bLD?h)Cm)2)_p;v+wA0-b;S}$)L9bsa_cIY-G41VE^uf_7EdF^*mVE} zC@nIBmR(4%lkS!E`vab8(XD72SsO|OeqoWlfnv!sVk?`KK>3LHyW~h|=Ok36gZTSE zoZ~K$SPgpvCh2Uz%;!na_@JtH14fsX*ghGZv}rZd0UT6{MvUC8jKB zCTyw-3!xG65uKPa4gtUp*qhpA(_6A+uo#;lMf%#NmenkOgi-$A6XxO zM6uXWmPFD8N%F#n%uW~{-Wt)?q--fXUcOA2_?S#!ix&9^5R{ou1RiWC@plr%Cqa15 zE=zwm2+s;2_?_uf_0!XLDLsoQqrrf^6LnCb#?XUrfB{NcyCKxWo@ohrJnX_v0?gsf z^l+tFqO1d|wd< z1PpDEGVJh1Iud<}lpg~AEYX{378TLqaob~v`pSs8hq(x|&H{f<)s}-+O}0CPS@)|^Hrk6-pha)wvD1la-!&TTe!S){=tqxV<82^IhTY$LZhue}t8^AT4_YVDieF8j z6F$~z4r2DK{yZl;juyUJn8x_j`T%>0bU<48L3EQXA{hW&Fb;!@i6K1a5m{T5t-E8Y z^ZE;UJr>US5@pIl?EpiL5!L{)l6g4`4r_9)A0t9UsIw<8u^;yKnihR?uL~g*QX`J3 z;gFg56iRKP>I@7`d90_TSlQY;&Tzmb#v<36g}C@KiCE)yI6b91nbO+{eIK-wQaTB! zPC(mrSh4D}3}dbJ2m+_l*vs}`y1C=r<_^IF9^rvqxFntZhw(2}u$VH3wKIm|4vC`0 z6ywl=dHrB1JjDc-VVDJ34YCduN@(nm3X-6)L6G6pf4}Wt*YAuJ4X3KtoRZm2-*gJi zd>>k)4GI-i)au%-Hu-6-)e08rty_G?qG5pT$(wI1ZrtGU?3fJ|`}5|9${TmfT_{+q zottwX^sn9fCm>_HaNwQXkusYcQ|B(w?imRQY6Y~dhdXMVd()i4fubq<5n&Z2gg=Ty}rWqkBUR?;Dxd|7s-Qgg~fsuEhbw-{b@j^&%ycCY1`pJ&S#u5DehV}-f4b%>!s2*(_6U)5wb_LEgG{+tM_l{3lN`31u7ja|xwSJ2)o)Ko>bPsSsWA z(_gvtX#VB?-u8dg+rCf^gm{s(4?DPo78NM)o zFoC$Kw(!OQ;XOGsZY8lw0gdUC3m;&IEw#~+Cy1@`_ydp7g9xzJjmI{!LYeK!TL9B{ z^R(f~T&;3(t#+Fbs@~qr)?mx*M+olG~c+k!^r%LU~^(Ax#L z^CZ=pz^5CFIW-B`SFlo2)A3wQ2EZc$c=m}I0NeW_+KV(1f8gQ@u!fMtkf%fCkA5;Y zG@!PTXfIC#b6P>F6#uGnA+BmWSxSV_sNk1NNkTQ7(kqgSYMW6qmwH;%eRr~jd~liH zuS@Pe$q)NZ70IiK`XM;wh;WKM>r0uEaH{CefmS(JvX3eo_1bGk8gH5p&S4at%=gxK z<+}mxwa=g2SC_}%JNWXioqb6yx*RxOXI~m`^M3Yri)q3izf`_M(C)d9n*afUSJR5f z#Jv=g`}4Sm#7kP_Q;o<{sT|%uo()E49;NM)mNAp}SC(zp!q4;G#upubOB$DN4QYOx z)72qwibg{yDwwPyf-^#tDnaHj(PAIBq*hg%0f1nB)J!Dd?&t}_Zy!rWkV*iT} zR*9@+@i;qKfgA~^$Ov{0w`y$BBCcdVI=p^ec}?g_|Enk@kN>ri{8~@&(`^1lwR8&C z>C{W#PbU~9pFnu~cNnF0f;0r4(~W6SsV{iVdR-b78_oI$LdqUDgL_KK2g)ohEb#Qg zssD$*i>=6(tYBHs^kakCvnhRYYn8W4P-rcr1*xYzZpp39vV|MoKGJ&Jd9MGHzU03K zK7gJvi0y=dAcnJ$tV`&G{7I`2JPu~~%KS_o`d`J3=XqUz?2#w`YV(Ht9v;1&4*qR= zJAtdd^mZx;{Azj=$595oN&fIOz0KrC=xZ}z%j9pSEcYbQHCydR5n^gxVv~Fl?Ow^S zD^!Ne@j!8Ezu*8mTVpq4#%aT)GZ81!)y+;8`4lJy>kfqlJi{z4)ZaC zbz~Q-2;4G?!L09a`DGgFwrL3YKZWQ+QbYQUC4O;<$PT};Shf?$?Xxj8yDlWoXzaN> zf+}Ef(Tc{y{Po8lYv2H>Uq~ajNtrnC8kYOwMI0#-JP@EL zVUMaK(}ssug<4W z9$n;b$|tX15tCtz76m}=m9&0B<(TuE&~}G--zVRGMKDg1ZxVJDjg(9!s5KJJjxkJ0 zvk-2SMheQhj5clTvS>?ebiP)#r>sZ2e3hqArNlU)1YOXCTak=B-6krJPjiGdB;Yh&>?2o^%5u4ywj-kUK> zYSk?uoQTLNzyj8Ib;=l*A8ncCv*jh5RP%fQVLk>SX1t&M0SK(z{cM-jA-ybm@D?k-g6V+mW5*rLf-6(BIzLz&Sf_1`dWnkwF?<=9u`I1~v;vg`-Ic(XYU zAd{QZ`~W+ZR+3v5l*g9|?Hs3d)TvFR^X*4&)m@lY&G<70J@h(s5A_nQw!khxO%KkYhH0BG&Lr@3{+ zi$A=dA$K!m|0^wQBg5SsMGw9a34Xkea3u0XCkC3qnl@+oE(?YzTz9V1KOSbZ8|uh@r`!lFivQp z%{3QfHczcP7JMlwFZ0eh2=zYuFh(tMEJ{Mwd-MMC^wUqvY>v^MZLQ)<@PN1F%M&~A z@5)!AX4A&l#h}ohWoLGyr$V~QE@=EP#g2n21)X!wseTbl~)`;V%h{Du->N{0_Sw?x0N>HM-iZJtzI0b8aB^{mUC6CEXjI3RrB6lX#ZDfY{agq z`lnC{|21HHN@uz;zbanut=hGLE3D9d!Fc(DW4x(gaZk8qq`wK9k*rE2yxA8jk`HT6 zt_|Pi^Mref%?_u`8zATBWNfK(-!%de6p8bcG~B$P@z&WpeTV@b)l{X-irFF<`7r!`*o+T~zGZh(+-cmA&utO-Y2l3)oz1UgTxg1NAy`wC+saKd zF((bg1T(_U0cXo@zDU~Bk~JIkPfE zEmi9hm;}jVk$)L>36E^s2Ir2lz@kfLjf`EMyED;i-r(Usy5W6aXud6D-}|{TaHO#g zn+^{mV;dNh8ZF}tozXeqEE%4&@Wzqke@Ub*YZ`G5pWIgEYF2W$a{w~5%j=}PuJE7;m=!5x+(jYz&OlPY zID9#UN3n7F*iaatXy-YSDO)Gsk~`zFRp#Agj%D1AuCzu;U(FdNmNrN7#k+92a`drJ z``BT#Kak0@a#YEHtb$0Xv_s&!UosclCqwn&M<-o2{wpk#@J|c(;qcNTo58L2;*~== zEJ#x;>Z-|sBEmQ@uO0hi@LwFZtL)LcDtlxy*tHWs*$VTRI(wP0mWRx_9-rCID{0dz zup0tJYQf`Y!%CJseimm~z3W1LKdv#zu3aq?^3{7kDQ$+&TA{smd1_27yGYgwugO|r z?p@6M0S(l>t{b1}##WVO`}^+x1E2TJI|nGtJJ@hx_IqDP1Y#mgT+qMYWB!?DIp=Gq zN@RmDU}afgK3y+knRN~;p`EpU)~Q1U~ z^8p74gJ`eKr%Us5_O)OUEkdM)M~(44dyH@2+$rO`=zIJ(qm3nieOiU&^8>)-a{~8b zZ!2tr{Q+vR6}DPeDjYY^lqXQ!;y3*HTGJ~`hd*{@0iR;bd5-JiMGmW73t0B(1xWFi zN&i};P3BL8H}uV=^^n}dZv}L5rI-hGm#b<8YCUrO4MI{C;9HyXsNG_09G%Vnl{0Y? zWYS6#g5a|O%*)!L}bbir7o; z0`Cs8%*$|8{clkpSy{K;nn;~=`%uKrPK@|p)2ZNh8bYSw1JL^;E*$huRDy>e(F?S9 zmcX-VJD~ni3Mu^9 zN*?^lt*yIH_Ddw`%`Ntuo>PnG8?ANki$EH|PI}!@azfPzIK!j7LxHkI0b^+;Z^=Nt zK^wE2wOIV}EDl&Gn?Da+V(CFp9&K!EfCO5|mVC35neem0k*nH7#>nFW4$#@)8z>AO z?yi(4x#oWonIC7P-b*ct@!|WBUjC!1vRE=|-ff3_!(JI{?sU*!DjV&|9Qa zdPIzyGYKbvRFcQLdXsgf<1gXym+X>DzS=Ii7`=w4MH+PMl8o{F01lDy9oKh!Di?Hh z<^*U>`x%H9S>JbbLNEu6?kx$O3aMFW+^^0eiL9a&Zk=Ibt%vvTn>kj*(0j8lgAF3G z4k`YGb84KK@=K!+E?53Al|tM$iCah6q62x;XNs+zw#edn20jPDsmWhD z^Co@jz*H-uMc7;Yg_nBI`>Mg}uQEti)Ioe8c1&IW60+Ka`o({? zPfU%1=n_9cuHijLY4`32#(75pr#dFIYOz(kxOGDoS?CD0)0%qZt@5#WTbviBeMqeq z{gii=^3lc?E)>h^I2-Wrp!Rm`OduH>m{JLaEYNtheqtwYV)bOrP8) z=PI@CIoXj%{`k#Vf#P@dR>aaGqpfbO_WHKUvNyCjOMs)Y_>G455un?-_7jn*qz$ml z8tKlL*fT!hGDj15CDKPIM64d;S~w2e)1o}cLGysXd&C3$&f(`mZ;Ki#sKaENb&Lw7!% zG0c*@rnbGs9&If`@f=R`vHfNeMikNIJ@zBVjCsSm&mn&z55l`ggx;hJ^ZT@(TtB=gCA&zCmZ|BYqhCK8Shk1Zq#0X8}$0w-p&;& zRvH2mN;XQZ-N?x_{KD7uEMcrGz&mh}vO_6iG@0q6IqN(2bD;-iR{iAz9!kKWO(&vi zm6zT6u{>**a>~94OSu{8a+PfQj%{F&EDxhvAo`|NKvZhev>lIvQ8m^!pD zU=UybmifoqgsP4zS%TYS5>kuJ{fF#5sK?bewtRFFzupTqo@ejl(ms}9q^N=R*f%B) zc$$2S1Mo9>ld9!a6R$`E#_p*4k4u7h+)FW=rJxF12NupYx@w=-le|H6U%jwk1?%(z zHo~M5pEy3spIO8Fjq5!=837*>B8hmWPqvGYq{r)&#u%V`si)1A4-rtGhl?DQ*FO1yf#9=}b@{)Ro*&M4OAE~%P)^}`&i zu|+~SDi8|`%${4pnBAi_n?cF*usO1vjMgS*13syK+P!PJl4WZ&B9GMe_89TE_+wd6 zb<+q~ES}vE5BN#Xnbo_XmE>y#lZr&Xou->(_odPrIE`_sFUykV z5r`D)e=Dkm{{teV7mH)MDF02~>49=);;3lKr74%Uxxo^M4>3((XH8xJ@SNu|7 zeVW}Ja{dxA*`}Dk$7HiEpkIkQ`R4oZ_pV&BqtyN z9c?h`dwvVJ5`r{I4Y7%UD>`)+Xi4*9qED@ED7z|FSme@GRk%aYn4?9;+n|HItL>|- z&=I@=!LztG@QfubIec0OSbmVkJE9Es1PThu@DzR&7UtE1A_>Es!e92R_?j>& z@jR2vL4wqI*hezw<=@sK3#nZGEwa+_S7u+4fkOk=rAJQVeMf#1BVTo<;Jrf486992 zR+uG3p;{B%_NQo()o!~81Xx7TRzKQR{ZA#)g!>+K?7rVbeWby8G-~enu|pN|P476F z%`aGY*z@rvs0JJYstX0G_OD-Wlhlh*PoNFM4cWa6axp+E-ap3~t-P<`y;bDCDRkZl zABnn^mjigFFg9-(1C|laT2CjZ(}`+rJr}ZRH%Y=(OI1x2z53dS`J6-@kNL#Swz%{O z{;&7HB$j}jWoiDQR$frgmUCDx1I5L2eOmC_qT9NQPDD`6@bBtmF4zuzU+f~qWB9ia zRwBNFOqL9sSS=v0BwFCRE|eE=A+HpC%&d&;Z1?4fnJc^_&)>qL?gMR@y8ug4DUF!Kq-u;j=^#~#U$QHm!8vArTHLp+HoILTbImg>Xgy9hN- zo2q4;j|r_n25N{dn<<`Cyp|B>%{I2E4y?EPtLvSO)5`kC*RS`k)cZO0Bu3olNGXY( zss+X52a@xy5rS>=yyfEaYSou=j0O^G?Uyw4SB>dcc=$mMw$LI!6aYjaDONS# zTg~ui(VtB^*7u-HXQqV#jh=>uSwd6RG+u~HIx1R<@1^Fcqai96Tc4xMusUrOX)UK? zw1cgvt*f{TTO$QLfz3EVeQ|0tiik!YI-PNYI)A9Bfxp&Ez#|wM1m{~TXkX6i(4v*X z)N)>jt<}Sw{hZM@QJxoB=@(hfi=Xhq4#`LMSmi)72KB6r2x~6y6e5VC2l*njR){3N zeW%+PLLB?K({1cjDl}zT61KtzLo!d7QdCsd`AT9S6n0H4nrZ#UmK1=ghS&?{28xqP zPip4do%Bkf4DRy3CiSf6DH7=A%w?aXIdi(O);ox}-rzv4sKb9dF1f$$^WhWkUvkNc zZL7{)(Xx6NV@j=PS+QaDi4s}0Zhgb%%Ftk9ygA)vzTPEf6iTnGop|bx`#$N@db1r* zRkA9)`}kQy)neU|3*HtC*Ld}@WeaA0hTA84JXAB3y^3t*59^Jma^iQ0+QAp^5BD5D z>n7Dq$trt2;kM()wfiXzmD7-X-C_(S;}V(kvzzp6&YdFnt$qHGHkX`ec+*%AHswaT z`EH+#O)%sD3aPH0c$$(`$-j%8>sU|oV^w>XZZ!04J+ALHs&lP(=tti7S$`1gQqmHe zUdWD2m9ez!_CoEx&EN?~x*orFs2;z0Xvvb`f#co+w(7S^aTR=}FVC#0D z98_m4@EiJGiOCCZBw+CEJGv`lM<~NdmKj0&%*W}ch-|4J<&RfFP^NTV($X9|(jUWv z-maS0$vIfurju{qsHQp77hX>ywsm)`)F*QeK_Kdh`3=ud2+?5_+t2fY>Cx+Xm zE?+PZHnU0MHXVKr6%`_UPFC+3z9iL<5>??X*}<}Rr*Bmy94Ht1lms-cfeMq491zdi zxb-Evkn_KO$6w^74>9GB6$eO)I-Eyh5Hs7Bp~MZaCyv!&>({dLwPdN zFvIKL_8VULJAh4LEwTuXGLm-w5xwqw1aTzJBOD(PbdUGWTjU5T=~?HqrN$0{MBRAY;zTAej7yTu47Kokll8=fd-5dnv zn{@s72({5g973VE ztSviWe0MMBKHjlazHBU&h^s32MURhTju*d-T;de7QABq3WRdVKo_%jp6F&sgD4$HP z26utjltN=Aej0Klhd$6Jukst?3;o)wf!_{o-Izm2z>brPS$*#|&mcF9BvTHsZk3fW zn2i2~1}bAW6sn`QB>q@F{F0YaVW&?G=|tfEsN4Q%h%bj){P;51QuBSHow>kh`9zyA z@Zpa{zJVf-d`+<9625eTyL>^S$Ou>6wNk#Opy0%ut0_nY^*5mDOFq$Ra;kaeZ`^V| zL*=#=x6G^|(%~n5+LzWZQI%?1KM80fmh)yO-yQ9caMWt;-Y~W3!)Q?l*!WvF76!bF zjc&blgHO-HnP@9-&S*B47Zb!)gKFM=jCSv8L2GPa4i;0@)Ad~6M5F-YOVtPo>70TZ>my( zH1yKDYop5yHJq9HM=g99~OS=$hX+p(b`&zV=AlsaMk(`?Kf;5YhL^6HIR?VR~PBQf<9>_{>fS9`7N zxoSpS)7I4jDnsyDZ&OiH+BZ!GR}64k*=2=V{B^h~qj#Wj0q_^E4j5K!e6}AA;|&yV zaG0fR@y`dVY`p&XclU)i5Oi}cZ3yRiwK?KSqHS4zhZt&En|7a^HeKB2H{O-!&|6a$ z^v3&1PJ7^%O`&&zagzET&1S_p$Qu_$iW^lvrdcP+7RYgdvNZwno{UWtQ^{$jIN>jD zr;89y`0E6|DM)oKGLYUG^{fk79|Vjo0psza1~6id9U}UM4C$>jY_6v_q?}Arz4<8{ zW|BI-J`l4D%U}Y*i4w^=pK=qzois4$N&o;@~sm%3rPCK8gFO6 z5{9anO+fhz3qlsOA$2nFZ@3XX@(6$JT*$Oh1L^{ujPh7{qz+LPgPb>dUVrORcqdcz zE&b3IeG5eXNyMLszAd)s+vwBt79l5c=GujBn~%U~)$Y9`PZ(wVz-Q&Ll3FVn8Bi*| zP8M>#gI3n5q7CcYWt=?o0YQ5#GiW#RoH7uy}!3(`C4 z!(ALI0)8q>wvjIzpM1btt`ud3GbPbi;ZY%Q>Wdpwk(FP&;w?vV5O~g&2nEDg(3*&5 za_nZn6tNwh2tSKP4)Jf2B;{Ts46gd~?^-Jp0je1XPy{f%1D1rgq0eP%s-fJ-Dn+zH ztkEYRY-%Vf^~Wj;VO{-E?75lIq2XO8Th}9sngul4nuFuXJ@LYGZQ9#l9#JT? z*TLJ+7~=zh@d3nvOfB*{R5V2ePY~8;Jpo|s|FoJ-?Bpu>CWgZCXzL>Y&;F;{tkk?jvft;@<#qU38wxa14arp$duzHx>2weQciw)O4h z?aj8fueEqjK#5>mxv1c+BDT6~v|{T85zYU5X6D)51km^P`~Ci(|Gx{9nP;B4oH=vm z%$YN1=3z5RVtQk%ro|`GTzxk~bX&YpwY{6eCem&%3>@n>lFBM$dEDZyOsmUzS{(nn zFkqO*DJZpEo$o-Rs=-~trx&x(ItB7{btdR8L7P|Zm|4~Saj~nTjV6Mr+rB{->0mGI zj5QTXZZF$$<1V0j8$XBY7>BNovCMnw_6fP=v*XtkR*u&@`4yu)=3v%KUV4V~f{Q>k09Bi*7yFkx% z{`hEV@9m11!NDqe0?w!yB;4;lY8S?MGQQ*oWMN*4^6B2x`d85r;Dr z?ghwGd`|0#Lnf<`>w7(h&Scv9-qw!Y;nOfja&7u0N+?wysg^TWsv&Prn2DXd4PdAV zH+KI#f%Ff`M0!vxi$7YfRH#dXL%3>yD}@pASnW(^34$oW$|p8&+D75NGR|RYJEbpR zs@&Uf-gc2N#QKp!&n!NOq_@ztmxSzhv&!$0%}E)HnrR zLWXLnf{aaL=+MZB_P=22Ih>%c{l+Xrt$Ub%Y@{TV4WBFXpyXL5_(!`7vR|dQ++7D8 zn)3Qi6TTpQAR2@y2`2ZL=?0<61r@N47fF9Vee@(+CWkVlFYRZ^q6PRJk)ASH)*ObD zQ1sAM6isbN=*yIZ?z-g;_2w#Uu9$vr{%4ws4$F1kAJzP(ufJH%@3G@#Md+JF)2uA$dni}&<8lo1NKi9|6x7auTYD_UlZ}Ei^Ie_>|Q8Skoc+0tU>hp zm^7i$3uG#*@lY(Ila^cY%1fpF?R zg|P6r#974h;HMMx$kj4QVn6Yz?o)`m-z4$U*&xausbFj4ki;CuACYSIBPOu~r0Lo* zHTU0mv$_p;`;cj%mv1jow2ZBh%+Ux6GwksdU&CU9jx@cvj+TJh+a?He|F}3johmE5 zK*20(=;$vr!k$nCAQ7UZ`!EVih{ciaN1p6NiVe}RBzmBj#M`an#Pv*uW%BU}wSFqt z?~9ePg0eY$@ov|xXKETz%vu&*sRdwSj5L%cLix>UGokvXW*UF`H;9EhuVKxpv8C>M zb$yE)Fnf9qWKclBUh}q*T4iS7C7xq0WXN_4-WaG`UAMdf;1so0C4nBBuRA3&qU|6Y z=NF{4@sOy5#|d{y^wU6uDqDbxPlZh*BgjPVgCYTc@I;>2OaC*&dOEw+R;_&QMAln@ z#Lpos)q}!&rS3#AbuvRz?Q!s<=1nuxBwih zm)MVCQyFu*7MeuuGF4@;8>)KyVzNX|E`1;R>U@eKd8ue6v4;m*SRv3S$sut%$rTOR zg}63Vvw}fq)qbPL!m!cwNTQrrW}(H2VPGV+Y2vF;ClIQy$cjFLGPCF7p~Zb0t_#Jg zJbVefJa)#N!PxnCw;vqK{gQN+zw5L|z4)@>vmm2jpKouXym*`I=I;{6S#RVHAM)gf zY)2`5{@w%8-5ey1E;w4&6*#IBuYD;{&=-vP?>y>{a-3^N_+rry_xa7d?(3b0)Czy? zorjv)R&b~GXF}1}gT;Sev)`V7f5g+;BdW-ZJ3|ErM1Aaw&dXwIc}OeAF+27nlSeP6 zyLN=X$2}^2v6Or#oVWV(S%H|3{gRQJna*2s`wCL;1vp=Ow-?3rn$fbk5PnO7!~X7i zXphf<;db}76fy~!{iCj-V`e+8=pWk;Bh-na9(d*;T0|xWy3Sl)?M&)Z)hO!U+cosn zSx%8X!hcm+I?0mS9s+(Pe%>`!&;!2M1krj16>(ACEFCP6mFl}Dmg>ZjGYm5=dwQ&JM~(k z`rSXMA~oYIzwcKfw-{Ks*5_|ioz~vhVhcvFItM730Rvq_Cx1c1hPooe)>Y4uA@aSC zn~r$lw60r(k#K`2Rk(+cFmW-@1KY3e6Y{cw$3A#?R{Q$lBQ}f_OmV*b!v(BY!OKq> z_!!A?_9-@WbrDoD_dfoz(jUnN{rFwM=*aP5Hd!RkHv03_pYm2e(#cOR=ZdEkId2yG zXNB|pu4~o4VfFq%HCI>I;|UYaTRj{l+8S_h1(k&P3OIsWpr_AU{Kp$v?fr#&WW#yB z;_b^+N?9Qq*A7rm;3gHLR=g`#n4&%g3ZV$8WsOhSjV;TRu7@3QKb9(XA^^D9vx zIsGrE!Lax8=$rAskh<^t(1+05G({fYSG;s+>xHzALeAstRr}n#d19;DeKmf#F1pO4 z@3R5%rE zgY5ivSYPWoa!Nb;9Q(ZRzV>)7yQWS-C}O&WwVTY3+sb3*p7PjQPcSz5r@`2qM}l&P z(9I-J=S2_m39{T|)?!RICac_P+dJf%7w;QMJA!P{hKm2NW=UDsDA^5W>I?T#F`_9f zG(})tPJdT1NM&E0Eo0~?+eB^|d!fWA@ zZjRfq^UgiL#1k2aO*#7lzF8HU@)f*356q%Ns<(E36kZtUx==pmf!P1S``aAhH@W== zvW&~Yb^BX4mJ}n}4UwjOtN<9d6(kBq-;Mj`OEHoA2SKg*qvH4RXVpSd)za8L_x1B3 z;>g#a&1`__cYCh}q_1lJCF7sOA}0@TpZl<+#E|N7#!1cN^eqNU(RW>)3*akgUi#gC zxyorJig>cy1L-94)1K8Qpg)Y)im<{b;gG_?@&$oj)%ZlS@F&GLMHd%ypS9N^+N{7G zU0Gj^_aNx#5$x*xS8##$Z*UWJ>kcCxf%AWzsBj)0+dg-w!0qa67YxQuoyJqYdzOHD zEipRN-vuSCp#kTtfST>DW#k2-bH6CXL>FcSdePM|s(u~l9XgLV`H2GZ8x)bEzXA8% z2w#mp+Z7znO%{lFSv{W&6@E0*@t!}nn%(Tjll$6_v#))v;8`JrZ_ZITDlHGksB;3< z?{f?nyQQAjoaP+vb{_+aF3AdVn8U*t6K`&R6%mQ^*p}}BFMm1HUAV_r@cibkld!5# z8{peB_9B|^mYw3#qg`J(y7!G>@jGi@4#|P?(D>Z6@f$4Op)T%V%2p$hZSfvCj8gVi zG;5eI+Q@i#CB6-4L-JWwW>sT3@B7lW&B#OVta(BHu6?&}uiXDKFU#K*%<>iVL@pG@ z0C3C>J)VnW8IFr%6;4mz2*tP9n9q^T_5fB9{;tvf;>>VgSuVT(JJ=F_0^-%pIzAJUslm z>#O65?YeY$T)tT)-;NcIcL->s>oNn?3lPy7;bO}@_lsOuxQ7Ea+@;dV%s!u2*SE_M zX1?#rI4w}Ht1Igi{`#UB!G=6L7p2a=aES?prgP<$NHT5d3wCDhlLn%b;Q^ zjm|%6>ZHD4@sn%+6oj<}5q;ZVJqqsGQrZ(4#d%T;UBHCwyu(r7DT@Z^-R@Mcg7`K- zupX5^uIP(0f})2W1yu|RF7Dly*fD_qgRQiwJ$3a z`@H9VFGU7pXMEL%Id#{SM?*1M;Cgr)MitPGpNj$ypX|Er1`@T$Pbn|n+IpG4YyM$I zYlXbU{&O1{qdj{M`lCC1d;6k2f!O@R{t?gn_8z!trjeFr-<@4KtSXcnO1hf zclIQ*K=4`6J)n#< z`Up^R>|%5sqc>)D>Y2{fkBOnWv-zu&S9rO(J4#`#eH@VX39J!^h1VyU5Mxd@6T zm$L3Oa^}xDETqIr8PCUPm_DAZL`*Sb{VKYNQ1vAOX5U@O`G1hS#!CC4@!bNfd=m$b zz&Ah3qkjS&?(gsK09l(<}hYiSG0l{LQfo1!EDA@^w(xZ7+}+)7T4K9p5Cx z7pY`5$O=mi2AU^k#$WIxT>axhSQxnpv-w$xMnYnL%n3?u z}!6!C14432asCBJq{1jcFD5CPiZ4B4v6eaf@8Om`> zZvU#@0bKJK0TvRHZFZ2!rQa~YxtMhqE>3r+K#l(QgIX;(ve_vjzf6
jP)daCEeoLja?u5?%u?YNRzBz@ads~R3~4@F;>CZTdHHw*!WP{BxErxbPZ$* z69wFX_e%UMrJSXihTal#tX_?)-eEtW8irBf3sB#jxO_EP-?ylcV7EGPs*(j+*FJ&q z9=okwP|aQgsnl@&)O6VX#PM;t!KmX(vZylvl|mq1GWM+{u6RZV^oJE zK46rj=6_`iD#<2`p;>->BxOmu$zq<6AALOW5y^!flT@0xPYST-2kL)tIW3LfR&az`+haZ{-Hi8XTrvg5iVRB#Z_k?ViEw)tlZFJ}dUF-GJ#D z^^p2Zv)?tUWBdUk2;4gUkPh5FUY0~k7`$DX7==)lHWL+MuV)>8{L3?W-&KSt9siyL zW2a7jf~~`j@js*l`2`4X(Lu1YT`Xp$0JT9~iqI3F#Cv$p=T>?DxUcQ-l(m_BGGbTS z9ni7^QX^#`ACO?0t7G;Msn!(5rHtA_#pimYJGOXN`w?vZJ|ua0>@o*8c)q}bqHl(b zyV%HY$F2&XV7Xn@NqV$JyM26#r#!aAfqf+tJ37{n$iIX97|9Ob@Fag-H~v1B_4QcA z;$3~)1Qr^=DsvT+*WEVor4Bhr-1$WzNoD|LkF|w;5gQj0438F=j5JCu1vchGEG0+^qBPA0B)`MmQ3E}^kExW>7ImXw|?(08s_RKfqVgeu_P#q zzRp-L%bp8bHi=@RT00~G$3%>eZ&Y#)&aBcdcdJMWc zp5d|m@THu&BPJC4p~48uOz(CFfV>hfnJ9`(KrN2xh|a*d)P~hi4Hva4 zvN|v%y1n2NRGQ0C$%j2$9;U-X!rV*Xx}ANjZqhA}ilufpR~xEpyZ;t&P3$gn`Cs=H zb5-Z1{j!GG&au`J8_vNXb^{zQw(tY7e83!*q+<4+(ZjA-k4lIlsq_NZCRrbo$K~2o zE^P-s85IEx<6O55WzSe_FIKf5&US5jfj9=xecK##X2w_LJai7?4PT$U-%ZnG%`5Ai zOiT7F3U*_!@lmhZt!>=ybFh1RMaI@ZOrt{7n$xIjIexzEA055`a~U4I3bc^v3Bj(6 zM|)hwcOpjvUgu~irm#ElJ*t&)g)M=@w?**F-hJ3>{tOz>4C#odI?E=1)HjMX? zc*wyqlH^d4iy}L+hO6;4kP$K3)=sqti>wNwPl<`ljZmcw8=EZCM$DSsN~}xFrcUHJ zFvl0v3O;r`j>vi2kA~9!h(9iF=<9O73?B;IL30~l12yB-=R;m=|H~m)=Z~NwiDw0H z`}n(QR0yp71V8>Hd)u%W2}3-k7^ur@fkVhN`fOB36nugz=^XjmDE4O@b{cZ8N{7Lv ztxn1!g*R5ID0VIjGG=pxsihB=Z{X|FqTCg2L z*yLvg8ZL2g7DNvjs*t+m)xSYDDC1nW9vw+Bs+Xjv7!;C1f&mtdGX60yxQZpvMxqRe zA`bqDYM=uFkS-8-K1V?$kQh45FGYy`A4|^X{LzDQKP!%%7wh++{HlIXvNlPLcF6pcM8wkt3^zD6b1AGOly9~bo&dhE<( zo~`5o6M`V69q7^>8~-A=P((lR$HHeKl{{APCo$RFD7JzywFdu?@c4k^ZDF)mO@cgR zQlfz95$+c*ION#sEB?r}Xsa(a=cL$VNAcUyxa-nhfAJwqGWp`dhG7N0VqmPr^sB{{iX^r%^uZjrbN7^%#cA(rG7SgVMe(%YjICy$dpF5YzWTEH~mYxi#pj@yo@y?bnPg7{jKY${5?vVu%aJKjK31j%Mti zL`>Ky6RBoC(4+A9tBSS3Ubswp)n?@FhsSc$Fl~r#RixT?W@V7?D80cH(=ig5g$Ib_}C`&#<$6$N5`Ya2KO7sDcq~?PC_d}YD)Q@fId3j zLyn2x1DnjTI%bq-fc{2RP!$Z~a7 zf?>YxCy>h=#a=p9eHg!suS24qjNgGzhjeZRAk)Ah9jbveZCRukTrXzrUI@>d`{u*S zwraarHSf~lr@+|d9LM1F#m#35A9PLqz;(+EDU2glvTz?o{X!~JsR*iypR4>=;$xNn zPCN%cv4Xi;?r+nRvq{R-920tLVJZu>{4FSEhnZSsUEei ze}AhZJc4R8&w(0-?>-WFqk}20g$)2nmZ(<&qdy(c?#+}-ksFx+|3};XECB72c0c>y zYxfG2xpuo>Wk`NzyAwlLG$BLt%^9-#lwQkMuoLly0BI0FxtEUrI@Mw8|^3lAcqu zZc^M!oTWw?OBxvV##6u*ADrT^;p)TAAd?>k0KFY@eRUbLyGQ~18TJgNxp&Yu%3dsG z7rvm(%7mYKab)-)@ngoLE&s(&q2p}a3BxND{bg}k)`qiA#O%1&R&+hEagl=0fpZ!r z1}=m*!!3S7Rj8n}MD9=Ys|wqQRBR~@`%%*$ixrsxZ~KHU1APs`s~+Sur`X}XK^%0X zChdZE{D={O#C#Q}%2A{i|1KplsOdyCJ>cI;9ZKpH{vJQ?Px3wy|D5>tO68j`XwyUz zSnSvA1-R7w^#K~4p7@&QVUV&ZyqS@8!7^q!?$;4h*UJdzb{D?ieju~GJCn##*Vnhx zV8JhZc)RQ7k60^XQoEfs1=e*F4+}kmtK~5853nb4b;$V}S-^1Abm|2k|IT5x<`%w? z7(-5yviZTBmvAda zG_}`t^Q(je{0&qGAiWyYKM+gT3G5^Ew2wT_Ar+yee~0dQCumiltPXIbdL4Aev=Ti@ z-Txq+^~V=wf_Wvr9bYUUo8u3un0Mm$su-i@(Xw=L^Ke(}UJ6Vt=#*{M=`vf&dFy_K z8BnxC=^M<#^2=!@*-)gbresGzmZa&D3!?c+NojnVKek}3oQ;+<(VT}4@hPTaou?JG z&aEo9(g(&joC7GYjSY{w-wT`t@9b?lYV>pVkQYI!TMQGCEjE&d4Lz3WuFj_kV^o)g z8uoUzW=7zV+X@dJc65)})qW5bSr3r(*$+vXxPc$k9AF$$F|<8bz%HUg5DC^ev;RotSDM-c%^ZAy>6UC0w!6V7jH0^3fS4V1N*o62AgaY;>4U2>nuD5$8{V2wa~)nR9GDrpN19 z`p8GlU>J4T|Ut1f9+=G5vIX9;DL+-|OZ~{1b~! zf3-g$d`J)%|EZUp7E2u~@d?UR7)@zvytBQx;Ve|jTReq3&_Z*)0xR<;*bI$2ig&s; zT}+RF9|07$NQp8a7|x}l_7zKB;dJqZ^3hu!1dWLYj;8aI!WV4(8sL9G8iUlh%PVt> z9#|T}B+=@b<)lQ1QoonN#}kh*$*AuYQG%5at5WzQ!fWU6VaL4RC6kbb2&N+pwsaCF z14Yv8BZnEyiRr*c3u>ebrN09)z042cYdX*hI?C|IUqY%hcx*q+MU)RCRofz?O#?|) zlB?rsc}=-SQJQ#+XZjbq0OIRqWzM=-BB)o&6}%>Dh_{sO7me(0BX_QnUwv>o&3DW^}E2Nx;?}Wbjb1pS7#*&%{^|XpyFZZbA`nh_pE)Z{ovT>Zdd0}dEP=9mN;n!b<5zA$6&NHO9ow9i(`DM z*Y3X2Ku*v2Cy7$>!9AeKgYL^0Tj=mRm_V`nKzZf}Pg@wP7}no+YV3?}J6`Y=Zw;T0 zz=9@(Jwe_NXSO|@dE@KoZykI34wS_fJ5l)!cWrtV0Lr5K5?_WDFh8;=E_fq;nbgt@ zH?fJ?ZnF@$?^vd3gZdq2YN6@w#C##wJ@?CYKOE=Tg58O?S*xcZJaH{)w~XVx^lnF# zfT0vjJxe#(3*eLK3%hdP`=uU|7LieiMBU~uc~`Os?cYg3ZR3;1ct!$-pKuxDM#*hVF=bt3jNn(fQ`rR%rzWSsmp6PcS@%8)_?+q@h;Gle6^z%o3J#P`gWb}Al z)c1)z1&epCeK3S&WsJ?t0XAxT^p!0s8?~+2))eraz&$~9xg33jva$DBbD@$u%EUm5 z3xoiJPao{!Dn_X}y1R~>etHswdwkJ9)I|fP(yeR%$O-9iZrN>&aZN%?Q+6Of*o|Bd&?pIyV+ZnHu82~YYrYu2&Y+dc$oWAQ0ptLbFj@LLC6EQi zRKbELg2lU9hqe`2kvEaSl2$J&{VqwbY*?|A#ZaZVn{U$0YoFt@B5$WBru;$u&35QB zAxLO5y@~OvY?j_ZFg_Rf0$msU^;hUPx-#1~OoP4pG9*r4-D(UrgI#5!X)krk-ixdA zWh7g$JVfuoU~9qmMq?vco@`TlG=L`Q!hLL-b`z7=Hs>U?gFf(C*6~6Z^T29HNOm_- z2S%UkJ6qNVTxWVR$>)q`6FG=^L3ylZJo}e0;Dbo)zM>DY=8o>?TIZKBG%oD-vHT>u z?eJn(hg>PBpXL5n{_nx24D*tp%ikT0mdW{ZS7(S)M4;{H0QRmjzK{YV*+--j)n7pz zP@?))6<~n=86@ea;U86IakLA zlC76lLkeE*dEJRlR|Fu74}%HpMsKU99*Rt9&I7tL z@?=>w)2GZN^%f^4KNvnN~7qoFs&VXRAne<%`Z-vp*aA~W*>jta5;82h=NM+HoEDU*u`uHZEd_=Q?#ylcTcHMe6 z?J2$i`x3FQf~@4V?DP3#0~!H4d^Y1ik^j3SP~`uK3PAoBLH@q>-)GwN9E#>kP^dCm z)HjsxlNJ7%Zwq0nHSl({WdCbw`8UN%pq9kX5k;lHwK7a_?*!M*#Mfz@q661`y^t_` zq9X)&rEUH2nZ1lpn2Nl&$-M2uX<;^O?!&f{&*QwPviMxLZ+CSdpPD1+aYP5zu9Hl= z)IAomvb_uV#V~OL=BsZ!DU|SdN;rd8WSP+?ywUg23jT(o901Y75&ghSHnZ&|mjWCH z@tCjRXj$>=u1x^|=(=oV`w?h$vT&9oto=C_Lja7PNkDYht-tT@kN=fzMBhWQ>NKUv zmty=;Su^_!wlTfE9RIe=D|(D2X3ASm5IfWuW6wL1m%yrB_CJNXgj$`l6W+0qNPkhr zkZ_#1AxQiqL4_}RII#^mSBF^ zeZ;Dxo4tuB`$pl3u}k!4a1}R>?%aC->p3Q7-#Hoo5?L;^zK>BT6LOkgIe9 zlpq&09NpgEuLh%>P4GQ5jye+GqXLDw#My8qp`p&_feP{55zg_&I3rIdEgi0*>E;d8 z>FX_1R@T1WlYqcVTq@C;uw{1p7LR>geWF{T?#0QI))t}?le@X3ZKA>H$dK66iG?34 zBTcwn;ya*U)`=l{opV{x5O(d`)XakQs;lGYly2rB-lfeuyp6n7U~}8Vzff-J``hJ6 zA|?7xnc4mtVzSV9;>W5AhVEmOta?3BEb2N9nvl#su##|t5JfWarR<7uH-|;$uFDuS zXVU@{8vf!Vs7a)-=wXFtfAm9*R?&#w@BclWlF(d{UB#ZpwD}aaTti z^6wfF-O6BWKQNX-f<9p~CdJ=igk|xLOFNGSqfZM%S9w|MDMRT{*KioK&k@~>gvf@RyV8!uI#fEQ(n*Vi?M zZ`%4f5d5&0RwLW^3O?3+t?Tm{m>G)P?~m@{K=6knwql0P;om)C?>;J2{KvJZtSEy6 z6|P%WQv8wqTZ^JXkyXb$4`pH#g+ z;sX|~N06OZEjiRmB~-AVBWE0Bj62JVpF=;O&(>hX@0zzW;79}txZNprcrE~%u*MD+M<#k{0d__nik@aQhZL>a(eEPv%to5k)k^wFC=~j+%j0Caju&mrzwn@Ap&V)2M;pv%`bHximk=r(S6w9@dZB)YxEo*>t`Wf zzo+=NSBp4lI<7#pLL*$a{Y>B$pykl5rS4TN-g@H)@xN`A<$cZgW;w+g?Lns_iNtd3 z8ab(S^@xDu@w&}^*CRvpO(M`T67RJ5#K&ZX(<4NAFywf(_>&C_7{d_fPqBe4S9C;5%}UZJd87WE2pxx42DhFvkCtXzn(eR3>LthM+o~1iO=0YOB5ngO=%>qUkx16@6dM(ZtRe z9_V@18yN9-QCLYCjabKhsmC51fCs&jT;0L8Lk?TZ{cAh>cBLIx*&OO}^qm1-F#xl$ ze|(hBS$i?l&EqT9Te%7{G8P1~QM{Gge^JJD?ub0A`XUr{=<*A@(@#gqc_2Q@8Dv4l z?8V+Odz7)Pn}XG)oH@(5IZ(X4^$ajTeejz@YmbBqy46uK_(&iYx`_*jcdj`TyKsj( zZ7inY+E}}A&zC9_H-Y8NT>qQ~KHsO|#Eg&YBso9hLzC$*-f;upiOty9H%gBqb6yO6 zLm6s@wXE58$nm^n{{*XhNZz*LAR4IfOa87*HvZx1dlSCB*!Ju+nt|dyksWe88GfSX zdMQE^w6cXq1BD>o0}%v@x3#$LN4mD+ztN9t+?<-5MyJSO{s|M#ma7ct7t()?1gJ`c z=Yocw!x{D6>eG~g%=j-67H+!4W3>rGCua)YwE8};E3oUEcf9(B+V$O3?diV}jpmNH z%<_SPZGoPTGU{JY6<#9ezP(o_R#B@eKl)_+UD;TG>t_Wan+)!*)^Kn>;LT->f;tw_ z*adPYZ+GMj?$qzM)?TqOQ;`Mmcog??@)TH|N3u#|Go2C|LPt(02P8aQFnu_+u z_uvJ)&L5A`Pfk6T%kloI0LO>UO>6=}0~a+owgnyA+rHAzQt)PJC3nt;ir-ta+V#8a zG7itcq__|LZg?>F6YUE2B3O%@en>;6zwN{cRlB@c!}v*kIh;@3g<^x_6pm-xuFsfc zg)fqF(~3;Quh2z4)Aw`6SulG3_`aW}*7w2QjPZi%AUv<{YjvBIAGNvj=FM`gLLNH3 zUY`h%bd66Y2z+6#);5Lzbe!4WV^vDnedKm^{FsFIORo6q8Pe?8R=7UExu5{wvI`XN z!cZVKZ@5Yjh|WhapB0x|aH+FB`DxBl6nCef)D0AHt^9j|o{zaV_b<%rZ^T9Ig>EFw zRjosy&S@x4DJ4_d+D4U@5`xqm7~dhalZvCPWH?<_7Hg9Y3(1kV7IdrT^xdqXttWl^ z6a9%WFOvMh(3cmrvQ9OIRH3fV1-ia8JkYCc`S2Bzbeno1INE+X>EvF`@klwtgT*hd z#g2Q30P=P}V@XA=c}w=@=aEn~o^#32W2!4u=yDm50eGgUwnYq`0sP9`TLNr{a?;SJ zJBPtDN3Q+)SE}cn#6~>FnzeFtLV83#kFZWQ(^VJ?(th^=*75*UA=i;L%Qvmo1(gNF zdnA$D1--uekrpAL{fyLns*_W1ZFmaF{qAm+-_>ysQR=E?dN6QhrJ5IwOb&Y}X9Zu! z!AZ%VOu&I;Zb68$6j3=+^trKO{9IkF@QXQi#d2?yx37)+fCoYXY&J^)UISOYZr2&A z%Dy`_zZLQl;I=S2`ulE)i?%h5r>M(YfYi6qp;D+>T;@g2JLx-WN(;M%!*uSb1JM@= zr@1HuV}R9g6NMakm6-wl@H0Gk0{BC>ct|)}D0b>E-V-Y)u3~&80_uOq$5a3CeQeZwvk>zSQ=3Ty|i&rzqV$Ifwo+3qkM<2sd>u_4#eA#>flYk zmlUValfweNvg)KE2SBEPu0B8qlS=g;hVb0R77LHRh?*6qSbvs@|A(*f^M4i(_IT)@@YP&h ze~a-~7=MZJ=NW&x@y|B?XyZGL|2K~==b-WT7=Nqre`Eab8~^LZ|Elp@jK9M8OO&tV zp{}9Nyn_w{UOE{ou8#3-LYgovAwdWnvHx$bQG8p1zkJDozwDLw??RRmNhvjU)HsQr z8l|iRlLAyJbonz?kByJSx7U4?zMg`aso#Nb-PxiBC;8-O$Lpv6|NMm=e(LY~r!}71 zjNf7WjmE##_?wM?yYcTZ{+-6Z%lJPu{!fg5xAE^W{=LTEV*H1U-);QIjQ@o3e{cL< z#(&!Q`;Gsi@edgP&&IdmjGN~-jep4a?;8KG@sAqcdPd_T!}!CEe94#{aSL?>7FgjenodaWOxri_z23$(v^wDzqr+Fx$` zX0J(Sp6?l_pS^k7KV;$$jn&U5DnIiK^ZtLR{Co0sc{cpZvyWfC*Wjny)LS}Hr)x9u zgW>m{Zps;iAIo$6^8d5=`9D?ufp;{$bsPU4b>)dN1?r@mzZPPlMmi`&sD+myw?Sgkc9ir*p`V zA=1iYf0^Ib{cpb+EGG=kjh_VQAA$c*V_@IEUtJ=O zMk;sJ8P}JH`^~0iJ zRNVf%(l-`-Q1V>U|0?kpRF?cb;{rqZDKyF$k|*Q05lnYH4)_)El@la@p!A*RS|wd|j*=_i9a6IDZ^KH8?l`q%)@*l4<5goz=5|jm z`Rg|?D*5iqUnrSy}tw#R}c!N+bX`P}*!OYWTWgVGOfa+W;&PHxG*n!1vwP8whObl1rxk-0xk$6I>a zB|PZ&zqkGW7wDsn1}5GAOYlDk=c&hZT035tl!NJS(6jX4iGRl{Gd=FJ%Rh11@}{+= zdTK-ciq*|43#ZSR+FaGrT6M_ zx3S4v*HT+MrLL)Ebyb*f)#_SrYyEY#-m1nLZ`EoNguPV_4NYrnYrNqmZ%b_z(X04- zo^?f2#9P_$P)hM+!G&Nl#X;r3U^Q^58uL7#ZDXq1&*Ho=&(2z>Rib!2uZ41z}h5>W+I9;k` zUD_0`opmA*CN$J*Y+%38Sltw9467mpDK@~;+S-=M-W3rLR8=qSO>3Bqu=73z;|nxe zSA)pf7H@b}Rik$`_^k>zwX6r*HMQRQ#=0hN{)Bq(9Pfnsf^iC@6Zc@KYQ2=RzPXmv zs*749&CN|MVL+>Iq=NcZpsjDHQ3aj290Qkhw{+i%`jt=zpC24ZQ7dc1E9%3o=ZU-{ zzY~{N(NeFGqsRo%B%fFH7Z#oPbpH8Gkp_wutj#N5%$QygS?#TA2`9m?XjyN@Y)ftH`o`+> z&ND^m{DJzgw-%m2tMii`S>T0;tGqRl7RhSz*%hC-y(xU_EXSaBig$feq{R$mFVx&9 zysEys7NETOtE<-2j{3%G$V~AWQ%XbqYJg-A)6iA54b25KKr&W^!?mlM!-HFARcnSL zXdh>DAJqp6^~dY4wN))bmYRo}UQ@K*Si3H4=wvb&Zfb<3>Orq~QHj?dSq1C^YMGJV z(e#zZ^D@ex8iK1#4GK@t#O7X*W@X|#~$|{#uEGhGqhsrKpSP`%Xie#iE4RCP*)yxXVFJDvqf3Wxgbf>`699d5+ zQejQKuxj94@10OLVFCa&tyXPpSzX^)TQhZK{hHcFZymf=<U#sNgt*LFTU)e}Ssb0{yQ7s=BeQgBZ z5MJ+{E6B57NpH>a${fOEp$R19D=$m+mwLYl(v;|AhfenDsd7neb3@hog-nOuW|_U3 zr4J|6d28k+2eRpRRgR%OAq#~vUFaHcTHn-|9MT%5mfAJm34`EVv!VqoF!9KX0sW=( zG}l&LBkg0b2fb^X8qW;_ry#e!Ramk5rNgtN3a;c;;FD|GjPnZXYUY`Q>FE^rYF;HB zdraa1>E)JoFfOe;r?gu42c*6@F&$h3a3r@_>G1!>hcHb;cxAMC zj%&l+h3m#0z=;yZiz~$~mv-Xr!gb^9pO=8xzGZ#NQwFNjrHMribn8& z%nQu2zyN(>xn~}Wr<$gCsOjcGsn%Da4TUj6oFSk>vSxQ0L*t8bGDml5;G)b~0U-0P#hO8u+ui$OR!GBV2 zQzD||Ypt%L0}%2fvi6aQj=#*jhzE#}4J;ufm0G&c^Yzs*@*1z273-?1S-0uwS#i?f zr4=G+3AG|ckOQ_Fs}fK_CsbO#KfaC1vj zH8f2>j>8PUp{Xi7*=rTCB*kMgZ>en}u)3*HJoz1mZVVr|tWhZ%pb%MI!2rMt6RA-U zjPuTKLON)H0K=^!`SGuzK5(5q&;HMrJDH(U?}Y%9b)2~TrA;Vim}nU}jfgo+!yu!i zq(m_uTX0PcIn)!TNv+9IRwhlCp)l~J;7iM6msc@hz)Y>ikx|$H+*H>8qQjCZt3c_#U_G{ov#vf z;1Fvpnd6T4`?UO$@w3Vh`NWo0L~gNV7?Ed^vW*rkj#vF4ZA*R43^lub8a)OZwRYmN ziUox;y{!@SdMia(Zmz0t5jB8Nh|-*#kLJWCL#qNgwzWYqGEq@XKX1BT_(8FX1=#PvGCl*8D}~R)sHQRm@v#Rm>+me-UnpRpIyHuCOY~F10EaR9F>3-d$2= zRfLES;g=J)i14BXIPxzd&m!U$7viSlX5h}pk!JBct76G~+$C1U(jacBRZ&5@3er`O zZW;NOEwd`FC=+-TK;)RWSb?Md0L1)7K^KXKv(7m zoW;CYw1CG&l4H>l`6F#zTqZ!436y05W|_db2%r{UM!icFsM7u=^A*5f6o@G*C@=>F z=%7GdromQlFA>5x&NxoaTbI|?x1e^cV&W2Q9ZI6~p~V`>JH^XFt)3AK+grhyUGELI z)UQ@-5uFx~48>OX0ZTYWv*h%{vtZ|wX+%rQ zdXbDGNv8en1S zcVc{rL@2b-P}{f?ZFs)OjiRz!)ml|oTQEy$1gE1oO}W`#(blgNWtevbxq(@gu!?EW zW)Pa6Yt{hoR%(NKl}c0*c9ZRCL#;1`lyvh2oMzOcXbD=#dM#>yd!c!pb|mRqWuE1| zTxl58)`cR+RGCTwTV3^K@N5>>LhQ0RQP)tlQqL(u{6g9y^0!o>07S20)IB2RYpvO* zk1yF1F|eQp(u%d}rqu|9t*r=t>J|J_Eqwn2?TIw9a&D+^4cAwDwNPSr*DApzL@Y{b zuqOhf#=DB4DoI$~z>pQ(nw7wMS|)`hu`POxPoZC-4~T+25}PQdihjRAhG>E5QKcwW zaNY$@Sgy1ns8kibsOzi@x@<}T{lRm{RlYC6nH-b8|LKbFLQ#*xn zARE&k8c^E0vZV>ZS9XUMN(ge%uVjDDfluBU3crJ_L0!}aq+K4TvT4~G}l*$Bkc32s(g!s z^EDr0)TF8sL3DM!7$wLSxv({pYj$$twPRqY1M{Vg{?E*5(~n)476PeG)Ll*0N-YSi z$E!6}X;q3@7$}VZn2sOS&{Wfzm(=`2^H4abT|t|U>#8CR>`f`AucmtB237@0k)nwm zC}FTCTc?gV+F#EtGuNDQv|qw|and5AH>ot$C7-3&(%-A0MMSIgQzh%xN}a;aZ#bpB zo>$UcB|K4*N;%1VYo^O%@@J&^%1F4baOR4p)yWqoVDtm3!X`;I$f8Qt`z-yHlkn!> z-l6O%H$OPgx6HF%GcIEVDRgdKwv<(&;M-I;d!T-*iHTt~Yp~DOP@yZTWF`%-s;py* zlYxeIs6uQr2B?o@-BqL1p3JEXS>`7eV#<0$LvZ495Dr9 zRn^UrN-C51I^@Jka3V}dp6#DWf1GZ$Qw;PMfBRe79=K8ai_iYHdcNmP6aOpi?^>^Y z?-c#sI-;L9KVsgu8GnX;-|f`?UHeVCf71Se5*=T9n)a6u)%O1X*Zl8mxU8`Dm!GTQ zYI|2dcR#HCOw+zY)AjpI)4oj8zD(1;#io7Tr<(Tl>HG)2sr|bGI)2(X?Qi~99bek2 z{mq}#@!fyd&-Xl}{mdJ+zpGHc&va;i@je~DJgWW87n%2_{(BPU{T(L%0{#A;vDz;+ z=VS(-n>owG=NdoD_`{9gZ_e9r!=a*=L&lFA{}tog=W?Dk&%2Gk)A;uJoh|11F5_=D z{zl_BvhJ3BImT=y_EfA^G}+JaU)r>`Y+ZOjB8uL@tN%3tf?e9{8>sqj^4oN)FMeu7KRL>zCzhm--!7D?5(8{euhFAxkadTN#ps}^<5k25a7O<;Xs+wwoY(9!5M@^GAIR6Uv(v)$GuwYT! zVRX`Zo>gCsnGEIBRAHJZz$4767I@{2EUnTbrl3!(vaxpJ_El>`tK_;d}Yuj(Y~uZFv}=D06OkzRfsZAr_jg7*B!t4gu5 z8T@|W_+iQyfIf5lDE%_Tnj{*Ori_dts9Y&~L8g%&J_TA^jO`yKArxS!*Gg!>-u4&2vpUAT7K^|%ObHLeapcW9yxiB{-^zEwnqX%l-Y&{HeeH4=+I@FG7Pa&=0sx5R3!&_2(!bmx~*XE5xnGy@A`v`=z8U zC*L~qKTSC`2m1T-Df?{dSwemHLyXISV=6F}0$&tZPXYGrwB-TX_Zn@!7+lHMUVqCz z?E~3-PvmsVx@w$deegN1W1DPQ_p%Ipnzh{NXx(lpv#e}xN_w1~v9DcWS!ya@I>u5F?6Xf!( zoiq4;(OC}bUa!Lnp6#%1KF49L8tsN2dJ-pO=#JKw-`U*+~YU7y7L8MgQIN zGrHabkJ|Mczir^NZGSaQhNk>(9QfY0=TfnQ@)CF8S0#rhRXuyg>oZGLinKpka?x9h zT3I6-)Y#{umyo3^D>!pR00H2-+Lk8S<Pu7>5}T8TCShE}nDR=KHD2q;|j#HtLI#bD{PN*~Fm?2c9)?SB*Z819F- z4qO8+ggb-x;wBT$z`eQrX#b12-{T&_-HE#%SA(m-g{zPDUuE2__&>xwgnJtICN5-L zMh)fS?B@!?cjFpx*W+%*-HDrBhhNJ(+?%*Fcs`0h68|dvfpd29bkToc)@CuU?LGA- zO@4uQRTcV-T0|F2uH^8{3b7Lv!A#4QBBW`9S7k!0x_F#7CE8qjGKcm?nRuWDQEAFHOMSBkvYhO=*ymp93E0i4W-{b&+>WAD!^-`!c-Mj z5XjMqu=k9*w2D1O49k)pDsijX;K*lV z6v0~BEV~21#74CFCCgC)BN{$svaC#YmBeo+w0AoU#M&&EV-afKvv690U7qbT)mThL z7Soc_Zy0%PKsT|xFxZs?7OJFVK`DKa(en&YUtz+hD^AvH!zT!6tZnc%MpmytT5H9S z4V80kja|WXlfzE0$CNhvJ|^*uf;2sCQYK7WNSsJKG~k_IV9Bm1{e$il(xOjo$S*K( z$a}+8v{57quzF)@(~Pm9}U^57-2+LP9*V1|L#QrYP*EKuj? zYU*obMP}?t#k506gYnkF`pX8eNCRl&Np~F7rv+Biz~UtSQ~i}ztmd4$d98yCBQS=r zJF&39va6Ae3ehUs5Et70rBs+oLCK)1Z58;9#xZHMsX%1JCiBvLvVw(IH$_&iveDey zT!qAK*G(6xUl2pJ)y=5tWMK;Nh(b^=c}0`fnoLi>Nta=3z*al+28InRiS5$p5c9i~ zH4i)Kx&w93t`%*g+3piHG;G4l5>9sem1S^>NDJvG^D9$hKAmmpNg-LK=_j*VQzwbk zG$s>NzWg!zS+)G&Sb!NgcF);}KNsjQbvak@5nYPWAKO``tFbvxbi}F)(zU+!Oof)Z zmVuf?*L1peftFa;8u<-E`o< zaW;@WO{dfBcBaOnL47Uja0ZyRv_|*AX+m}*la01}G=yy@b~bWaL#fL-FDU2n^z<*5 zAq*q91_GuWcUT4JZ(F4w1`h!(tcH%6{a6+A6g(C?q^!AH@KwtYKHs z4!y;l6iZT#6s)o~Y+5^|0YmTxg)WghB&mju9$@kjA+tennO`91x8Oew>uHwx&5yuR zR(pd}7kQgjtf_Beqkp}kN34lNJ^-8Qw+MqK%#zm%u%QJ@z4^)l#GHE5TQ~(q+o4W% z+2yC_6Q;Hj)~A&sI+=7;u&k`id*KD=d$HBPd|f#4l3Gqk3&%)Gb0S-T{f6~P(CsP) z_+{^F{qb_+Z#I6n@#DtN|3Ie;7=NSjw-`Te{6p{QbeV^>zsUH_#{Y@&cNza9<9k2U z=~o$lv+>6*@qc3cUB*9b{L-U3U9IukjQ<i(fzkn;VA<=lfwA&5P*zW!);_Ub>_2f% zdtl+}SX<#|t^$JQtg>)LBdZCEQseH^&dFohM;3bu)|T$cv&Kf-$v(gePP)smRL~&Z z+tP+PMvTQJ7W$2%%2U7pPXvrb4^Aw;Cr#su}&T+aer`zLn=Q`a^r#nwIz>(+9&U5GFxvf06C(oUm=XU0~ z^HjqeZomgjz@b`-rx=nGEx&AsBgf&e91f4ek<0B`4o99s1TV6)9XV*lvK^jmM{c&m zneE6^2qHsvjw2_>VdXeHIgZ>Mhcm~Krw~U$*_I}*eVc5ZgIGdnv^bv%gRMNUq(m6Pqs$|86`X=UdrLIH6Ul;g>^JlP&kcCIJe>B-Jh1O!5+&|~xrJpiV`D3}97V1kCxGFkwnKt#>d zKuP4_4L=WBXJtIX*9I8a5IP+XB6#8PSh*g{>9O+EfM)I-!aNl41xgz0fA5}&+_D1xp|f|&&pGb1I`2og40kjoC6L4Ct$=g zvKhgQR7NBKF~S&0j2K1+BLGT=5a}2Ig%Y7SC<_XLQlJQWo(`h{^cX!u4}fVf3g*BN zn4n>_j1~YX5K%KVP!c(K!!Ot4ae6#?ijgs}A#^$(MDQXv*W=9fB&=!4@SVifKWgj1?A>>oOzx+#Sr1da9lVm928CoM}+gi;oxL&EI1P!2u=e> zfpfqi-~^0#Mm7Tsf};Zfh!Ms}V#F{q7y(c^ghvydS)JG7-kY?3}yyq060Ay9nKAhh7-ea;jC~_I3*kr&IgBslfgI` zNDvl?reZh;90E?jh-YLoz#up}0Du@_j3h=3BZCnDr9+5x41hw3P#ly61wkoL1U*lO z(Exgko}mZ8G#CYQUGH;jyd4WZNVAc7ZpY64@X zWkzM@WQJrWWX5A=V+LcUVn$--VTNHQVa8x)Un?qNy0p0f&GSFya~63@`|e4gerV7$b=h!^mI+Kn$f0w4tgqjTtp6OFfJpJ<1wAYRu?SS?a}TiyiAxW2{kGD$(dMqpUHb#*7)2r811p z8f9gT8k03DOJyECisU3AnxOow(WA$V9-XBM<-xK>kFiE)sS0>ujTt>=%;+pt8Huc{ z(POekXQ_&Tf|{v~8Yq>L$W0DX@rEaUV=OC60Y{-cj2UBPDL|=!7h|%lECn>Jp#?w< zq(BEmKtavaMh%ooW^$8*RJ`GdUzTblz)>gPkc#(2 z5yulgzhue(2nYuF;MJp-Ms9g@=Si18`tzSnBs`4pzDJ0Eg!o5@Cp?kxFv9yDCjMdK zA10pgM8d-e?|X>&hlqcOc)}A24qC;2~Q+EjPSmh#LpytCh>$P5*|i)-vz{9 zK>P*7Um)$D5FB0d)XexrA6&ZSq6xvTU-Z<>RfLNOk0u%t-P`@G=5of$$NLLNd+U7p&BIy0C&m^_%A zx;(WLb!HHG(CE>lgUG4N2a!`}29gJI{XlZ+^4az~8FkUO_hv+0AFwRS$v8af_TF05 zC8>4P8Ik0X4P84=_W4P8R6vN4P8DZpM4P z8KLB%4P86o5$4P8NuYi4P8A0Sh4P8G+=1 z4P83E+k&lwq=5~7kiRgda)u2__>la~5qWT$hBBgrGlsf$r-sZU0bN03L5 zQx}Wi`qU@G$-~LR$*GG`YpG9$k%y6oky96=)>5AgB@ZPJC8sV%t))I0LLNdMLQY+b zT1$O0m^_#~n4G#8wU+v15P1-J5IJ=*YAyB2K=MHHKyvD0fjmy?lL6!b<+CA>`CXYKhtwOdia5g2}0k)DpEVh&+hv2a!`7sU>P#AbB8pAUU;>TB5cEkOz?gSEDvkOVqY-@^JESa%v;B zL~RQr4&t3&Y97$*GOh616RiJd8YyoZ3h&QQJbvL&-zQsg2YUwJn4^ zggk_t+DI)?+k(l1$%DzMjnopgEr>jbJcyjyNG(y@0?7l(1Iek4)DpEVfINUafSlS$ zEm7P2$^FUw$*GOh61B}tZYDRAQya7G*BYdV=2dLr)uB~TNrs5 zc^Emhky@g*g_4JohmunpsU>P#2zdy32syQpTB5cElLwOrlT#b1C2Cs`c@TLJIkk~m zqP7K+2a*SpQyZxzYFhw#0C@m8wUJt)w)vC$llzlX8>uB~o0;59ZYHNTQcKh}6S+w} z{~D+G@RgC(!YkA;hI0}qYFk)^8VkcDr}!{(Y9qBoZ3`t2<@%xI)W%S9YFh|-2zdxO zwK0U8+7?V6Odd>5ZKRf{Z9(Kg4z1iP{!G9zY&IPEDJ261B~r+@IW^oSHW4Bx;+P+)QpJr)JvLNz^tI zxry9FPEDJ261A-&c|}S6Xye2D0;+}0Q)shRqPB(3Q)sg`K9roAHftqnTL^gwc?dZ* zZPrTEwqWvL@?dgm+N_nRZ9(KgF#F@#=O`A0m zwJnf5kUWr_nl@`BYFhw#0C@m8HEq^N)HZ)|e{z3vYTB%ksBLC)Gr5_Znl@`BYMY7N zL~bIdrp+3O+E$UgB6&q}YTC@<`{dt~XLsqxOT1T^s)gB4<-*Lr#4daUS+Zckq40nky9I~d9O0r0?7l(1Iek4)Vx=jYyso}`3TwT3!QH~VAwJBGhw=$mNzCYrv9=6ckA)EesaDDo)sC~|5)Y7KRIBzYuxBssMo zwT3!9f;@sef}GlqT0@;4P99DkPEPGdt)Wg2BM&1FBd7MG)=;O1l82Iql2iLpYpByh z$V13O$f^CPHPq?BTtz z9Z2m?owb{MH~DUI>Og9D>a1PlyU2HuQwLJJQ)lfY-$}lcoH~%&ojPj=`3~|OWUg=)W!Uq{J-&wr`^KYw+RoXOtv(d6e}_0r9+xuktxour{(oh1#I zX}-8hnon+$=3Q<{^DK{~x$(b!dxziI|8Lp;zkRv(&+Plx??0w@^?d)iKj^MM`TRb8 z|6A$f-@7*4B~992yZ!(6^!Gn~{C}Ur|ti1_y5g)_1^HGxi6?`-@t~Kf0XV2 zEBCkGAOF9$|Ie2X{t^85`}F_k`s`~rC`}d#Ry!qoFCI9(r z^Ur_fKmR-PpKs~!zk2@ul|TLW=1>2TfB)M2N|NI7=XuiafB)$Nm4D;sJO4ED>_;R2 z(jUw(R%GhA@e4^B3q&YNJLc!5(z zl;Hd+e0(=&cE*2i`)|+rsW%Vww#q4J&AEwZ0WR$s$le?^8d=j{FE4f}8s z08XyhhSLM)ydvb=3;g&R2Xz7~KGDx-Q~4M^Cn!+o?#%hba!T+n*)x(yMfsYt-(jLU zkh2Z+;an3rZ=L26bI#lqIqzIoJMh#g3v%qK!1;%=r|aZ%yG%#+DJxVDcH&!M?YsGR z4Cd?uef?VmwD|Vkm=gW?Hjr;tXZ!6BF3K2~3Jz}e;*=Dd8>zGBW1SK$M@f7r5}{oROM^oQrL zxtzL%Y9}YN{G*|Ega7RL-s~}N-+Yl1>Nsq|O)^N{l8;oBa|)K10;OoFs?=EOE{&8H zNe87TlCP$|W|79C)n$M5dM76rH-ooNVZXBe!Ey5?Ztue_O;Rkk8XzS}how(av}Trl z3q9A)v&xekFZ`)vLo%BEo)y&rvwr`<#q9Y3WmF3iZlAh~&{=tjto@z=hrM}X5 zX@zu@UM#GssTr?1t#RSD`s|PD7}bxyCBF}hl*5C+?JbxdX~|<;Azh*;ux zJe~!8%Xw{!=p7d ziJGgLU~Q;2TpOv4=6Q3={$!_+(xy;LTx0tq96r3(D)XErNtwJh`)Y1z?rI)sUhoQV za#9ndPvPQRGy91-lf|TtkdVw4vy-W^X|(C6$;n*VY%tX{C7Mo~4Cb0Jnn>w0SnC_WMn>(5{rb?!vrhO)jxsuu0RK+yLbj;*zu448u z)iO;sWtcq7waf)fjZCvmmrMoBjm$<n>o(x zZK`XUW;$o`HrF*5HZ?URnXZ}&o12=8o7$R|m~NYjo7!wRo4cANi^URe zNwYXvDqBWdj#>|yaj{gjjI|uMcv@;(rdZBc3R)Ul=2$LU94uDLFv|gptEHM{oW*AG zvedCmwVbsSvNW;GwOp}CHJxf2YHDga*Yv2Vt?5$Jv!+8$*P326nNet&>FO;KccHWB zD0G zeNBnc>T2o}r9^F_E>VA4I;}meJFVyA%vv9vkG`SQP}@+~P(MqWrJbdlrO%WywVAq1 zy|3h}_0{?6TS_gpEp;vR$x^a5S(mK8A>Gj4(B07U=_Rd3r_ooEDrqa}D(QzxL$yP7 zL-qTlecFAxeR^lfS?jEG)>o0LXshU|=*LK7v}1H*^v9%Q+GDz7dOrN6_0W0fYe}`V zwRE-glcmYp$-2q<3@JmKq07*#&m$Mm70@@58fhEp8tG?Cv$eBzv-OvxOWI4iOM0VZ z)Eae0eJiPzww11xexbBbyHK}Ke^a`ty{WsY&wgr3r`5+wvD#Q&tUf_X&?e{-^!ug# z+WorydcLV#>!NefSCy)2tLm!i$4XlaCjw2O3$^tYs2+FQC?dI!lt>!5ScTP3U3sqvF9b#!&~Q>Cfe zsk*89v(j1ZS>0KEA*qnIkgkxviPS{fMAt+=SDLGxtDCF8B3;p5(OuCOlZt7J>5A#w zNNu!jbZzvDrN!FCy2bh|DNCEB%hKy4omy(p%aW{>b+UfAG+aAeH(Y;EI;cIUJE(V) z+_Y{wH+`HGr;XFa>Bmdswc~Z;_32W&HeHvl=Ob}iZ=JWE@1oS!)z#Hclcs5>>89z= zN$0fZbm#PirNY|6y2ARVQd4bHT~mFMl%!44CF!q9SG8AlSM|lE;@aZ6;`+8yTWwoi zTm2GgiFS!@iT<{9TYFn~TQ3tw{Hkq1dVX{9mlMCvBrYVb*=2dYy@(~zJp6N)JXo^N z%l`#fGA$%|NhMj%uR-!3#q02I#Ous>U4IuZA9a=T+v6?7cw7EI#H${!Bac_l<8@+e zE<92<#_P^_z4$*rkGC-6^<%tcNdg#eZpQ0CKRD12st1_o@lVIEBme99KNtTy@xL?w zGe>5;YOHyp65-^^QPx{Q&X(oe#V@rTzJOZc*gSZyczh*o8I*yDNO(Rl9pt8sK6x}`d35$ zYUp1L*W#Qs-!6~rbgceRuMzb*=$z|B4b@tUdfjlOMs}DddmT>9VPA_gpk%Mj87Q*< zSRLZ=X{8e6YFLtAHJzEr)wHG#wN^uQ_&M)ttlg+={@zx5_p{ndwD4f~R-ew#tA`fDb+8qOkTX_j><)o)JHK5{kOPwq?)JtJ51 zhUesJ_<~%`Da&X3Ew@x5+i$t0@3Z}8lm=$|%_t4Z_M1`q`G3@Je<{7`?deT#Pj7mA zdUImyf$BFWX-Kx;oTT_{zqzmlL-m`Bv_9K!F4BfhOo_l#M663LPZ%5e+p|A6rqc)5_%P^;v~n4Xcu?*J(>~HJ!C0SHsridU`C! zZ@KJ#%VqbQGuvWRzd1`QxxN~%;`&bX*EMq0Z`aAy@CLb>pQ-7}g`t|R)KE=Vs^7-j z{Wihww~5()V+zgo8?W$ezd5s9{P*x1A5Y@(tA5Jy8y|1t@$2Z1>g1}QYGnJ(k!@M3 z-}G#CQ2nNtx@G%K&sM@5za^5Z*X3k#HJn1O-jR2atNz+eu7-Qa)fPwfdZd-v*P|M$ z*Q4sUob<-W?CgHaNpJbG^D$Q`Uv@sGhH5_M%H#N-NpJsXesj0`&E4)dcl&kfo&6>i zSKc+JW~VoAY1+TiTXwq3NpJu1+kfpk{ag7>$6P@D=$Jb&V`Qk7#?(+Pr>Qx)T250# zwVbAgYI#h}q15u28v66Unggl%yjs3g^LaH?^Le!vqvls?twYVP)KJZ@bj*p>a+g|b zQp;UxsFu4NnGa=>t1bDL$kp(2cIu#_^&@rPYUx#7N4-mGnWL(8B`tFRwZ7y)zvk2(i!#hbo^wC_XDavp zJ^l6nLwWb_>97Coh-5ytLpWqUXTA=<=LEE>yQ8c zR{r`&E06uH%CUd+RF3-p)n9+B^2ERVrM@}w|Gm8bFMs`Y{!-gF)oW5MDXRIsK0AL` z%cI5lTP!@!8>Lxj}ZQz8^AYxsQFh zWM6(U+P-ae$nCR3Zl4`;d;9Vr`*I)qa>>5@V$`>NtKql(e%l|9&%Xby_U&@w8Jte@ELRRKKfV^?c`?gP`p2 zS%^<|s2)qs@{7?q%eQ8S>iJfG^P3&2=R0S4kbSw2eK`lOWygOpDrfoD?2y}Mhbpsg z_b2<~IkRt{6Tf=ibJop?Pd)GUZSC;}*?&v+-&-T?%dQ0B=)g_n$HNX^Hw4>g;s-`}NiJ)b-Wv z)a})H)a7ct>iX(--2RIij~d^fudkkyd3USCl!^1B52Tp&9d<{LZ`Uw;|I{guF0ISn z|C_G)E!5e5`u+N9eCqn@cIx(OJnC{aUUhwSJ9YnRJZgM@zJ9r1q->jiiO3z(AhvL} z4RVG6=*v}>*3 z$2>f`Cv{-LoEVsfr(T%WG3IRlnyK?DN5xd{T_N@4>+fPVmGe%uCOfP9OZE485vNSW&N0P!mDod{wWnw9NRfWm-=bN-VJqMMEF)I(|Pt9H35X1Kdrv?V=WBPp3q@J7bBzkXETT1%pxzWEZ5Gh@M8_jf{ z{fYnckiJourP3D``oKclQ)zPyZA~SQp=~L&DVnyV(1vgE*rWMx3*zlD{~@f1U5U{ruI(V^2S+_Vkl#Pd};l^pj#wKPmR~v)6t;{;$BEe$;D8O+RV&^rK!Y z**4nKk9sX++wgxy@OJ|C^b=!GKRjRA=_k#eep2n}C)J*Q{$}SZ$GrF$A7QlY>O0o* zx}wceBi*Ue#9rT5N{p#riTPxuLI;s<9~5DE3}zhuDVG`p34)NQh;evE2fu#HPBF!ialW7 z6q~=tuGlXJ_Q!I6vGJSE#+I#iH8$b>?O5Nvk7JXjzloid@HO^IC7qSWV*RCMZfn#R z4{OJz`K+1s3Rye3`&!>;6t}jUSH{ZYwAQO0V4V{XYK=8USxxz4tyS_W*4~BUtW(O= zveE`?-DXX!M-p0EGuF4WHox83+Q7G`bw!(g*2r}Ot+dbDb4`M^UDFZP3+|(>yAF@F zIt`s*-5#B2P5U~UHrO&J_*B!PVU3tu^Uy*M0T6xO)V9gop=*{P? zclKmj=}+s)i`T3*@87fz`Fz`2-}|2ROofNm$5ozK7j=AYrLV20*1okyp8H@8{QTM4 zXqqH9DyNlaA8?TKHglAD9^{m%PV!xoi!4sL$``xmmXqAw<;0B!c}rbSndeB3pPyGQ zDe}uNANk0?O)n@*mcnx6!y@vWncvAgfAW@>escH4#bvo}NjXqoT8`RTMsC)voIK61 zg3NO(Mb~hOzbJAq^YIOfRzTZDV=Ik*0F1 z+0ErIU0TYMVp_`{-fiXK_uI)#OLF+kPV%50UF21jyU7RrddSB=_mp>E>Mc*-)>mda zleK*Y$kS>Ml-&Y;mOFV5mRG+SBHw!yFF(3ARAw5Kad4QNw0*eTYV`%`;pq zAD5QMhc!#(k`Bw{2fF35N3IoelJiQL*Moe;eYHH%YmK}(|5~|V;dSy0-}Q3&k{jeB zv-z)wD6&XfY;dg+3qN@_vD{7j5{R7kWL zR#-GISVRojSVSDCTvU|5QB>^s@jJo1PDC&F6(KQ3QRkvjOzq((-sUPMh9nmgWy6XK z=7Zv4=MqBFl@wv~N{Z>hr9|G-rNs75rNu7}Wd!p`(JQ2^SddXxJnK?UwAGgvACt?A zEfEz&;)M!=`KMU#R#CiIUQsl(n#7H3CNXxPS=7(xFXT=Bf_bYL^&mi885t;Q7Yh>i zQ-j3from#!`(W|&j1a+mS6n$ADk8gwiB#8c(RO9HD62#Wk2?{fz_3WcJXuUgjS}yg zMT-%iqJ{t57@-Nbh-aA=Aq}V`m|u&8ZL#8IJ*yb`+A6}P%fc;42E5itrDuDoS6fDxwBf6U^tukv(xDviT1p}f|adPXPFHmbAW z{Ydm5*F~)M?<&4r>MFVq?Iu2z?k-lG?k;)_=plHo5>1Zw6hHUuC3gAr7Www|7Lz*l z5hXnPip*Vo1@B{Gx?6v-U~7MIr1_7+)oFm}x^aMb(D)}YLN`$G9w!V92MLY#XW_o) zXAxHa7ZEQF7PnUo7H#Vd5xoD2ruE{*kyY`+A`KNs>J1f5R}U3mr3A6DeuCh=QABHp zi2@CW35RvV#7BqWLTWr*cyAakg7qT=@0()rrV-+a(@0Ud#YnM!>qt@DZIoEvdXxy= zIZE)JDu%TmEu!|07LMLy#O2OoM9RJ~V!h8;v9`xp!TYT^S7e;{)OVaPr;ihTi;WkD z296iS&Wslm%S;fw7mG=m6GSo7L~&@;MA7&9L}3n@BtA}@B+lHOBzT_|t7h=~BvEX~ zWRWp{vUvYyviQEn6wzz>6v2DADAI7M7`qFmm^;&PA0f@KZSqQnvr z7{5g1y|P5;f|rUfiA#n4(Na-BSteKx5$!)O6AKzH7k4%<7a{H|#PrT9gmid?_|dph zu#6(cX08;a0#}JslU9l04_67HtQKC2SBuAARtuJ2#G!3#!~xH>;$-)=;?D84!l~3c z5jt$0=yQFYVA)2v&sr~fyjm}=)Z8HItlc0ooi~b(?KcX?0~-a)J)-r`n?$ioo5ZuA z&En{k&0_7-&0>Ds7BP3_7Qr%+*wJRIxRkb4I2PR|q6cjg37Ol(*`V#B;?(Ve4IfG zAvv88`i>_=zN05ZK&)qU5*?vFTxk zs1kQZu&gL%<~}QGbU!P+PMsAuE1na(63>bG&(Dbowa*KdBgF*o3u0cs3u5Pm3*vgn zMPZnIQN(??D5f^a6f9$k*rJ!jsv(y|k(-yq+}O*a*pka)yW)Uizjohi#%Vhi?EhAM34P9#QNel#fOnM z1f zTrQ)7wwVqU6Ln~HK!;gxbU0VW5v(JiNunc`9&p6#H;$-UR*%Ka^w3P!quoJ0Sbsox zxm;M&JQw_?&;etLl z&V}a&>npgvC^sHm$c@h~dEgb32jBO}gX+ukp!bzLU|j~st?u~rqdNlExTEI{cWm@F z;B93CD*a*r>p8f6$AGAU9+*?z1D_H+&}O>_PCfKMjISqH2g3JbJh5i4Cn~=1#P*V2 zur~3+xk+B=e9#N5A7M!aZz!$3@oa`S=GnZ#=PlqElo$It{;Aa=Ga2-e3?&{hz&r9zk(R0yX!7lL{l3D zRuzW#jlvk1w+L=mErQzdMQ~_q5wISI9lk{oTE8gvjw=dfUs0TYQxqM_e}^xvz60xc z2tV;1u4#QSD%2N2-F@-fVqeU=es{@T#vcZU6ca4ZG><6FPet0p;4;g#? zu=S-MlFAgr=oZEB)AVBKZYzckn&M~|QXCz-6$k5$7{jmxI}( zJT55ZF=TLgl;2t&*B+J!>#(Tar~=#)E8x`O3Yhu10$K-t5C1OTL%-;Iuzri(?iDc) z6_M~uMReU#5se>KM4X=qv5ib%-4~HZOt5@0K?yRWPFFM9EH-1nWiuvw_=ELgoEqYf zSKIti^oc*>N(5kV(*SIp8h~fV1Hd{ndWQvKXU{-5t_VcE>w#FAF9_P|L1;cA2&_+| z_^TjHEEkNAt%K2RPB5}Eg3-)51XnB}U|kz`)`y_yZz1?vG!#?nhobDnP#iiGiguqv z!Fo70b`3-GC1G&C8ioU2;rO{)IKqa7r0Oazqn9(*C50hdc&c|YL zZYvyNMVG-=u)P4*r&eq&C8JzR8B1r$D4ro>nX^EJSOK;r0GkCe9}4s+4mdXhR!j$~ zodjO!6|kKF)dnc|vO&St`wDvcRYt`omGNR~W$a9^47Nd_PIMKN{ILo?udjm4dsVRA zSQT>`SH;k&Rl)WNG;yqk>e1C8eyj$|hH8kpUk$N-aj4QH4s5$Xn-g*9um1rPVt&Ai z0YBjI#vgG1!4EJLuMW0rpwo=%NIF#=XPjyvcWez*8&m@mx75J7$2Gt<4|Ho;6RERn zBJbIn=;2liCqyk&98wF@chmygL(sKcZCqJaRwi0xB zTL7YBZ=i#GY|!Kqd~upI?W57vX*mwHGGsgD7@>LYM_;?410i{@aP4py9Pju*LGz*4ydCMUGOZ+ocUw!l1dOR&8MZI-n}`i+(dEz}At z>a{}Q#8#MgycOIXTZ3&u@Eq70v$wQHv8S!EsZ1NlZQJ1T{5I%wsSVgpgiY1kqQRK9 zkPf!R+AnR(1z4x8bKClbe zE`@2Ux?tm-F39lhiq}oLqVUYFsC=d?e$3qsD=T-yjbYtTFtr;Re&~kTLEUk!XLpoZ z(;a<(>khVO!KZl-^qk!TwsSpD*3c8qIGYW=Jy8M!B8b{A6%)~2ffDkfy>c8SmDqYm1Fwi@xZ=d8yPGw`r=uIepuY8 z9~v#~2d|s`kWsilrZ(&kwx7ZGbbmZ{{SkYWACWlhM|4R25wRbCgm1_Iux$`4iT){t1ib|AaZ0f5P;91HpDT%$PV3Nyi6bnSKy9#}2~5!Gn;wYY?8j83eY; zpT+^9)1h^22bb>M#`R zGz78deyMPt`_aap%!sJ0@N) zAB}~FN2A7_(fHyp2J8LCpjD+Y$k%cV*v5%r^Tr@*<SBJO*3ek3nCbu?P$qi#PSg zg6*FeGIcDlX)N3`#^UnRu~?R89Qsxm2RUvW*fxrLW5!|cigB2BWE{HQ9S1m$hq3s0 ze2pCswwod)emoW~7>^MtZ2JR%BBK*{h4V4Es5118}4j0wovIsq5XO@Qs? z1nl>mh+XE1V0$Yz^q7dX6Zu`sZ#sWJBzKvFU1cVLZLzR*n1l->C*ju8NqBy65;V6b z!P6lTCHxY>c3RYGnTSq95;1IkA{OjT#Gb2(xbiU(p9)R}+i+oRG#MQSOh)3&$=JDV zGP2H3hT-*OM0-yG+jp^`_7t4yH3j;~QxLUb3i_Rzf^|=(;6d)GVB0U+#ZASsE>m%D z>{OInH5EONO~v+mQz1D`1KWi$1JjVzZW;ncOvA7x({SOyG?dMnhIs9Cu+12zO4Bi} z<#hZuWIDux=~$XF9r|n2(dqMauss=pku#9gWCk1u%|Nd?Gw|!q8Hl?y1AE@h0Na}R zMw^+)*I*{b_n!&J88b0>>r8w&Hxoa;nhCZ;qkq6GysJG6Klh#m&6HUfy>S*iGG<}! zvsqvpHMUfo4Qq|rIM;nP+E1K~4{K**(uvt9^>{YeevQWE=ip7XIhfjI4g$u_!MRm) z(Es=x6nroTY}-bMGIL?5G8el$QjeaCyesD7;E}oL_uE{s-5Xa+CSeMaP^Enmv?G(S zcWDxSI+TQvJ4s-hICd1Dhe7f@#I&6U$KmskzIYy{ADD-hS@Xd5a(wWckK?iPF}L-6 zbWfO%*hTZ7V$4ljjEy%IgYEjb z?YjhDElW_O)e=MuU4kYHm*AIuOR(_f60pr5kBm#<9lI3Kt(T%x!cxpwv=j&TFU6}{ zOIbHshDODfVS;rT4z^i_kHeNBXvs44IJgXJZZ8A-3Q(rRaUv9{fEJRh+fAClzOxh?0>-1@~cqqhgI0yZ52vRT!qQ&R^ju>Rp|0`71%d{IMZsR)Lae! zUaPTU@@jmyX*Fh@Sq;yZtHFK?xCXAl*t%=r(r*pMPhSJ~ZEG;?!WtBMy9VsjK>5(M z*wJt;BY9oP`L4ob6ixbe$644l6X`BK+m^YwMC6RijP zLNKk;dW5!Kk6#nkW7y*LD0gr@&fi{-c*hN3KM5{l1IBjPfQZo>@MOgXEIPIU4IXSj z9@mXv9}0%XZA4VJjrcHOBX+Lah@VbvM8va=_+r=u_OD<}?M(^wVa{nX?(ac5ge*#jX`wvGUkf%zm&HV_mmlaQSUue-1i!--ecx zwxQ96ZK#{E4K-hELv^q1_#u$rdfQQ>|8~@wxg8C6Y)A7;+tL2RcJwT?1A`)Wfc-$2 zK6nR~F4%#sX*+QA<_=ud?!@zAJK-dDf_+2?AGH(pR_sLYV>^-fU?(=X?m|ZSU3mG! zF0lWIb(~#jyKxuBpV@_NFL&XV_infc??zOE-C*Am>uS4^v1>ORukJ>~=iTUCbPra? z?7^Lud%%7tG+(?2NeB1f>YY6(nrkmwmEMb`Rrcax=e=N`6b7x`i$f>(!sFRqH1|ls z8vhi0s*{51{ZhdGD!ksFf@+siu=qm?J{C$v{isxIY@Uid@u^^67EbI>MaA2xnBtg* zHzm{1v~n5_bV@_{acN*b7qlnS(Bo+ut{L{By8k|;*4YRDe*3U&#y+qQ3{x-dgWJb_ z7+H8fw9)%9q{V)Gj^B@87VQW7$1wEHemLejfN`Y{z_aQB%7%RDXCK4S z-N!KV*JEh^^%&U42N&ycTyJ|ETSgwoxE06I_V{r`Jvxp8d2C?+AI{dYVRIiFrcJk@ z|8^T1U9utOqYWjBq=S8fc+)Z+HxtrvVo5r7A5O>0d+C_tasuPap8)#}(WmDLbeeJk zt+t#%qYEcc=iLd^D0mWakte}EMO2MHiE4{ZqWZy;sD1Y&8aSOo^RlPVKJFCQ--tnp zr!Z>MDNH|i3QOLc!WN&?I2?W&mztgi`y!!Rcp8NdoJP={)2NXv16|5wV05(%EbEp5 z_EX}wjTvw`mx1r!WT1}E84L_RgGEixun;~CI_d&0x43``2^TPQ$pu_Id;#n;#VFT{xKZIEB5Pj6 ztlk*y6+kO$-E?orsQ!%J$CT>_Vfi{^~HzE`HS7c)7@k~5^lnM5=;;8u&LhD|_ z%Kn#7X!a#c+I8oJ>Ep~RhiYkd$ab?q0bU%L;+ILqmtKhGw81*aI zw~JN@zv9!9Uord0uLybYD=xTQL;s4`*iLi}yZc^4%bC}p-*pXZuUzeCmf9g7XUR+1I_YK5{+(2;S8+h{b4Y0o$t@htQ;X5~QDc4QREPE3T zez*yro;PuM%1y8@8LcyKqV&g`cvj>Vc3N&>Sesj@KJpd{t-J;HGh^qITNvw+g{Fa7 zFg3`6v4^a2M<9-^Ie8?qXWfU5rV+iy^n}qQB#BV81px zRr`(Q{ol}P@^5Idh2M+(e&FvS_rN}HbZT=CJx1O`|CRSJB>f)7JiUi$p7;6Y!TVr; zI8p}P$I1Ekabw?oyu5uMPEHR{q}&4pReu2Xm7~M72T0id0P`m#@1 zVr`$I>!_#Lw(2P~C!d1-_DJ%6hKC`~5YglrCJcUt8w;Ny=+HBaz4r|4(?@v4=a^di zIiB=;j;gbtW5u55$aUj6Iyk%l`}I+Qj_5!aGU!cjB7ubK1?Bff}DEbl{3xFQ& zUgFo$FA=xqCH9_riHa{@VsXA#@CknfjuU|6&{z0n$t%1)@(R5lzQWTyuhGr_H6GP_ z4UQqedxJ66-@vo?8*qF9O7DDwtykYbmfqrQvA1Zeyv5tj zZ!vb_Tb6a+V(a<0hh!=#uy7dGtLvW&sD>KcGjz2NZ7b0mlb^U>WBF%I*JvU+;VX$1^}w_=t}+KVnng zkLWz>BZ}|&i0jusVy?p{aI6FJSNnv_?w>Gw$|p40_6grz{)F3~KVh};GdK!G;A;5-j*-BIQC~28^%pcc^#!JvU*MGgD{h5<#h&J0!SNI5 zx9ltG9RG@dCtu;>EGZugO3LH%l5#y-QaH9kIn-KGcJ-B%bt5HZ$t+2kvr1AX?~#o8IPVpU}Q$ok;lv+tTrOP^y1Y#5gKlYdI<$SE8)x=ct?*<)}QJ&E;zxmB187 zrNL=OWza20g=0>XLwddP&_}O$l+!DrQF^6i4ZSkDm0sD{N3U=^isCp+ub5Wpl_q=i z%BYiiWy=k{a+8gl?vA+>j#W{*mdT|gMdVV_f5@eLZjno=*gKcfYIrVX>Wo|p$FV3M zcafdQrL?`COPTXLmvY*{Ny(MZNr@@#q;QOjvLVh%x!>GLDb~wLX+F$JnLXV}IltUV z@!aL4aQurh{+g3wd*-CLI5;a+@;WPHN;xaX!<-e@IA?`pW0b_6&dS*YXC?o1XQjz< zXC-;3vvSAgtdzgztZ>|nvP_Yc9&s`Q)g zs&Fih;=9XL`7zy9IeE=hDe>G@8SLPuT+HjHm`b}T9H*n)iE~pdE!>o(UT(^}VQxzO z8E(qv6>f^>Za0Nvc$CxEx$X-$WwI`}@*-burEZzr%C?ByN`dOR6^`#wZuZWtU_@?Z z&CJ}2=c?SwfIYdD8z*xs%FWyg$Nne<^m&wFK6#YKW%DQvqw**RYUEKWw$7s@_06Mj zT#)kP>^#by)p?YMGVR>6%7i<8Y%ti8kFbl4NCW) z49cT%2BphErLAyp=taK@B_*kR8qEkD%FpBD%Y=iDm|ZiDq5|VGR@md;kYMdcbJz_BhE{?-P}w0sh5}H zKHN)LHp5GaTIr>5Oq9~?q?e+<>7^`q>7|6}y_Iu5-b#;h-im9qx5DvKifH4l-0J78 z#E6lmH zI4h;?guIGNa$aTAro2kyLwOa4%)H8)2YHqHpYtjlgQcwY%cnF5%BMI~&Zn$zoKI=i zEuZ2NpHJC2C7;6aS&Gk&e9F<|`IG^_=2OZ(%coq`=2s@>&977{onPVDEoJ2o`IY7^ z^DAC`@+-$iy@2w?SU}kqSU?$}6i})* zE}*z~E1;YkQb6HYF{Rbg0!rx}1(avU3n)8&Euaj2RzRudP*BO6@Bc7#-tky{aU8ct zd;i+nCGDZT$NSKb_TGE%J;$%Ul=UmeB z+Ml?b4X9O*8g7vN@Oml8RXJ0A5-h`a^CS1#Ef@ITJ{I3av>NKTc+oqKE zX-cwrQ!dVFiv9YgNN$ax?oDZau_=|en(`v0DYx^Q;`Oa5d-R(jnKp)YZbs{&&Cr|F zjG`sYNZHrcVkIhGsZq|Mz5k~G_7ogZms5gY1N#p-p!FL9G7P`$8&9S z?5&%#$*no_FEnR-WOD{3H%D@EG%0INRXrmr8XEE0#7OR2MxaX8ipn+zj%elTJ~g%OgkV_~Zn%lT=nwV=0NOL{kIiD{>nNG^}Q6I;@MNlON8Z^=-{mW({z60<8U86VdY$?P$s zs3r3&Te7THE7rAc#WvGcSedor;OtgNo{!V}TXFGtD{cg|BIZ^rQc_xxlh=w5-&!GA zKlGZkra_n1v>Vo%K9gIcmbGT)&ep7UYK`OoalO`>^YN{@mDQTm;?}(V*P4ntZK&I> z4U!RL_}DhgoY#g;8{6Py*MmcWs1 zNt)Ic$re&=Z(BOMw8g@&EgNpO#qD8R`5d<8MM+yUblTDGzjlo2*p7{Z+Tk&w9np*0 z@qTMNY8`5aWD;2v+774Kc7$iNBmYA?YF4&mK&|#HZ`~frD-vtgp3>RvX}P{VmNxCN zc5lzsi|xt3-5$v@LVkO8{%Fr-!w$S@+JOe$IxuEL2dt-dKyr?J-ra$=M>{a*TnF64 zI`H^G2MlsMFubG#l7S?=fid5Vjp;VXm^BlOxwObwem`T{9WqApk@$xiQy6PZ+vmnC zD>5da(wL96I?}mKM(foYaZGOFJ=fXD7}(bwaY5Ot>!l37x3O?!=_eQb)71+;2NGt3zib$4L!~&MaTp znR{D0)BIp(c6fCrBcwAuV>=@mPd%-G7#1lH<8)izyN)u#(d=3VGKw+oX0q{Oxh zlRUa`Gq4Md?{;BdS{DimyI}Ua3z7|`L5r^J>DiTn(Onrkvnw~&bfvjE&-%8ekp3L3SlY#?1S?Sf2l8~Nki|xt3jGjpLm0Ev$a*aNl0^9ovi8 zdA+dM)CAmoM-;3@Qy@;vVTkfm9$v5rIX7k?Y&+X004ZZ1X z*PCdM-b@MVjpS+B_p~?l-}NT&Pj80TFeSUCDI0s6QpL;^$=Wh#y(!Oar0j$#)dNil zxMRwwG*j{lO_3ZfO{@3eR*OE&?A3?g^x@>JKJ;7HhwS}*kc=+PFZCfhst=2v^g+L{ z4}rh>Frivsz8m#L^1BS9FYjjd<;dE;nC|b(tK)rfxY(EOQGJnYFLniexTA-P{ZTKB{Act6Z9_T$g(eq2iJ$E<>WRR7fv$po{}s6TCc_9ts} zf1GCaXZYIw{Ic#(@bUggUYI6P{Ygvh&!K|;jQG``imC&+VKjhsJqI9JVhU#tz-R3M zX73+BBliJhTpWN~)Bq+v8Gz)BN&Pi|qtym7p~XOI_ZmnV196)*kg4kiA{k^}xDUkV z(m8aW8bE;Ie< zAlkkg#MeKAxKm>=vdlO$O$TFaJ{ZY0lel3p9(IFSadI&Ig9lSBW-zaw4d%-G!ARzr z8MTJUwPXldeTVRT%n*X-4Z(KP5N0_HLGsX42^m8Ey&>Gr7{c+QA*}m51oJvWY1?in zl9eWR+)yGG48?uRP&OYN%0%y>biXo`TK9({IcmA)59Nx+FkI^mV{?aLOdU9keiMe# zbn!4GV@-kMFdm#4#^r0na7!4*&YWQ^_%aNoJsinj)5v5vT0@5OapG{&mk#Id&f#2g z9*+Cj;Yc={wGW3g>*a7%>2OT-M$oqL2<);Yb?& z9!b6Gqo~z#6p{tU&}t{*&(79BGmhLfeKxSvVGp-(%TZeH=k8$MK@~II5YCLvr`5**K2V_TxzP9EVoOIC{s9WBK!O zczqm)Wb)CiH=Y3<#iseIj?6y zUSkWIb+tgU{2ZTV!P8Y1)UvX`!p#Dw01F=7wxHS*3nb@{({Bq>s!yO+s|idroxpMP z31rTlK$A@q5C#ChQxo_QGJ&pf6WEeDfm_8B(9*QTyuKyE2aq$!k~R}9S+mrVn>#Jh zI%3JVbC!7Av_#key1%w$?>9@53?|a3*+iCgpGerKiRjIoh;Rj*-#?L`?h{dg6Y;z| zkxx%2GUWY4j#W%Vm;(m1oy5_8lPDY~`wJ)GvUL*g4^3jonMnwbz?Xzcs27v)Ety2Q z&Sa)EnoMZt$y6Oa8DSNOT{#(}eUsUJY%Z@*BBr?Inm8pRsZnOA?h+?%H}YVdR-CQhgGvgw@NHJye>r{nB59i52j2ya1Y z-gH*}n9iFjGni#GgJ(TwFka0darO*^#o&(J4ElS{AnfuC>C?<0^!W@r7tbJ2V-^?WP$4mxSokgtCEL5*qq^Ma4 z-$BlXSuC`lMUm$$HipciJa!hgnX{<=X%@nM(5k^~f;-Np?~vKVO`476^4YxHJ)2c7 zvk@+Y1Cg`&@9}KT=g-FU*KFde&0$*0IlS*Z2Vq92Hg67RHqD{OfjPu`&0*%1Iefl9 z2b=6U2v0(Y_FN$OY|12rom;&Wnf}wul{57twXqA`15{!pm(DlP)eoSQ=u}7P0%?B6?RW z;!CZ?Tx`3TMg14k++s1p+2Fo?F%z8@Q}gU%9)&IDP|{-5>&57QUrd7G66~8VVRX+W z=&L32nOef34NDknzl0j6mLPl%$K#eTBWnrGJ}=>o)>1C~x0E%VmeOn3QiR>%-pZvM z+_w};91>cu(y~=XzjFvO4*K&jhqI}MBQZ_Ezd*iCI3Y7aUC(0u4J>cEfz{nNuwnEDw$9psa9QlP+rUB34IB;Gz=^mG zoXOfiz~>EI(cXwKTf}wVC}UO|$(pv2g4G)-vEE39`$i0dHX=M1tur>#{o_W4YHY%y z{wC&j+$7_Lo7g*f6T*7ovv(6$j%^|~U=tZpoA{8niHdids8zWM;lSwEelr#WH?!Ds zGdq`V#%0%L0*-Db+J7^`h*9!*GlqqmY4vBbj5TdxYMU)==(mN#84xxF=i|OE!axmty`JtxRu>LTM_Pz*oRwr z`)Vsyzi*{$m2FHm+Q!aa+wd{lhA?S--n5PS2e&ck^fs1U+lF)EHg4u_lQHgX2(L!( zX4{$HV>^f0PWbHY6l~Z|ZHMg)_S%lHY`pFc?&STaowU~8#hiw_IN5m@&xY?p*g3|n*~Ov#yGS^(3*F#djJ&st{m*xC zuXq>2)iLb9-R$qQo7iEy(Vey%R`2GZ^==-y??#wACdKULM8@mxV+3a(T*L%2)11 zS?$IB_+EtLqet{!tkd_BTC|rI8v9sZe;+X&_fco)K7{cjY~?--toAYM_&zRQ+J{#3 zKBlJcBd};6!v7Ii#fqu*t?MNmg8ruVi&XQ&mS=2i$Bh~a!IIfoUCwpd9Y%!;T( zR;)U1MI#?8gd1eb4J+D2Tk-Uv75mezq`zdv>mnJfQvmap?S-xODMyvPpeCvLW zSnr3!`}ya-pK#y(2;YeD&HcQI*^k$w{Y-hjpPFy>^PqS?Hb3_x>?6Ob*>LSY8`ie6 zp<`zo3j5f|HOz)N<7^Nvl8l8mxUR9mV!I91Y;1VwWP^i;4WrK4Aj~8&;Wk*s+Aui9 zhRRGEZs*&u>$435e%l~CCAVtWva69T1KQY9(Z!aiezxo#Y0D4`TZFab-eOy9*V!_9 zr!59{wj>>~#o5yqOMhF0!<6s1EvN3=GB4GZ);YGkE3_r3#Fh=^w(`7YM|mwfqMO)Z z-_DM)-R-C|(2mT}cAT-aL-O*@3`WL1XnV#aN!tv2-oLgd?4vz)KkS*J>431Ld~4u9Y)c1@ zb#h>F9|w93cR+WX0~ymCxUkTH?Q0w`-|j#Y8wWl)Imph99l+_r0hU}nfN-tUPdvb97hZ{9(Khb3&wL0qlmnBzgr-4D{<_aNFq2YDTK5MgCG z_2?iwo*!iDn}hWFbdb8g4)Rs&5UJGARqTcyKd=EWD=B+~re~Z_XL+pETh=uPCF{<fs&>5aN=rR zCw!Vaam3h(J-wV*J;aHb=1!PRaiZURCpxThqTyC2gfHfoqZ9AloyhWa;z5uTkvE+P zy61#G=XF|N4@egq3)HP>Z?l|M{z?nVIoDrUxRYlG${O-&QjU!lAJ%Va* zgrO~u(6`eOgmuPv_z_x-J3^D`N2s^x2-VjfL4U^)G;NO{95mlg9^s4M5sE^NP#AfH z*Y}UexZM$+=Nv&8X;Qu(;bFxQ67-J}Tjwaz&5jb);V6+kk0SguH_VQ5ZSqmB%sWcR z%A*8tIZBY#Q34&0B5XAmeUB0lB->5d?#Y%cTc(uf%kj^${g(PVE(F(f;c{aaLfg7< zwVR8KO}ijWHW8LC+@9^i-DNJ^+vr049v2=Qa3T4a3&LxYe$j>O>n^;y>q7oR7e1uB z@cFe1WglG-mYaW?uIN^GrD{W0>a=#HQ5RQQ^mC>CNLPgO#&o7DgO|7p{Nu{_U9L>E zcV(W7E6crH5eA%{S6#7*a>Xgpl@m{0@qOt^;0IU2zPTcNI7wBGkx~B`Z(1DVlgTlD zn;t`V_%UjaJBG01bX;_dK5LILa>p?&ZI3bc$T3!X9%HBfF@!6}{nj!3;*W9d$uaJ| zIL4EA$9P?OjFQS@2y;%&dTtmQxzV+w8$)}$VL8-|g=5^3c+MIP~Xs|nT!rj>s>y9w>GLPs^YJoeSzqnJa+#O@R6HxmEOPiiRcze$EIKjO^ zC&*JL(3pIJ7V}OpWaSCwZ8?Fk`1m-UAlhAy`<_56_yn!PPcSl8+NYdAIDIY_oFM7T z2|oWhK`lKGde-(}YEut(wD&+5exe6?P@p_8nCwBPc^*ty>A{vQ9(Y=LAbdXs?j9JP z^`L982UEg5*cI!6Z;A&ASsn=cPyG@P29|rUNbe+$wNG-j=}EHNpG2$YNyH1lB(sxp zuRDp~yptraJju^3Cuw1Q67$0+5oZ9W&z>YP_#|cFCutUU67~2bo3f?6@Fe0B;79pM zTIqW-zK$n5n|X4+gC|dWdZIDJ6LAeNYlQ_d=WqB&_w~?+!0a?YvlX)C>PpUgVyac2~U+ zUjp`tUfg}^#jlrMbT9H^)psxaG`x9P)f;gsFtL?4PMy6;=8%e%D*ZJH4r$;f+O}oTJ#Aq@UgxYM+K0r?GEz z8u2rr)9o}P2ApR9=+oS@JdM_z(+poO?>EW&y{FMWbefUJPh;nEn)txe=-)hz*}c;^ zCZ9&U4%93-jpdiqxcxcJbKNsEu6>3%P0!%d{tV)Lkg=&VtTsDC=;SkepLd3StIn`@ z>ltFL&mcYs#(SLM*ts)gT|R?R=G<{{B&zJK5d{M1^aqHqsUO!*DjPga?6eP~_rNJ^^7H{K>9^Sqz(=WoG-cGG1_& z%0XutZ*~@+$!8JY1tV9T#eM5pK3Jb+fYVu=JfOV=l7v3+rt z%y(z$RCX5Yzh}uXJcoEPuxfFRbQ9U{a}Mj_=XgHu9Gz#J!*=mG=|h~O`>t~wus_Eu zmvi*-K8JI_Io@77$Kbo?5Wfar($7iO=Nvx8=lK2e922$u2(00UZeu^hy+K4bKk5$j zV-0>JPV}SITtD`#@FR1xAL8ZUh@&4L-TmOKALoMo_!sWS>^N!n*bi}bu<5NIsbBr* zTZdgYwQ^X+*wO3x#15t0oq z(6inJJdG}(X>x((rWZ&Zc7ZZx_Ih?g11G3}Au^;P#{djOPU) zE)%r22C&XLfER}YF!Kl?>|6kCLIQA&3_v_5tbHQKUIZ}aeE^YV((YdX9#t+%2JRx_ zK;d1di%jc#k%SQ!>0@z`fSDI*xbz|iH(W&gD6Bqkk=$b!u{d*)m`fMw8Fmr>7^#zd z5pkzbnSW6-PZ!DmBj?e(L{jZb3~qLbs~s*OUKLIaxkRlom$03BiQfw@v2M*J3btQj zhV3Q9xx%PZm$-HQ5hm#Fx0iA`F8e5@YGqDFz_v+3_Nf z@9zTHP!@KjDnh#;m|1R?$xCM*piWkV2S_XP3qKoDkb zK_r|BVsu~-;)ap&jv!)_gBXz|uLVJptB}`nd9NQV{mEcPHV@{$aWJEM2a_-~7_+g# zJe(HH*hRsJQ-%pUgL!Hf%oLYkGQEPC6%fqJYr!nM8;tm7SdkITr@UY`d@r4EF5^G{GA64pb7k9Q#8bmv=gW-pyiBtHWhP&_ z%!}KXS(JF0k54Zn4jU?pE@S)SGS#(0aIYSMQKJw7+Js03Dg^P{$lo}G#}h*&uNp%B ziV)Ur3E{U@2)2hq5cdt9=R#-~62jHU5C+AE@bF0pQ*%Rj^F9Re;!yD~go9N>Y4Bet zeyu|3-X)Z~{X!WxDim?%uyS@Nzm|pKuu1Cd3&sCXD81Z6iSrFbd^+TZhq5Uy6rI#i z+;T!?t~r#j(ohhnU0ge?sDFj>7FTfUbOocnSGY3b3L`A8kTLTL;^Cou!xfzOT%py$ zE8K9qf|<`1as#hOR_6-h=;36_6}n_!A-3=e)4yKfQ^ghb8(gJfy{m}7hY==M$u_;p z`r%j68-Eq=8CU7G&s>%7$5m#8U8OYUDu%;v=zX1kL$4#A zAqGvq&WlCY*|qLEO?F-9mi={Rx?ZQ;`#RzvV!#bK9(|oXkFL`^^E!9)uS5>fGRcvl|>TzCownH+Ves1{=rTp#Jn5h`Wf{>u&IG=MB!;%Ve-XJmm25Z0EplC!X{2m&H&)6`S9>$kN zVYsggLwrcQwGYGDH4M|!VZ6E+hQp08y2XUa{WJ`5CDExMjPx&I>?;q$SpOzZ>)d2- z^P6<&DEqx-f7nfo$KB-F^qcHkd=r!PH+jD6CN>T?5yuiar*CrL(oK4Y-6SvOCP$KQ zGBE2V9|~?F{v}3L+@wrD9N)U(SQv%#w_`ZLrs2#U9*($~h@275$|d16+7K>tgyHNs z5Kc$8aI(*YBi<$k-VEo{y>L#aNc-$?G~b4E^=mkbE5i||6A$V|u&YG`T{=aO*CztE z5fNY!!JnBCi0_Go8zX42H-d);BiMU9f*!sRybFrJD?9>mL7|r#!R?#~HoS|VeOUy# zelDF%Fq^%mluq9(UUns^KQxwja; z@)m!$+#=HY7F(TeAzmtZ_P#|>sI~|EbkSC${#o6qP%ph_R2t z-ZcvI(^1sC6veX}QJjp4Li}0s9gdRELKGn-QEaY=Vt~ONH0#|V!RQX+)?!MZJ2V|} zhy3w(2%LF`jZ5#)f8!mr_TG{IvpcvRzr!rwJG2hILvi>WZp7VTZ|WVH)4qc^xyUKI zga5xftgCvL{{P)Yr}bSPce#sa|GS8pg(Jbo`jp^WMbj_oAHYFOr z1<`C;6U~Sn(bTnzCjV$O*Sw;!4TxsS^=QNo#*d_E5}!-^{AgBviI!)*Xlm%k@VZV6 z;ts>EV+_+xV=x&W!{2c+Jed)L-;x-%Z-_y>Vi+Baq0B9YM4uSEf@0VZ9>eIk7@DNU zAkH!Fzl-5iSq$s{NqNrCbptEA_p!b%b)xTM{^&kkGVfEj;6CDMBe(oMvHI}@)Q!j4D4xwG z@yzTK&(IO^h{KKQv*P)-G@hJ|@$x(u&&5OWxVXo&{cJqqcSA+S(>*?3a?d>*gb)fOz4^+n&H9+XQYNP2ikY zf;?X&u=9EXOQRE*_$YzFnF*K_B=BEJ0y-55eAQ3nW!*#`86_ektQb+sd6rnKbI3JicBOsK9PrMiA26kL_Bny`jLpE)&q9e zc)*&*517~P0TX&WVEEt%h@*~nQy*_nfD>5{a4dYlzON71T=@WT+cBs9LngL-2%R4?sNX|+jCx21%ZD_d^APdgQDw_R zG_4=<^YBAHdpxAj?;$TjAM*6}L&S;4y=M=JeEpEC#Sgjk>mlcKk~mc>3Ad(6h%XQO zUPOnlF{rWTi;|EgGfeuLNYqDlM$~U z`kRw6v`VJx;bf|NBvaEbncAVr)VrOGIR9w$ESaXSlW9?$OzU6CwAV?YW33drG)+N# zfb{8=!hoSE3>}-osOc$~FHXT?eF~Fzr^vrQg?Vl%Eb&QURZt2W!&BHEm%_f(6zpE4 zARa-EeM{k##$(P_d(5SVkGb0Bu{^Ur=H9@^h+~kn$&bmI|5)apAM>DtlU{aedr> zCp^LV=@WcjJwZH)#Ql6C`GPb))J&tINg6dfq|vHZ8oh_6$+Jirv!|!AesLPM>(lVq zokq}sG-BM+$nZ%+{EG6to<{xqX>@#&#?ag}rhG_~F{m`GHJ>8xMJ_jbN?hBgZ z>7b_=nm?t*)Ti`a_!RLnvTWy5_Ss8a*QbP@eoEq{r{sk_<GbH5j%ELJ){Ra_9FYXgO($t( zIz?O4F|oRs9g$w2c< z2JOl-By;$jb#Er)g z=6s%G7xkRr2hVwy{+x=u=d}6!9PwPTSuYdsI+?^b&*XE*O#bVW$*>WbthC5P9GFBc z%jDgrOyQX_8E`n0B_5d^^~)qOG*j-Wnbdla$-wkXmgPzPPnq2Lok@{y77glTA?{4p zbmYv-mzfi&nF;uvnJGo=sVZSCdS~Ec86G=;fEi!q6;XBeS@hn8oL3S%`C! zv7fTo{X2_5-E4AdXH%tlHvKzhv(hvh@o|zgKAVb}*>ql(&D>4d9NCvmv|~1Q{Xbul<=OF%1dZp*EDlZ4$PdPmQokI=17xGN>g5Awu zAZ}2KOkdD)#0zFvyufAF3mzrauMGsV`k^#usoN0n{)YVl}mr8Tw&^R zx#pjXxJc=ACzllub2*=pOa7Z&T7Jo8Zh0(~&Q!ZTXT3 zb6!ez<|X1VrN;i3jCX#Cljlp4&%dPlwU>;$`x57*mx$j~#&4y5$xB=+UXo_;ihA{5 zF{R}zPIP{SxKC*^`W15~zQSkjE8eVpMcZw!SZ?!*z$32^FDg9(Ua{r+D#na^KHxQ%c}>}**D@FRT5?dYiQoR3YId)g z)TIh&_emPAWv)wH#huDC2pB474l6&83iH??OgiD#Sai5b@eF{&67} zathISU&xGag=_;C5^ z_LgzJZ@C!!7Tw6VEQo(gRN7k_y?Tqda(VjmE!}k9;Z*A#MNQwKjNjqk`<>+P-?3o) zJMPYWN3&(`*uCi;+56tfRQfwSJl^rs?;TUGydx~?9rYi+V@t+6(%-zJ_m_7v$M=pO z`tM~v;XOB7yr*I3_w4BRp6pTY894Dh-gDpcZ{>T$%}cD!d*Q3zbHM98MFH;_cjG;w zG4H9H@*eT_lJ)jIgUa6H`|mwE)jqJi;Rll2e4u;x4~Wy3KV~18H}wN?3qN4I?gK}5 zec+qJ2WGl`KzzTn3;w|2h!2$B|GUM7xS2 zTns)^QST$mT7E?Q!VK#FQS3<{sW<5(R`Whmyy_#`GR3HR2PFl1K=w;f98=T?Gvp6L}_!qtcpy2Y1pIjw|FuS&S|u>|8^ zC5Qu>cD29a-|Q=GI)25^^ee4LeC3>lyv~-_s_n^MFpP5(iqM46Q`bZRNF3rhteDdpj=QpO)B zMV!-2^(`ekxRkk(rR2w#vg~Oo#ji@)P+W@msM)PshGv~I9GaI=&7=(1K4mlI_JJ|B;*^7Z-2u-@f+RJ zzX`|t4RK@h^v^fu>3`>A-S2E`@g42X--T!RPP5V95pOnq=6xq_)pr@c`pzrc@2qzD z&L8jZGUoUlacbii`<#{UNsul}Im&JVUG{XjqS2jc0*m7nA{ z_{rARKQZX`6R&|k5r;STru<~;!k-ka{mGtPKdE!zC+FRM(%<(d;`e4zHb38-_$hvg}=!!2K4>KlaaqzZuyIUbAI8z@)zO-C(h;=(E0{bJJNUx+gt+xNd{_Wc((G=DR`#&6y?{*86}-!$&^8}W%Vew>ue z_|5*MziGPZH#hhF#`5rQiamZKu5nsj{Y})J-%L;X&9~>jIa=_WPG5hMSos_AkfZV6 zAG}-tp+8qDGJ>NepxcrBIk$*Uy@CWgi zlk@ryJ3sxQ(VssuZe7mwy5;;bD#xQ!IpQ`ab5uFoCzjJ_UO5q~%9**noO0W8yj;p9 z(_7A~OXXPKET>gmx%dytS(;mpK~Xt@Kgtm&IwdtLIM%cRQ{xI@x+~Z{yn+@M6~xY} zKz!*`-BLk_bp?~1EBNJEf%k<9hF!1VZFGgqu~*PNyMm0j73?ajpruA73DqiD)2LGT z=1Rn~&io;j=#Q-=czPw1msC=*p^|fZD=~Mhls`KyHd%As7hQPR?`1@CHeW4 zIF?i*es*#V|6Ix7ujH(o=%oUEbx%+gTem{%W`X{h0AHPori z8tU6l4K>bML!Eb!g>9WRl=$b>HBSvy%~wM$y`Z6@gEds+>l$ivq=rg~)==W6SNoGS z)QhJY$~0R;xxCg;AKz-I(VsMwPnm`iZ@rqTp{cIuX{u_~HPy1Zn(AI7P1UT0rrO?4 zQ;E}Fb?vFC9Q$diw?j15@X?y;^jJ;xd!nYAGDF(U(^S=$YN{2hHC6mZP1S0LrrNtt zQ{~ucsy>G`mALR#iHD{dcSciP^4C=QL7HmuRZSHWuBn>e)l}liS6NA#$}~+=9m~{I zUtemf@r9Zy=%c2pQmU!Mp|9fqYN|H6T55k)E%my#mKxkpOL;ZdQsr&5l=$^kcy}$; zps$wNGFVGJ8>yvwj?q%CmRjoTG%Y3WeHF4;OVwDVrPglHQpwx2RHwaK>aeYrDn6v8 z#LKS&PiU#Cr?u27KP{DXNlTer(Nc~#wbaKbEhWx=74%R`Rez$T);!lzDY;szYk`(J zQlzCyO0<;t{MFS;Emc=XTWzkQtukt9t3Ll}E01Q{>Q8HJC9Z!J)lFL&_0d+=gS1ut z2yHdWTw7h3psft2X)9R=KqW8IR$W(WE7$ef>f2UrHEoZ!inP&IO%G`+StCHbahEpU z+A83jwyJtbTdfV%R%v0{s&|yOlJx^r#RF|MKUG`BW@xMSx!TGxUt4|opsgmAXe(J; zKsBk9^Jwd+d_x_jYU!w;20E&CGaa?1wT_Z?2h@;mI?B&fM;Q##QENu%s5CPj)pvr9 z@}8=rWK9CKY>|#iUZJCUtk+Q8&{6*?suV+AWm-#D zc{k8iy3KUe>ejkS)<94LyXngBr>m+B(p8&B=&BcHx@zPET@^f4SIPPaYR@8F^>&4> zvRJRHZf@08E%xZDgEqRV^q{ViwG&jFyRPc&t*hM6>8gJhb=8VcUHSXTd82fdtgE1E zKGan^Qgu~+hOQcyE9c19RV|Bjm1Bvnk~J69yh>g5P+L#+s-maP)Y4Oi|LLjC&Ggi( z)_O|TV^G(->B;}Eo;oy0PyHC7rxuv&sYes^RG(>j>f9VXRb#Q9+PP9sy8Y!ir)Hd8nrbKhaZx z&-GNpmwL*sKu?tx>8W{N^^~mtp!)ySQx|mfRsE{^%BHryD)~=e&26r)9<|X|{Y~^$ zKzDule&{RP!TPFnq`sOzMqfR))K`P1>#Lx-`l|5~eRXh^zWTL6UoG9PuhRGGtC4p4 z>YAgzk~JlitB1bQJfpAH`|GRMf%?kgs=m4#uCKb>)mO6KgsSmKU+qoPSD!QG=f2Wc zDTVrKaIwC+T&k~(e(S3v|MZoHo`G6l%|PYVF;Ej58K`?k2C8Q}110NJsQNt(lzl$~ z^=pWMS~1!{WsfybV<#D?s2K)I*04}MOAS<=H3rIdlY#oN!$2*wk~;QM$H_p+`WC92 zr-3@_Bj>qbpd5k?)SqhxYIUT6dKE1{E5ShBPc~3}pBbpYYy;Ii&p^4nGf+C84b--8 z21?e&P;)g6Rhqt`8dbwkMbtA?otqdc-vAH4igXZnq7UVXUE&bvV@b$A)TEhM~%PVW_6%8>-|FhH7Mqp^E%rsAP=}bwRs| zYF4F+a;sHERsFAu+TW~-`qjFMTGz3PlJz^(+&)!Q`k*Rm?8quA*1U=uU|HpV_TB_O zieg_Iu3i#C*2%sn6A%mtI4mL}%CP!J0VBHtW)hN+V3sip1VtPX5fn8dDk|z^AtVu! zh#(Oa$3!%)C+@-H5)nPP=eR}>kngGK?qs?N;<@ME`@Qe?ndkS<^HgXUmEkAFYP|$OIQ`sz0s2)StvF{OQJp{&ak)KV6sMPgwJWO0M;%A6NO) zwQK$9`}O{mce_7*eYZd5Z1X3qheBC9{ORap{61hLwDdK9!dfY` z_^>~H@QFWN`Gr5Vf8$S!e)OmJfAhz4H-NB?3e67)pm#&TF#+_BIe_M!4IU0210D~a z1il2@XCvG^@M7$j7C;NK0|@J{(4vw6I(&TqUAZoRKG+yQi|-1ckM0eitG5Rb)@C7F zZ2%o<2%u$82GHlv1W;B>03CZdfL62x5Y}y>{Eq_Y`_BTX@T&m&sWX69{u)4CCj#ht zIgqfX3*8tTNMckV-I5SU{RRcnZRZ41z^Fhf8y84e?}hH07D&-E1L@&8fn>fikSbFH z>FlgPs>=-|tOY}RRtM5pM<6}5A&@S*BaoiICy=H+7)Y-;0}1QI&|A9$Y2n^L`ul-E zN_{?%j=mH~Id25gckcue){voJKMkZc#{xPM zmxgX$8$`ah1kv5M2T|mfAbMn55Dk7bh<5J?BCJ_MPwxq$$xk7!=Yr^p7lY{VYeAIu zb`Tvq97I^phPu88BFDEuQG$t_{Y*3@&_r14hAxOTQFD@sE=xAi+apZ0 z~T6ZKzUqAg2I6uZnsJ911k!fv9bl_tU(IrQqyCYpbni9Rkf zQTF{N`r%;{t*J7R_hTl)`Z*NagnbU0=-fjlI`FEAroLsOzqOm_s!vRG^m7vxd}E^D ze=yN4znRFyg6SdeU>Y0{OnX9u3G41qt2r2DE|@+U9!%Ga38r7i2h+`yf+>)K32XAu z;Q0unm`b~Y$=f@Gw)%(A zfY1=bDgzmc}ga*wHA*>HXQx=ENTWKMbmK{Q! z`5|;;NeBh4386>Ug%H*bqG#_4p;`BZ(1+VYD7P|%j@O3J=Ee|;+aE$$SBNIO5JIoL z5<*Mg454q|51|`A4xzx$vH#a0gf)lA)fGZ1-68a;S11+whmsT;N?W5tX^=UTupSZ7 z@K8EDI+U&%A4*dZp=6#NN{`PAMcP8?-Lz0zo*hcR<%iPkC7~3*CX^c1h0^3r zp@emeX!(8EwmpHTLz32PkDiC03Y?9EUb*pB0U97>md9!ej5 z9ZJ{!5K378h_-cy(lGBZa`}hR+|V%kM|2onZw{lNv%?5$Bhk1qVf5PgFiM*gMn7K? zMw@1bQNsK%dSY=HVcjJ9FguK{EeIp;m0|SInlQ5597cyWg`w>fMp#pcZh1J2VynWa zu`Z0TcoTiNAK?#%QNKfBg!Pta^jl%{a(fu1euDTv52MZBgwcQ>!>H-EFv40)^tpF9 ztqBOH(6Df-iwP%dQaHVTb~xpa2q&!5MB6V6r!kYm=~W7+^vlEP_xa&;_mXfLvMiji zh7&Eahg0XuaN2l7IGNXnQ`2qXlyY}C9lJlAu)Y&T?+B;I9}A}$d&22RQ#f7s9FFy3 zIPH2ZoUry2eSA2aR&|7v=^x=#`)xQ){wbXP{(CqT3lW5Mp=f7d1WgK$pbugrsCWSU zhD1=!xe+vZYy@G=C|Wrsf=ri2P+dv{O+|8bP0}ji9x+ zL{RkR2->?Pf-Zj`g1&k*g0R*UnRiFf(@#Xu!UGZXgDZmWd?|v4yb(c%-iaWrLq*3w zji7DEB52I_5!Ci`1mzx&ARj4`cJz-VtWiZDMMTnd@sSj9RwO+!G?FeK8A;!qA4!`o zjwGyKMJ<;_l5I{Tomdn}52i-a`B{7DW=)wxZpRNV@daNIG^$ByHFlNoPG2 zNza!@;+cwl>LY3UzDOGXOeD28N7BldBPqNM$9XT3=6n=MSQ86;}MHCW6STBoiO^l+!gQMuhVNsMhI*Po;M^TkEil$x?MOaIVZk`uK0~be8 zOIj2y%Z?(c0NYEjeGRs+i=taLMbV%#?0;VrWj!24{i>pJizZuaG-2&7 zs!EQ=qC(Mh?7V2YeL^%1pAt=NGoq<5C7Q6V7wumfO;=?^(}@+)(Y(;g{?7W&4}zf3XYjEtda2{H85Suuol#AwW@7&<&IhSpAu zp@Gw5sC8xx<s zmeFtCu~Z%qOB5DMoiVX=e^M+>Opc|0jEE(yX+~ow#L~x;V`;;TSQ?QMOYbd+rL{|A z>FkVH!g^;^dTlJ3OJnKfwXt;VEwL1{IhI!) z(Skv7#D>MuW253|{squh=;`pE1w9Y?D(EzX&qnzCIJAx8NLmv|_3Ps3s!eg^RTf8& z-xo(q9*!fQsyM>BY-D>pj{KYAX#c@D$~Y89rq|-=nYZF7`*0j#%{F@ei#W>rHjZL` zildi)kE0?Xp3FY+^m<@CVLdlGJ1(By84yo54T+}_mU#O6*m&A>Q9O;E8c$g3jqbi8 zo+d7er*E!~rw23RiE`uVm%@0eS{+YV2aedS@l=0DJT2K8Pks-@(^KW~lwA`~5e@N# zHR7n~nRpt|5>Icw98Zq6cslp}c>4IGc)H_gJYoGf`ud;o^iWqkUD_Q_zj-B4t$zYt z8Ja*oF$sjVJ4atGNuURoCD5fS66kk( z0zI}WftIXIApctu2y4<&{+0wvd?10^9!;Qi)d@6ucLE)KB7yEbkU&_kj=Ek-pt?7( z&$|f}@L>WycO-$X{W5_Db|w(kvZGs1B+vzNB7N_ z?n^VhY%|l1%gu!K_~`3mGnHR&riJUw6tKxmFWhCO>+Um?2`?iGE8>qCHtjv?4Ew1{Nm~)&`_| zZ%U$B8369?epLQV`c3Kr?vihmf0cff3V>gLRN!aea^NRmBJd+{F7N~JPask5 zl$E1cyRF@pZgaP(n{{`d>^RwW(si=&r1NCiNykb1N!!U304q(NG@mq`WG6dMbew2A z;X2WH!g-?XgyV$$gbheJVLf3vVLo9x!A^7@?>OFe+;zP1xbt|CTz0%ro-Sv|^W|&h zvGOu`nmkV)ET_v6avHXsC(o6q%7f%NayVR9NLNT>GKsw z9{37)7Wg~x8t@44C9oU#0C)y?6}S^P20RQL2G#=q0CoYd08ayV0PR4a+#v@@0n!(u zf_y1o+77%dD!5uya6nY>xv1bV=`raB;C)fSQBlEWQ9-MyV74?{8Ub7^D##NRyeBI7 zOjPiYsNgA4L7k}Jh^QbzRPd>&V5z9!T~WarQNc^1f?1-1+eHOUqJnos1rLe}YDERP zqJkGi1s915-WC-M7ZtoEDu@>qTrVovFDiIbRIo%;a7a{eo2Z~hRPcbPV5X?x1yR8@ zqJk$y1#MEB?i;0ZyGje;KMhzhO}73>l8 z*dZ#26%{-#D##HP+$ZQ!CFpUfsGw9-aI2ulctMX!L60j1J?<6s7%J#dA?Q&q=#eex zu|d#dm7vEAL65D19v29D+#~3*NYLXJL60GV9?JziRtkD-5%h=_^tfBlg9JU+3wkUR z^e7SZ7$@j)v!F+ophvQx$2vieC_#@)1U-rcJ#G^8@DUX_LXb=_fcFChaPrF3C%Z(dF1;2_43Pc6Jhze3g1wV@lE*JFpNzmg*L61&BkBOoJ z-gep^*{+Q4!9Y}0+NAsqJm2#{EQKZ z5*6GeD$wpXAIV2r0Gux>C=wN9N}1Ah;A~Mrp{O83%8=#*+I^?L8zY5l4bbk(v7&-y zqJn9nf_b8X!J>k6L5~PQk2FCKZ&86wR4`Z2<2+HpR8heoL613t9^rx>`r5!t7-PT` zK@WXxks_RBz+^#>(Sjc6M(AJ_^ms$Ip5*Oa-fsO$J}iGHD&Xy3-rhYZDtKK~z}vpO zy<0CTcuiEGwRw5l*4?fZUvcAQ>1B7jRBN|BE9mivpvN%WacZv#*i3%PT75qa~ z@U*Dl4pBk7s32cd@P(kqc0rHFLMY_ zNYF!TA9#)q1WUn^dvriz5+5u0qdvUSi|_j>$DeV$7k{_h+lx<@*U3@xO|sUTKU*$D z4?fb}hwnJ9@5Q&F51%HbN$!5UG)S5Qgaf=U?B~|fY$%k z`rX5&;TWw5kj~iumX@IB+$No_|9z%@_XE-cf2!ZD^?S8`bF-j_)-V6B_Q&^%3bcN< z(ks7E?PaeP^}XpQ1g+n_QB?46_os!&b!Ze7^z^UA``pm_(N&@Xr8iwF-l}4}s6gL) zt~B(XuQc?Y?=|$EhZ=g%6+(;w`rdT8;43O{iVF0->uf{sdV`@iJ;TtO-fHMgUts7> z-y^IN74#Ps=zG_T487}H487|ihTipZL+^T}p?AH-(7TQn$_&u=uF255UT^4KFEsS7 zOANj1afaUY&4%7}mZ7(dpG6wrBk17}^w9T~7Z`fWnTFo*`9hHa(*-^H33}KCJ@mb2 zZ$t0dCUhI{y`aZQL61)aJx&OE{7ul~xS+?!f*#)rdORoS@rIy>@p)b^=wa-CYR`A~ zc>ihp|4Q$_uV;OmI%0p5+&g9;E?Ci%O}a zO5%Ozt>`1Kl2^)mLk4(0HAXB~ z!TZ_SfL5PvkTys&fO|v*7oh*G^}TsN-Pr$LC@oa_*Wx%gZWa~rezw-P=KbePpa{^9 z-bEWm@9q|~dQKV5EfYz_dQpMa&*pt^-q+TTz9kz*-_{vM-=YMqAFuV>&(uGkFDlUb z^Z#~#T}*dF>u2k0D<4B`rZfqjUvoultxfN|&nkz8@A3tI)>nwEp-mQGwPkzg$%Clc<2d@8WIVA4LTd z1wE8r{2gj9zFpLh-kmG_V1Uxg&lk6=FxIce_hyd?dfXr?I9-2VdvErh`hHB`yT4d? z$^fljue~ojAn5VApvO@`kIjM}`q6_t;WGn92zuyy`+rylsGfwBvfi=)e-g=)fUE@BaZq@BTVr zrvduj`uzeQ`{v`_CqxDM*1)$yg8^R(dT7sg-hU5~lQ53YWOx5v67aM)N!pWrfqXtj z^?7fbzcG)*8*^*7*4v&6Jy;qnr31Xb9UF zd*EsM+gkrRRM2CjpohNqJ;2br77e{?b5DDGxu`(@wrb@W+rRp^M`v!|>fi2U8d|4C z!h8ett129LLP(B6KnTb@?@F6x%qeIKO`AOK+ZJ&q4k$~u8+9VjS^8omZ;zo zQ9-e&fVX4j0}Dh2nW6&y+p;tF50p{+Y3iu`Jau&aJoTwOSIiLfFkY{zf*$(O_(6uz z_&J8RabAYe_9=$Z^U;EGebG8s?^pfXIVQAqD{ttO`#4QhjO{ODduyzq$6!H^L85{=qJnV4`;;pLJ;sO%ricoR z_iKvb{p)}FK1I9#8{M_LSy#6+jL$Z9^P1Y(t<7|D&vR18MLp~4(U|YV$3DYE1*fa8 z^|f=Tp>`fANTLF*K0i}^ZLANc33|*E^f2ZpKY#vQ3l>P{&@~C6+nTSw{p_trwfpQmK@WXxIo0s?^33(+nci3Soj<&UnB8@# zR!(@^huD)Loq*s|NYtena9u1 zMLRF8L8LwZjph1G?<@3gC(Q2W&mX1#KaIa9Zqek1K6l_c!{7T)ES>nHeBML^oA}+$ z^2D#E|H`%JpTpCk=(gunw(hyhKJlHlkq2*xo%-C8xHS`}#y1>%`i`@nJLd*Aao*Pb z)`gSfCQcoaI`M`J1126WxL=LCL*2jgxtjHhC!X9VJ=gwJ+Qbhw{PW;PF+~%_BIm)I z4qQL6_>%DlCw;JXVtnKC&z@+#apJA7p8ag*Z#PbiFVBAFj_w;LPQSkJ>6)t^+QXRD zS~Dd3*-be`7c6f8`t<6vBSyO(Xnc43 z#Z^;WmnWIR?|gWMYr@cB$v^F$=Bk^xHgwsP^IdoUx;5dclFyM&mzriZ7fyChhk6Oe zyo{afei0gL-g*3;X*+YM;a!-g{0Y*?G6PSS*WU@hpKQGBZnJ1K2=z78}F{v$I(;8^VUNbJ#F8 zoQ+`TG7B5YMzPUs3_FjFW#_YT>;g8PUC1V|i`d0%BD10xO=eTrR5p!G$7LZlgI&rl zV>8(-Hk)0}QrH!24x7v7vH5HPTgVo%E7?_SFZe|<9J}`-OF}-`R0?k}*_$GWttCg0J9@SqCP}#16ywTom3A z#R&=M84keQmBE<*H&hsgQ45PO3Ugn^;tj`mVFG4NSTU1jD&8KDa4Fu=&qh0K4%!|I zFhBAt^zyI9n}Kxn1+p+da|PxQTMW9xfAbU zw&3m2eS)qqoazunN%r#Y=hNTU&p#kA$P^rcpLIq=Mn%WO#>FQjnv(_$JZsS4vy+Dm zJ!jbP5$9TPTZ}nx?D^v^7=Ph}i!PpMoiusM)M?W%p&6H6HgneO%TunHGk4zn1q&Bl zdDY@2ORr9~rKK;+$jn-vowMSa+`Rk(`?ZBd#U(3Om9D<-`ZYJKz46GpUEe?V>=DO< zFK#*Fc;twq`iR4M#8Lk0h9i!~Lr_m0+Jfzep2a_RxNS!q4;*o9KjL`!h@;|&rBvcBR_`4Pu~L-+8o2M;whJDba!E1D~ttD1K-S2yo$u4%4qu4{g*c~|r9=KAJ_ z=Emm7oA)$7(Y&{LU-OgA`;AF zXp6I@yrrV0vZbnJM@x0f&X$^%+LpSO$69u^>~5)VX=rI|dAwy$%M&eoTlTd)*|NW- zspYAb11(RtJk#=Q%fS}4cIOvsMt)AQxiGCb)4Z%8e`RK2aVD>Eax;csjDNm{>MFmu zAn%M-)$HPeS)P&Q5r05UorM$G#5$2Jo_|%gp$%ArB z%qxqKvXUW5+HYRm>7P9hB__3Kb$)SnDoCKL8T1w&(FUmzhG6q*Y6?RnGZ>qP#To-zz z$#|?6)bO7Eo$9%H`Wbbhml8jI8`zx<%f<0T9A`YN3Yz<+!1#VIzvgE4tk5SU+MC-`*Co%+2fHzu(Q7ufNXOoaz*L|M1vKI-hgJ)|fo7 z_4DnP3UFD%3(vd<9y9poYy77$N5}cATP96m&h}dtj#)W{wa#9i_xxj1*hP2SjxPFi zigok8()fn(sVUzddGBbHQh7)=ierNDP2Bp)~I;P zZ?tONRTG{oy78mS!%KR1(5s$@5}r_RjXT+W)){Q-1t|XpJJUXYb~}&v&xTzwT?yNW z^y<&(R2Tn^GcQN|U_2xJVS%tXLg(tnRw@Q+6tq~-~|Vcp81xqJH?OzBB5rNg0Zcf>uYYyVld8`^^<2KQ|b z=)#-!=-q6PK0ZgIetVn2?TpliPcgVVFVydEwdmdE9ou#3NqI;gAIsOf%Zl}G=PJG1 zvQqDM?9#hCEA(#XIr{ub8K8HU4b{6%L-cNztamqlqmSS5tKMDKrFWZt(Yx8tdUx4w zz1#Gd-p%R^?gqWPZMEL**r#`!hwIbNe%Eg=JE(WJIrMJ(>w0(FXnlMxQSWxP>%*7b zrgwKt)Q7hQ8r(be<)!mMz1w!NzF%W>yN2qwI|u09*4y=N#aGMNnv%!7IlquuQ$#XJSjv8j3T#}Ppj82w$*4!)Sj^f>+ z73fI~F^?QMV$=xrS^ih}zw+m=^6=OF@>l(!)aZZJhkwM#6Hw+FO-Gt>7k%Fgl=J;QOtNIia247T7N6Ht;X7Mrc0MX%TEMv<)1M(dQ;;Gx#%D zJ9H?dd|xc{Y$u{4|)I0@ztZ2=#EnV?3b--_`2*bu-VY;a7r1*4V>6*KeTIDjTLj$+E|`bB zg0_SA!R$Od_>1|-D;@?sVFB_7+6ulDwjMeKeBnaIHgbRP`>-Dc7Q*Dxu841#}_l!%EK(d^R&a0u@&ek-8J5ER!AoHCpl#r4*dpjg@BzGYUjpp{PhHJeF?0&}9hd{U1N`I~ zlzScq>~#Z1(4bA=5$jM6p)KGNSQE4Z{CAiOx&!<(tQ8v5me{ge7<&!c4!#}M23-bz z6!s3Z6TBbR4($TJ5Bm_h1AH9T0gcH|Y%J_3v=zJpb`09ibp`U5Yw)j6AkTUDy*Ttf z@e)wb5hwT& zSRAwy+zd;GZUesuvp{!%yI^CWnYX|a{RB1++6-P|64+E|8@M!BV2hv~;Ls3(87V51}34t0E8=v<-X*>?i0l@Jo>bI}Y6j{sHEniTI-g78xV3FlaOQU$9}^ zKUQE~uyN2Puo*UihXI@7kmuYVyem;)DbS7JFJRfwo!|m9@*mm`u1!Mz^Dy9U*m`I- zKw#1!ft5jvA>>PphhaH7Bfumu^pv~a(hY9Q(Xe+n{)&<=L9ywfKau)o-&%sR4E^yum zfki>v!E4VI*jdmHux!COK%2m$U=yIN;BPKOzCm|_|1k+=muv9o%LSIf!+_Ia8=>vs z%oOAg*Wj2r$RB7kcp$71+5#R4+Y4<4zYJ@FZUcV=YlZFr@0yFU1lwda^Wv<mFknsX_v5!wMhu>yGx&8|Tn=As<(FyQZCuR(W$^Yf6m(01^9uy3F{z(@0upF9kB zOabyR8^;1Kg84w(z}72A$KzD$D zhOLKYYfy*WfN~3M1`mR5g|>jpVB4TMe+%0V-3eZ@7WX)`4O|V|1>Fd~_ePXqXean1 zSSxe~c#;G6HFOGiJ*)$|4E!$a7!Ly;aTCfdv<3VoOwNHnIC358H)u0>5G)Sb0)7-` zhIWDC)J{8y-urb^p{P0PXKWHa-Mx@A= zK&OBogcWmta4T#L56}JLM7AE<0sieQk!^)$gG6>XOJpxVcYwDn7nytw_62{jLS#PB zo!~F?L^gqI@b54yG|Ly+$Rd$Vg|>o!huOG)vB++Q*`dq8!&V{<&=#CbBLb27EhA&c(67bGC`h1Z@K! zen4c&&>i4O4~c9XbP9M=InvC-gRiVWp78MCuV7oDJHaPvkv3>nhqOJ0<3gLjYj@$e z&<^lTyK$^M!~;HAk7Gfz29d4aC!)=ZFyP(Kh|B@q2!85Wk-4B<;9C!h>^0~zaL(%@ zYlpUjC%rGSsC=XoEVPSk5wr<>4=e-P3EuG~@)o)ge8txy+X!s~S9~L~ZQLLHVBZ*F}&} z=OH}UPn4LGYw&(pBeV^%Z0Xqe}JulX36-3?GTA=gf@XU3`Kf)c<|llNURCk362;p zu{LNk`1z3%I|khb{(cl@<6Mht4Q?4NF%xtf_@;{`76)Aho;FcpW1v&OZ^Nw69pIOz zOKc_&559*amI3Vqe>Fp5#n7GLpJ5JYcB#a?VC$hx;BeSRXft>aY%{b4d>*U}+6tZq z+X|fmo)6mwZ3Ab*wnN*&B`_zn1AGgt3c3t@FRTXI3ElzQ1>FeV2Wy0Ofe*p8yW($#a*e+-jc+w(V3+NQ^1y>@^p{?LK zS0O*4ZD1Fy9h&pP#mFn}5B?hV6LcrI3&x5N{}PD}fXUDn@En*wv<*DWhI@_sgJ;5q zL8pMTU>0aQcnfR{v=cmXnZzbQTfu=D*azAKmNSt*T!Tl!=J7D#BUut#1lrt)&oBox+bgktu=UU;a5!uuv>BZ7B=Q8>4&Dpf4($Rzy&v~J*Whkg z6Etf=c$kZa2fqVrh3)_^ds;8d6y z+6KN0b{2FQIQSWqF=#V*AZ#481^ggv0<;q>9>jeIZ30hw9%TtS1^hfL7rG66MKj6+ zv<>_vY%_Ex_^lSyhtM5h{})gPLYu&gU{yRkxEodj%??Sd6t)-I0e%YB1nmN!^CIp$ zXbU(C=7P3^e}laM&0dn&L0Bsf4{m|I25oA^GX>TLZ3Yj9y#s9lp9gD)wt{bkeF$9! zcEOH8bEcPZy`fXUEwJOzZQy0EppICHG=TA`PZkAj0vEx|&<^kevdog9o#4YTg6;q( zdC6=Zv<1AhpUiB~ZQyTwWR?rv3BIkr%u1olz!&?<%mHl$SNqFsBXlG9t3a7Kd3f+A zK{9KC?f{>U1!7!0Jh(AfX01FtxFbYnAM!BZvqNP}R7M)WAHja&{@|lgGCL042`-M4 zS=cI^3%Da*X2YO4Uza2^EB6Pd4v<+2v<=J#%4`WV=MGpl4-ZZmgt(wN-!=s20$m1f z86&f;(3bOLwj8z#+7A8(wimh+>^~Og0&N1XJzr)oKs&$-X5(C-ZQuo$%dCrQa3##A zls^|_wkZYsLzjWyf<-}haD9c$%v^(~&cS&>r+`nu#z3>VGJ6&_71{-ko-ebR&}Q)9 zg)+;4wtz2QglhzC1#g6HhAsooze;9h&^B=XVq7C=JGf+t%xa(=;0oAY=tl7JrMPxH z40uQy&Jo%IUIP0N+6K-`N1pO9;J@F1Jc8~3=iZ3(S`B~jHkbw42|ffH1KkGh-YBzi z&}-0`Q#d$3HuP*4!&e7&KEib{5-4^ zx(z(*K9o=H4{n0_T!(7}K6F3w0lE!5bQ`WIwEaPuJr0||!+>9dO@;0Ne-0z)|LPw` zSefA8kNHpbvGlWf+r3g`m)OSryqW(fx1URH6VVfdpV4IW71P!In+^N-ms$T&UKSpk z&=1d)b&^GNA*{BK7T3T)Hn7x>#b*0rC^ee-Tl{Rk_Wmh8F7GzEL+lj1CFVU@vFsl-CFMHaZl*V5nSWAB&Z-J4!*U%TPBJUx@u^muA5P5rU5)jFizCfVI- zMxEAg6vEr^qg)<7UE9~gpYMzM&S#Wtk!+%?C*AzmS~~bSc!|tw6n-46v35*vk$KO- ze!BQQkL97YuzX)F9v?5}v(9~NyO3fyCJ*PC1{3O`QZMG0Ei>;uI3~X)lMzN^Elnam za)O-ixn|n6)BJh4S!cNJ+P<7a`85qa{WbN>8?HU`SvxONe`Z=|EENc=ZP(cIxTn)R z>>T8MY6MH|8o(ADOJcLy&1`CGBD=6DfsLw(XG6BdG4sY)7Fim@g0iDoKj9Lk-1l{l z@NzQQqnv2@bGkGK_h-Sv9HuX+IF~>l7C1`p>%Q0cHJ$8nO|^67@lWm}Pk20qhIo9v zneQBLij;K$d}@0m}hyY@W1c3gii<}a*gO76kmbAMki=9}(LlTr_Rp64H(i)THi z9mjKDu8noFR*!ks4cfjwXcwld&jOylLbYD=JdT!MF}^Hj8`|g_Q4g2m-3i{&dKKbY z3HTU|1;;f9;hyqlF{pFGvt?#F(ns0V;^O5X-Q%9(_dvSGJ)oVFAL_5k{VYmtk7ICu zp61DFnz@^wSGxM_@YGry+PP}1?Zclpygt&xd9vrV;(AUW`Qn*J+P;0&ZN~DarQ>w> zPP&>V&+Fx>jrE1m?I)woSD!PU`)O%3mOalj^DtWa`15BJ>Jnoc!FUgQ?qiHgJEq2- zd8zpskLP)PjmP%PbI)*ET0M_{O1>D%lD3bQ4o~h$lSjM6Gw#0fKr7q)9JTw1AA>*d z-SzMJsDH0Lwf^mEKV#bYvzWI_GZ^_g#<= z3lhSaXA4U3^JaeV)Al&UeY!m5Ww20vHhCW7kHTxuvOg2vovvxU>GCY|OA^?UE`K)n zm>;{e-Iq;j?a#(F`LJ_q`k_7L%?57tV)3PDt0Rv>h1gT`-+0cR>G@CN=I1}TkL$wy z`?_BLZutK+eW?j(iw2-A>W{W4$~=DRd|?yHd=1L{Hk5fhH{=k;s4WopKhQ3m#)L<()369d%As2mv5&F|3`VHJwyJxS$oE6Z5gdC;mQ2jt387?=H;ue zHnSGrnb>oGW7xjN3wYj)LOb5(W#=t-cOPquTAvyB=XvB=&W!B_j4S&Vs^dS#{sG@M zO5Nt!58`nek8`@~s9hs14|)5&(4+sTZP!@q|8Tc<9k|wx=Xo!4e_j?Rd-VN`{R7_a zGLA3Vu%Bmpm&fCoM}4(Nc^K__bM3jmXFIyD@r1tm`hEFn?OWd0ove-K;aJ?A?&0Rg z*DS!B12zJhiFleldfo?~dCT`r$G+jd=ixeOPpaPQ6z)3+{@PJ{{e$|Q7bNwJ zrn%hXtj0RXvu@$XtUz7n!m&Ix&v&h?@UmIq*#kgW_qb{Jsd=oOtLJ&~GH|;3%H22P zW3Z8@#^sIgh4zdJA`TvpXS~|6JnM7qo-@`{JS@KlPj?Oby8rm~>TAr?Sm$YVsAt;T zX+_>nR`Zr0cU>Rt4Ia+(dR!ca_OA);-ypPq`Fn=|lxP3G%k$~Zg~!S5bb0|!@8kIlS*MP5@#k=%$8)%^`-#_Ap6^Ap zbnxTA{`&jBGY6hu`feIe`PKJ%yRYM;(A<*Cyjj&2yf3~N?;SD6h0kr_^HumX3yjaT=JTTXJTgAdng3>n|F(wz?uP#khuw_$;AesH-{0`x>G0pr@Htsl?8E1C z^LgC-H&A?D6rV@N=R)&&S}AwK;{ zpQCQUK74)GOH`e2zY!o6qO=^ZCkrURWoOZxYTE`E2Fa3co$$^S}6fIX)kn&;R1{hx2)9jnI6aIiF8v#(sRBIiHKx0e?PcoBzg)&u`-Mo%rwW z_*`#3$D7ZS=5w9+?`SND(}wVTemkEJ=iqVT`r4uG(0r~tpZDg1=JVkh($9Y%#(x)< zk8^0cmVV}b~Vcjr4 zj8VnFhQh|ero*m;<-%6MZia1vRlxSaT3~O%j>3M01w4RpQ`mG^2J8mdov?D)e%R}< zk6@iJ=|OK61RDT57j_YBHp~Xghur|X1NI249`+op4fYxAJJ?BB|A)L;6l@UeJlHhY z6|k#eD_}RkZij7$?S?%EYlD3T`wn&zX4;N%CD;(yIM^ky1+Z+`b+FrE55xArUV?o9 z>x6kf?9C!zNwDFt@i2ldfaSv0!0v)oz#3pr!`_7b1I8ZlX3?;*um!M{unn+>VD+%) zVXwmu!;Zmzh4p{bn7KBvW@uG`fd2y z`et?qzPNrDE5ldUx3GKg<@I~nefawNHhh2mLG}>7!TvD5!rt?x{o$4o8M*kTyZf{I zsrVc+J`r7rZwBjpO49Y7%d!jd?1q5La&zq3PRnu&@abqZ&SeGm)yA+Tg@u{<#i<#Y z{DaDcT1dsIcco?(rseg-rG!xYQb&*KD`@K2F?w%9^o81|wsG{_%wmtIxhvJ4W(;6R zduIMJ93P+4&dC_99mvx!wI@~ZE#RMD?l~Yl_}86#_PVxL_3l(y$n&IUOKDEArn55B zit+txgR^JPtjx@e-ffu~MVXn`7~LLu#)I=99{H7(*L$qI;@*h!ic|5q@t(Ng%rC%~ zz}4%Ey;6%x?Dm4f-n|P7^U@5i-ss#LbulVFx=0l-W4yd9q_1`t3AOO_q~g>~o+sPK z*4}dBj!%m=KeMzq<$Sk{wBj_~QF1f$mltRE;blCa63{b)d3^SQo&w=MFx$$N{%AtEYZYoyPE4 z8K>;xQK=|9<&^eTGrc~i#KeOcBg;<9&&ch`3HQ#5mvL{^xAzvnSMJmCb^V@f^(eBQ zd36b+06&T^rnXIqtOs)GXE99?9$R>P;J8BckVyb}tB{ z?p~OQ!z{~8O)tsH>V3#*zC7gVd_4}R5AKnph7J0>?Q`SlV?8Cmv9badi|DOZ;KqZ? zP!x;OvWzEJg!;`GY8gJ@tmcU4Bgy^j>AjZ>k0Q5I_vr8S@i-3;&)y5dlg`)g@qE^L z`sw!X4eF7%JhZzG=}oxmVc6GL(eNGf3JNnlD;(~pzlYsE#x_-vJ*($v#fT!+vmPw! z@#$?|7)vkQsE~T%P@c%R3DrhcPZ2H7?0uGV?Qu$OXKzNjo%}GpHL@N$&3u^*bRGUL_)BT*ojX47DU9>% z@n&5feq#=xPxu7p*27=>n+ZSDzFxQH&)K5-lgc)gb5&le@|`MIsk~R^R+T?c`4^Ra zpHz-FKxK={6I7m~@>MElt9+fxx2de9)v3ClRQWZPKT!EQm5;0Jy0%u{|K~KEQ%2HEPbC;#^ z(F!{j-b&3X$zR5%aNoT2)MX`wsaUs6@nrMhn^Takx-#HG6R4yplXp$C(F8}Hu++4? zqUEWXe7pmrRH@1k5=N^u^(sq6$b5{Pf6h{~GI;NST_&KJmQ#$&o5!9OQr$g-7s0$) zn1g0Pj;O5Hc&n(a)cAquZiy|+!yNK|x^;dIcZ`uzOY+@&KPRQG%5um364Y{Zt@Bqh z_9nF3lO@V&>3pCgQcf!_$immjn)Z^bF=Vj)(&+JaOvg4i1U0m@VCoAI$nT~JT$!O2HliVWrG$Gj`u6gs3wQ`lu zBYIg;i0EyuiVJe_^)p44|r zA@2V#Szgh~WrfAc*(KxLG@DB^7fwo*-!Z_ELceq9jl6twjiZD(4SQQP4! z{woLm%7OoLbD#|07C`E{>hRBr-;(3iyV;rSv^d8(txj^LI2So>&TOaMS?Y8+H#*Cl z+ni2kjkD3&kuwcJ*oU2ZQgEq9b} zEH5kHR_-jXDQ_%qDtDE)mbaC+mv@vOEAK4tDrXfw6{d=)3Uftrg{5L#g|&hzQYscz z*ebFs>=mUIjtXZ*O+{lxQ$HdZ!Ox++^M+bY{DJ1UP=c2=?~pDI&TRF%0Zxyn*CuF6_PRVh`A zs%%x+RradVDo54EsZ6ODpyr&Ra;eiRY%pas?MseDz?LChiOOD4)c!W z9hM#Ac35|qced^9*m-Pc=T27RQ)8;Z$1&J5$WA3~<0?CL9NW>kqiYAN_Ng{iM^&4v zldCP&r3k$ z^&9KU>bKQ9>uc&8>znFb^{w@7_3iZ?^~dTv>$~b%gHMC0A*#XLklbKt7}sEJpoWx& zMGdxw>;`*7X@jF-V?$ZPwgzWIO+#ZtQ-iAkkz2j6o;Ut#eQHg$QMKmUwa02ZYrAS$oll*qE~?I4 zmt1G58&_woqq>y3MRm5i>^gg0X`Q2PV_jL@wmN5BOJ6lb{&XV`?ZYsZ;&)%)O_l5swSbIHbeY{WU#ApNZk?G4O~`6!6X zS>dW^t!S%guW;^a+~wNUwyR@T=PtI}wA;MfvfH{lWw&j&eYazG*>30V#@(*nZM!>m zckX8Orh0R|rQTYfQg1^ZJCMIlFg^#0a^J-eXZVw`9n%7_ay-7(?GDTLo(E^I z&oKDdF;%J8XBvFkbw2ap)1>pU!6zBkyBD9rh1B3aP6{QQ)2%i+4&q4Tf z=#KRUd|XI=@3Fpu&oP~kgxbxbizkTJce;4Y@Y$&I83`Y!&gWwIwCQ4=4WCwB%$Qil zT6KG6^SyLoFxiT=>B2bRW6}9M2%k>fv3A2}oGzXw_|)k3Is_l43-cCyqI6-tyz3^$&g=vA0Rp-O6Uc1icWBBmD-lO9)gsc_T>l2Ec zV7lB$hKq;m4TBH$F-)-Y@ZnSZnsmp?f{#t-gQ<7Sr1QBEJ`SDFX88EPdXKdWt{Pn! zd@hSu;T~aLhL1_NR|j1BJLNn09MkRfFZgun_QK?SHdB|+gWxkx7iJ`U%5**#!^ffX z!N-S~Rp+xDK2f@|aRYov7iJ55Qgl8$;M1t{*#{pptT%s};VRXId7Jy_!W@OmrStg# zu5G%#PQs^47Y08sV%fSdgSd|_%oz9_(}kG~AD7N&4ty5r_OihzS?80>eRO-RfzL)= zm`(7Z9-pmnVJr-@r<8Fd458(uj~&DRUz3S9)VZTarKVv}3-3|YaD9xYDG~GxWvNd0 z_*H5)1`d1UEXvMZm1fULO;aP&hHMPMlyL*RDa`5#sSax?aciSgy$4pt%@lXvgj^1%w#qA!i!YGv*)ICtwvxSdZDGv9m zc}4b&VtR~@DqE1=-tk<;%RP9fN@dtlai~LrilfgFT4j?q_@%f~Fyh%W0H#Hxj2HF> zm{H^&|5EpNkNYWF9mGpboiS-%YG!^$YN~p2eC)3$3wQ?oKXuwc4#OY}MA0+$5V=6q z+`q2KK*mK{~Wy8UGRYA)Nc0DJZs843}TH-3%jr*76=ecfQB-1)m#M=b*IX$05pfriT tm8Hl;xqi7Y1E-e=j2OQ)Q9`fC#y=;c=R|p*`p2c;iZC{AikH=F{R11B&DH<_ literal 0 HcmV?d00001 diff --git a/win64/libs/libmpg123-0.lib b/win64/libs/libmpg123-0.lib new file mode 100644 index 0000000000000000000000000000000000000000..adb2935052deab32807e914658674da09724fceb GIT binary patch literal 35362 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 OBhIG(e^-ozrv4wC`5@K+ literal 0 HcmV?d00001 diff --git a/win64/libs/libmpg123.dll b/win64/libs/libmpg123.dll deleted file mode 100644 index d97e94d7b385464b24a8c45cd1c1700b0adc40ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290816 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�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