CARVIEW |
Select Language
HTTP/2 302
date: Sun, 20 Jul 2025 03:29:48 GMT
content-type: text/html; charset=utf-8
content-length: 0
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
access-control-allow-origin:
location: https://raw.githubusercontent.com/GreycLab/CImg/master/CImg.h
cache-control: no-cache
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
x-github-request-id: DB78:E3E22:C9FF54:10AB65E:687C62AB
HTTP/2 200
cache-control: max-age=300
content-security-policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
content-type: text/plain; charset=utf-8
etag: W/"2fd9fd23cf0b2e60056f72617fb56724934b152d11d8a6f6d4a8d8ad8e88e63a"
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
x-frame-options: deny
x-xss-protection: 1; mode=block
x-github-request-id: 8B58:1356F5:1CF08A:4B42DA:687C62AC
content-encoding: gzip
accept-ranges: bytes
date: Sun, 20 Jul 2025 03:29:49 GMT
via: 1.1 varnish
x-served-by: cache-bom4743-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1752982189.554411,VS0,VE822
vary: Authorization,Accept-Encoding
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
x-fastly-request-id: 79fb452ac4d7db537088b43ca3b6b9469adf8ee1
expires: Sun, 20 Jul 2025 03:34:49 GMT
source-age: 0
content-length: 536642
/*
#
# File : CImg.h
# ( C++ header file )
#
# Description : C++ Template Image Processing Toolkit.
# This file is the main component of the CImg Library project.
# ( https://cimg.eu )
#
# Project manager : David Tschumperlé
# ( https://tschumperle.users.greyc.fr/ )
#
# A complete list of contributors is available in file 'README.txt'
# distributed within the CImg package.
#
# Licenses : This file is 'dual-licensed', you have to choose one
# of the two licenses below to apply.
#
# CeCILL-C
# The CeCILL-C license is close to the GNU LGPL.
# ( https://cecill.info/licences/Licence_CeCILL-C_V1-en.html )
#
# or CeCILL v2.1
# The CeCILL license is compatible with the GNU GPL.
# ( https://cecill.info/licences/Licence_CeCILL_V2.1-en.html )
#
# This software is governed either by the CeCILL or the CeCILL-C license
# under French law and abiding by the rules of distribution of free software.
# You can use, modify and or redistribute the software under the terms of
# the CeCILL or CeCILL-C licenses as circulated by CEA, CNRS and INRIA
# at the following URL: "https://cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL and CeCILL-C licenses and that you accept its terms.
#
*/
// Set version number of the library.
#ifndef cimg_version
#define cimg_version 360
/*-----------------------------------------------------------
#
# Test and possibly auto-set CImg configuration variables
# and include required headers.
#
# If you find that the default configuration variables are
# not adapted to your system, you can override their values
# before including the header file "CImg.h"
# (use the #define directive).
#
------------------------------------------------------------*/
// Include standard C++ headers.
// This is the minimal set of required headers to make CImg-based codes compile.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define cimg_str(x) #x
#define cimg_str2(x) cimg_str(x)
// Detect/configure OS variables.
//
// Define 'cimg_OS' to: '0' for an unknown OS (will try to minize library dependencies).
// '1' for a Unix-like OS (Linux, Solaris, BSD, MacOSX, Irix, ...).
// '2' for Microsoft Windows.
// (auto-detection is performed if 'cimg_OS' is not set by the user).
#ifndef cimg_OS
#if defined(unix) || defined(__unix) || defined(__unix__) \
|| defined(linux) || defined(__linux) || defined(__linux__) \
|| defined(sun) || defined(__sun) \
|| defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) \
|| defined(__FreeBSD__) || defined (__DragonFly__) \
|| defined(sgi) || defined(__sgi) \
|| defined(__OSX__) || defined(__MACOSX__) || defined(__APPLE__) \
|| defined(__CYGWIN__)
#define cimg_OS 1
#elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \
|| defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
#define cimg_OS 2
#else
#define cimg_OS 0
#endif
#elif !(cimg_OS==0 || cimg_OS==1 || cimg_OS==2)
#error CImg Library: Invalid configuration variable 'cimg_OS'.
#error (correct values are '0 = unknown OS', '1 = Unix-like OS', '2 = Microsoft Windows').
#endif
#ifndef cimg_date
#define cimg_date __DATE__
#endif
#ifndef cimg_time
#define cimg_time __TIME__
#endif
// Disable silly warnings on some Microsoft VC++ compilers.
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4127)
#pragma warning(disable:4244)
#pragma warning(disable:4307)
#pragma warning(disable:4311)
#pragma warning(disable:4312)
#pragma warning(disable:4319)
#pragma warning(disable:4512)
#pragma warning(disable:4571)
#pragma warning(disable:4640)
#pragma warning(disable:4702)
#pragma warning(disable:4706)
#pragma warning(disable:4710)
#pragma warning(disable:4800)
#pragma warning(disable:4804)
#pragma warning(disable:4820)
#pragma warning(disable:4995)
#pragma warning(disable:4996)
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#ifndef _CRT_NONSTDC_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
#endif
// Define correct string functions for each compiler and OS.
#if cimg_OS==2 && defined(_MSC_VER)
#define cimg_sscanf std::sscanf
#define cimg_snprintf cimg::_snprintf
#define cimg_vsnprintf cimg::_vsnprintf
#else
#include
#if defined(__MACOSX__) || defined(__APPLE__)
#define cimg_sscanf cimg::_sscanf
#define cimg_snprintf cimg::_snprintf
#define cimg_vsnprintf cimg::_vsnprintf
#else
#define cimg_sscanf std::sscanf
#define cimg_snprintf snprintf
#define cimg_vsnprintf vsnprintf
#endif
#endif
// Include OS-specific headers.
#if cimg_OS==1
#include
#include
#include
#include
#include
#include
#include
#elif cimg_OS==2
#ifndef NOMINMAX
#define NOMINMAX
#endif
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include
#ifndef _WIN32_IE
#define _WIN32_IE 0x0400
#endif
#include
#include
#include
enum {FALSE_WIN = 0};
#endif
// Look for C++11 features.
#ifndef cimg_use_cpp11
#if __cplusplus>201100
#define cimg_use_cpp11 1
#else
#define cimg_use_cpp11 0
#endif
#endif
#if cimg_use_cpp11==1
#include
#include
#endif
// Convenient macro to define pragma.
#ifdef _MSC_VER
#define cimg_pragma(x) __pragma(x)
#else
#define cimg_pragma(x) _Pragma(#x)
#endif
// Define own datatypes to ensure portability.
// ( 'sizeof(cimg_ulong/cimg_long) = sizeof(void*)' ).
#define cimg_uint8 unsigned char
#if defined(CHAR_MAX) && CHAR_MAX==255
#define cimg_int8 signed char
#else
#define cimg_int8 char
#endif
#define cimg_uint16 unsigned short
#define cimg_int16 short
#define cimg_uint32 unsigned int
#define cimg_int32 int
#define cimg_float32 float
#define cimg_float64 double
#if cimg_OS==2
#define cimg_uint64 unsigned __int64
#define cimg_int64 __int64
#define cimg_ulong UINT_PTR
#define cimg_long INT_PTR
#ifdef _MSC_VER
#define cimg_fuint64 "%I64u"
#define cimg_fint64 "%I64d"
#else
#define cimg_fuint64 "%llu"
#define cimg_fint64 "%lld"
#endif
#define cimg_fhex64 "%llx"
#else
#if UINTPTR_MAX==0xffffffff || defined(__arm__) || defined(_M_ARM) || ((ULONG_MAX)==(UINT_MAX))
#define cimg_uint64 unsigned long long
#define cimg_int64 long long
#define cimg_fuint64 "%llu"
#define cimg_fint64 "%lld"
#define cimg_fhex64 "%llx"
#else
#define cimg_uint64 unsigned long
#define cimg_int64 long
#define cimg_fuint64 "%lu"
#define cimg_fint64 "%ld"
#define cimg_fhex64 "%lx"
#endif
#if defined(__arm__) || defined(_M_ARM)
#define cimg_ulong unsigned long long
#define cimg_long long long
#else
#define cimg_ulong unsigned long
#define cimg_long long
#endif
#endif
#ifndef cimg_max_buf_size
#if UINTPTR_MAX==0xffffffff
#define cimg_max_buf_size ((cimg_ulong)3*1024*1024*1024)
#else
#define cimg_max_buf_size ((cimg_ulong)16*1024*1024*1024)
#endif
#endif
// Configure filename separator.
//
// Filename separator is set by default to '/', except for Windows where it is '\'.
#ifndef cimg_file_separator
#if cimg_OS==2
#define cimg_file_separator '\\'
#else
#define cimg_file_separator '/'
#endif
#endif
// Configure verbosity of output messages.
//
// Define 'cimg_verbosity' to: '0' to hide library messages (quiet mode).
// '1' to output library messages on the console.
// '2' to output library messages on a basic dialog window (default behavior).
// '3' to do as '1' + add extra warnings (may slow down the code!).
// '4' to do as '2' + add extra warnings (may slow down the code!).
//
// Define 'cimg_strict_warnings' to replace warning messages by exception throwns.
//
// Define 'cimg_use_vt100' to allow output of color messages on VT100-compatible terminals.
#ifndef cimg_verbosity
#if cimg_OS==2
#define cimg_verbosity 2
#else
#define cimg_verbosity 1
#endif
#elif !(cimg_verbosity==0 || cimg_verbosity==1 || cimg_verbosity==2 || cimg_verbosity==3 || cimg_verbosity==4)
#error CImg Library: Configuration variable 'cimg_verbosity' is badly defined.
#error (should be { 0=quiet | 1=console | 2=dialog | 3=console+warnings | 4=dialog+warnings }).
#endif
// Configure OpenMP support.
// (https://www.openmp.org)
//
// Define 'cimg_use_openmp' to enable OpenMP support (requires OpenMP 3.0+).
//
// OpenMP directives are used in many CImg functions to get
// advantages of multi-core CPUs.
#if !defined(cimg_use_openmp)
#ifdef _OPENMP
#define cimg_use_openmp 1
#else
#define cimg_use_openmp 0
#endif
#else
#undef cimg_use_openmp
#define cimg_use_openmp 1
#endif
#if cimg_use_openmp!=0
#include
#define cimg_pragma_openmp(p) cimg_pragma(omp p)
#else
#define cimg_pragma_openmp(p)
#endif
// Configure the 'abort' signal handler (does nothing by default).
// A typical signal handler can be defined in your own source like this:
// #define cimg_abort_test if (is_abort) throw CImgAbortException("carview.php?tsp=")
//
// where 'is_abort' is a boolean variable defined somewhere in your code and reachable in the method.
// 'cimg_abort_test2' does the same but is called more often (in inner loops).
#if defined(cimg_abort_test) && cimg_use_openmp!=0
// Define abort macros to be used with OpenMP.
#ifndef _cimg_abort_init_openmp
#define _cimg_abort_init_openmp unsigned int _cimg_abort_go_openmp = 1; cimg::unused(_cimg_abort_go_openmp)
#endif
#ifndef _cimg_abort_try_openmp
#define _cimg_abort_try_openmp if (_cimg_abort_go_openmp) try
#endif
#ifndef _cimg_abort_catch_openmp
#define _cimg_abort_catch_openmp catch (CImgAbortException&) { \
cimg_pragma_openmp(atomic) _cimg_abort_go_openmp&=0; \
}
#endif
#ifndef _cimg_abort_catch_fill_openmp
#define _cimg_abort_catch_fill_openmp \
catch (CImgException& e) { cimg_pragma(omp critical(abort)) CImg::string(e._message).move_to(is_error_expr); \
cimg_pragma_openmp(atomic) _cimg_abort_go_openmp&=0; }
#endif
#ifdef cimg_abort_test2
#ifndef _cimg_abort_try_openmp2
#define _cimg_abort_try_openmp2 _cimg_abort_try_openmp
#endif
#ifndef _cimg_abort_catch_openmp2
#define _cimg_abort_catch_openmp2 _cimg_abort_catch_openmp
#endif
#endif
#endif
#ifndef _cimg_abort_init_openmp
#define _cimg_abort_init_openmp
#endif
#ifndef _cimg_abort_try_openmp
#define _cimg_abort_try_openmp
#endif
#ifndef _cimg_abort_catch_openmp
#define _cimg_abort_catch_openmp
#endif
#ifndef _cimg_abort_try_openmp2
#define _cimg_abort_try_openmp2
#endif
#ifndef _cimg_abort_catch_openmp2
#define _cimg_abort_catch_openmp2
#endif
#ifndef _cimg_abort_catch_fill_openmp
#define _cimg_abort_catch_fill_openmp
#endif
#ifndef cimg_abort_init
#define cimg_abort_init
#endif
#ifndef cimg_abort_test
#define cimg_abort_test
#endif
#ifndef cimg_abort_test2
#define cimg_abort_test2
#endif
// Configure display framework.
//
// Define 'cimg_display' to: '0' to disable display capabilities.
// '1' to use the X-Window framework (X11).
// '2' to use the Microsoft GDI32 framework.
// '3' to use SDL3 framework.
#ifndef cimg_display
#if cimg_OS==0
#define cimg_display 0
#elif cimg_OS==1
#define cimg_display 1
#elif cimg_OS==2
#define cimg_display 2
#endif
#elif !(cimg_display==0 || cimg_display==1 || cimg_display==2 || cimg_display==3)
#error CImg Library: Configuration variable 'cimg_display' is badly defined.
#error (should be { 0=none | 1=X-Window (X11) | 2=Microsoft GDI32 | 3=SDL3 }).
#endif
// Include display-specific headers.
#if cimg_display==1
#include
#include
#include
#include
#ifdef cimg_use_xshm
#include
#include
#include
#endif
#ifdef cimg_use_xrandr
#include
#endif
#elif cimg_display==3
#include
#if cimg_OS==1
#include
#endif
#endif
#ifndef cimg_appname
#define cimg_appname "CImg"
#endif
// Configure OpenCV support.
// (https://opencv.willowgarage.com/wiki/)
//
// Define 'cimg_use_opencv' to enable OpenCV support.
//
// OpenCV library may be used to access images from cameras.
// (see method 'CImg::load_camera()').
#ifdef cimg_use_opencv
#ifdef True
#undef True
#define _cimg_redefine_True
#endif
#ifdef False
#undef False
#define _cimg_redefine_False
#endif
#ifdef Status
#undef Status
#define _cimg_redefine_Status
#endif
#include
#include
#if CV_MAJOR_VERSION>=3
#define _cimg_fourcc cv::VideoWriter::fourcc
#define _cimg_cap_prop_frame_width cv::VideoCaptureProperties::CAP_PROP_FRAME_WIDTH
#define _cimg_cap_prop_frame_height cv::VideoCaptureProperties::CAP_PROP_FRAME_HEIGHT
#define _cimg_cap_prop_frame_count cv::VideoCaptureProperties::CAP_PROP_FRAME_COUNT
#else
#define _cimg_fourcc CV_FOURCC
#define _cimg_cap_prop_frame_width CV_CAP_PROP_FRAME_WIDTH
#define _cimg_cap_prop_frame_height CV_CAP_PROP_FRAME_HEIGHT
#define _cimg_cap_prop_frame_count CV_CAP_PROP_FRAME_COUNT
#endif
#endif
// Configure LibPNG support.
// (https://www.libpng.org)
//
// Define 'cimg_use_png' to enable LibPNG support.
//
// PNG library may be used to get a native support of '.png' files.
// (see methods 'CImg::{load,save}_png()'.
#ifdef cimg_use_png
extern "C" {
#include "png.h"
}
#endif
// Configure LibJPEG support.
// (https://en.wikipedia.org/wiki/Libjpeg)
//
// Define 'cimg_use_jpeg' to enable LibJPEG support.
//
// JPEG library may be used to get a native support of '.jpg' files.
// (see methods 'CImg::{load,save}_jpeg()').
#ifdef cimg_use_jpeg
extern "C" {
#include "jpeglib.h"
#include "setjmp.h"
}
#endif
// Configure JPEG XL support.
// (https://en.wikipedia.org/wiki/JPEG_XL)
//
// Define 'cimg_use_jxl' to enable JPEG XL support.
//
// Libjxl may be used to get a native support of '.jxl' files.
// (see methods 'CImg::{load,save}_jxl()').
#ifdef cimg_use_jxl
#include
#include
#endif
// Configure LibTIFF support.
// (https://www.libtiff.org)
//
// Define 'cimg_use_tiff' to enable LibTIFF support.
//
// TIFF library may be used to get a native support of '.tif' files.
// (see methods 'CImg[List]::{load,save}_tiff()').
#ifdef cimg_use_tiff
extern "C" {
#define uint64 uint64_hack_
#define int64 int64_hack_
#include "tiffio.h"
#undef uint64
#undef int64
}
#endif
// Configure HEIF support.
// (https://github.com/strukturag/libheif)
//
// Define 'cimg_use_heif' to enable HEIF support.
//
// HEIF library may be used to get a native support of '.heic' and '.avif' files.
// (see method 'CImg::load_heif()').
#ifdef cimg_use_heif
#include
#endif
// Configure WebP support.
// (https://chromium.googlesource.com/webm/libwebp/)
//
// Define 'cimg_use_webp' to enable WebP support.
//
// WebP library may be used to get a native support of '.webp' files.
// (see method 'CImg::{load,save}_webp()').
#ifdef cimg_use_webp
#include
#include
#endif
// Configure LibMINC2 support.
// (https://en.wikibooks.org/wiki/MINC/Reference/MINC2.0_File_Format_Reference)
//
// Define 'cimg_use_minc2' to enable LibMINC2 support.
//
// MINC2 library may be used to get a native support of '.mnc' files.
// (see methods 'CImg::{load,save}_minc2()').
#ifdef cimg_use_minc2
#include "minc_io_simple_volume.h"
#include "minc_1_simple.h"
#include "minc_1_simple_rw.h"
#endif
// Configure Zlib support.
// (https://www.zlib.net)
//
// Define 'cimg_use_zlib' to enable Zlib support.
//
// Zlib library may be used to allow compressed data in '.cimgz' files.
// (see methods 'CImg[List]::{load,save}_cimg()').
#ifdef cimg_use_zlib
extern "C" {
#include "zlib.h"
}
#endif
// Configure libcurl support.
// (https://curl.haxx.se/libcurl/)
//
// Define 'cimg_use_curl' to enable libcurl support.
//
// Libcurl may be used to get a native support of file downloading from the network.
// (see method 'cimg::load_network()'.)
#ifdef cimg_use_curl
#include "curl/curl.h"
#endif
// Configure Magick++ support.
// (https://www.imagemagick.org/Magick++)
//
// Define 'cimg_use_magick' to enable Magick++ support.
//
// Magick++ library may be used to get a native support of various image file formats.
// (see methods 'CImg::{load,save}()').
#ifdef cimg_use_magick
#include "Magick++.h"
#endif
// Configure FFTW3 support.
// (https://www.fftw.org)
//
// Define 'cimg_use_fftw3' to enable libFFTW3 support.
//
// FFTW3 library may be used to efficiently compute the Fast Fourier Transform.
// of image data, without restriction on the image size.
// (see method 'CImg[List]::FFT()').
#ifdef cimg_use_fftw3
extern "C" {
#include "fftw3.h"
}
#endif
// Configure OpenEXR support.
// (https://www.openexr.com/)
//
// Define 'cimg_use_openexr' to enable OpenEXR support.
//
// OpenEXR library may be used to get a native support of '.exr' files.
// (see methods 'CImg::{load,save}_exr()').
#ifdef cimg_use_openexr
#if __GNUC__>=5
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated"
#pragma GCC diagnostic ignored "-Wdeprecated-copy"
#pragma GCC diagnostic ignored "-Wshadow"
#endif
#include "ImfRgbaFile.h"
#include "ImfInputFile.h"
#include "ImfChannelList.h"
#include "ImfMatrixAttribute.h"
#include "ImfArray.h"
#if __GNUC__>=5
#pragma GCC diagnostic pop
#endif
#endif
// Configure TinyEXR support.
// (https://github.com/syoyo/tinyexr)
//
// Define 'cimg_use_tinyexr' to enable TinyEXR support.
//
// TinyEXR is a small, single header-only library to load and save OpenEXR(.exr) images.
#ifdef cimg_use_tinyexr
#ifndef TINYEXR_IMPLEMENTATION
#define TINYEXR_IMPLEMENTATION
#endif
#include "tinyexr.h"
#endif
// Lapack configuration.
// (https://www.netlib.org/lapack)
//
// Define 'cimg_use_lapack' to enable LAPACK support.
//
// Lapack library may be used in several CImg methods to speed up
// matrix computations (eigenvalues, inverse, ...).
#ifdef cimg_use_lapack
extern "C" {
extern void sgetrf_(int*, int*, float*, int*, int*, int*);
extern void sgetri_(int*, float*, int*, int*, float*, int*, int*);
extern void sgetrs_(char*, int*, int*, float*, int*, int*, float*, int*, int*);
extern void sgesvd_(char*, char*, int*, int*, float*, int*, float*, float*, int*, float*, int*, float*, int*, int*);
extern void ssyev_(char*, char*, int*, float*, int*, float*, float*, int*, int*);
extern void dgetrf_(int*, int*, double*, int*, int*, int*);
extern void dgetri_(int*, double*, int*, int*, double*, int*, int*);
extern void dgetrs_(char*, int*, int*, double*, int*, int*, double*, int*, int*);
extern void dgesvd_(char*, char*, int*, int*, double*, int*, double*, double*,
int*, double*, int*, double*, int*, int*);
extern void dsyev_(char*, char*, int*, double*, int*, double*, double*, int*, int*);
extern void dgels_(char*, int*,int*,int*,double*,int*,double*,int*,double*,int*,int*);
extern void sgels_(char*, int*,int*,int*,float*,int*,float*,int*,float*,int*,int*);
}
#endif
// Check if min/max/PI macros are defined.
//
// CImg does not compile if macros 'min', 'max' or 'PI' are defined,
// because it redefines functions min(), max() and const variable PI in the cimg:: namespace.
// so it '#undef' these macros if necessary, and restore them to reasonable
// values at the end of this file.
#ifdef min
#undef min
#define _cimg_redefine_min
#endif
#ifdef max
#undef max
#define _cimg_redefine_max
#endif
#ifdef PI
#undef PI
#define _cimg_redefine_PI
#endif
/*------------------------------------------------------------------------------
#
# Define user-friendly macros.
#
# These CImg macros are prefixed by 'cimg_' and can be used safely in your own
# code. They are useful to parse command line options, or to write image loops.
#
------------------------------------------------------------------------------*/
// Macros to define program usage, and retrieve command line arguments.
#define cimg_usage(usage) cimg_library::cimg::option((char*)0,argc,argv,(char*)0,usage,false)
#define cimg_help(str) cimg_library::cimg::option((char*)0,argc,argv,str,(char*)0)
#define cimg_option(name,_default,usage) cimg_library::cimg::option(name,argc,argv,_default,usage)
// Macros to define and manipulate local neighborhoods.
#define CImg_2x2(I,T) T I[4]; \
T& I##cc = I[0]; T& I##nc = I[1]; \
T& I##cn = I[2]; T& I##nn = I[3]; \
I##cc = I##nc = \
I##cn = I##nn = 0
#define CImg_3x3(I,T) T I[9]; \
T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; \
T& I##pc = I[3]; T& I##cc = I[4]; T& I##nc = I[5]; \
T& I##pn = I[6]; T& I##cn = I[7]; T& I##nn = I[8]; \
I##pp = I##cp = I##np = \
I##pc = I##cc = I##nc = \
I##pn = I##cn = I##nn = 0
#define CImg_4x4(I,T) T I[16]; \
T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; T& I##ap = I[3]; \
T& I##pc = I[4]; T& I##cc = I[5]; T& I##nc = I[6]; T& I##ac = I[7]; \
T& I##pn = I[8]; T& I##cn = I[9]; T& I##nn = I[10]; T& I##an = I[11]; \
T& I##pa = I[12]; T& I##ca = I[13]; T& I##na = I[14]; T& I##aa = I[15]; \
I##pp = I##cp = I##np = I##ap = \
I##pc = I##cc = I##nc = I##ac = \
I##pn = I##cn = I##nn = I##an = \
I##pa = I##ca = I##na = I##aa = 0
#define CImg_5x5(I,T) T I[25]; \
T& I##bb = I[0]; T& I##pb = I[1]; T& I##cb = I[2]; T& I##nb = I[3]; T& I##ab = I[4]; \
T& I##bp = I[5]; T& I##pp = I[6]; T& I##cp = I[7]; T& I##np = I[8]; T& I##ap = I[9]; \
T& I##bc = I[10]; T& I##pc = I[11]; T& I##cc = I[12]; T& I##nc = I[13]; T& I##ac = I[14]; \
T& I##bn = I[15]; T& I##pn = I[16]; T& I##cn = I[17]; T& I##nn = I[18]; T& I##an = I[19]; \
T& I##ba = I[20]; T& I##pa = I[21]; T& I##ca = I[22]; T& I##na = I[23]; T& I##aa = I[24]; \
I##bb = I##pb = I##cb = I##nb = I##ab = \
I##bp = I##pp = I##cp = I##np = I##ap = \
I##bc = I##pc = I##cc = I##nc = I##ac = \
I##bn = I##pn = I##cn = I##nn = I##an = \
I##ba = I##pa = I##ca = I##na = I##aa = 0
#define CImg_2x2x2(I,T) T I[8]; \
T& I##ccc = I[0]; T& I##ncc = I[1]; \
T& I##cnc = I[2]; T& I##nnc = I[3]; \
T& I##ccn = I[4]; T& I##ncn = I[5]; \
T& I##cnn = I[6]; T& I##nnn = I[7]; \
I##ccc = I##ncc = \
I##cnc = I##nnc = \
I##ccn = I##ncn = \
I##cnn = I##nnn = 0
#define CImg_3x3x3(I,T) T I[27]; \
T& I##ppp = I[0]; T& I##cpp = I[1]; T& I##npp = I[2]; \
T& I##pcp = I[3]; T& I##ccp = I[4]; T& I##ncp = I[5]; \
T& I##pnp = I[6]; T& I##cnp = I[7]; T& I##nnp = I[8]; \
T& I##ppc = I[9]; T& I##cpc = I[10]; T& I##npc = I[11]; \
T& I##pcc = I[12]; T& I##ccc = I[13]; T& I##ncc = I[14]; \
T& I##pnc = I[15]; T& I##cnc = I[16]; T& I##nnc = I[17]; \
T& I##ppn = I[18]; T& I##cpn = I[19]; T& I##npn = I[20]; \
T& I##pcn = I[21]; T& I##ccn = I[22]; T& I##ncn = I[23]; \
T& I##pnn = I[24]; T& I##cnn = I[25]; T& I##nnn = I[26]; \
I##ppp = I##cpp = I##npp = \
I##pcp = I##ccp = I##ncp = \
I##pnp = I##cnp = I##nnp = \
I##ppc = I##cpc = I##npc = \
I##pcc = I##ccc = I##ncc = \
I##pnc = I##cnc = I##nnc = \
I##ppn = I##cpn = I##npn = \
I##pcn = I##ccn = I##ncn = \
I##pnn = I##cnn = I##nnn = 0
#define cimg_def2x2(img,x,y) \
int _n1##x = x<(img).width() - 1?x + 1:(img).width() - 1, \
_n1##y = y<(img).height() - 1?y + 1:(img).height() - 1
#define cimg_def3x3(img,x,y) \
cimg_def2x2(img,x,y); \
int _p1##x = x>1?x - 1:0, \
_p1##y = y>1?y - 1:0
#define cimg_def4x4(img,x,y) \
cimg_def3x3(img,x,y); \
int _n2##x = x<(img).width() - 2?x + 2:(img).width() - 1, \
_n2##y = y<(img).height() - 2?y + 2:(img).height() - 1
#define cimg_def5x5(img,x,y) \
cimg_def4x4(img,x,y); \
int _p2##x = x>2?x - 2:0, \
_p2##y = y>2?y - 2:0
#define cimg_def6x6(img,x,y) \
cimg_def5x5(img,x,y); \
int _n3##x = x<(img).width() - 3?x + 3:(img).width() - 1, \
_n3##y = y<(img).height() - 3?y + 3:(img).height() - 1
#define cimg_def7x7(img,x,y) \
cimg_def6x6(img,x,y); \
int _p3##x = x>3?x - 3:0, \
_p3##y = y>3?y - 3:0
#define cimg_def8x8(img,x,y) \
cimg_def7x7(img,x,y); \
int _n4##x = x<(img).width() - 4?x + 4:(img).width() - 1, \
_n4##y = y<(img).height() - 4?y + 4:(img).height() - 1
#define cimg_def9x9(img,x,y) \
cimg_def8x8(img,x,y); \
int _p4##x = x>4?x - 4:0, \
_p4##y = y>4?y - 4:0
#define cimg_def2x2x2(img,x,y,z) \
cimg_def2x2(img,x,y); \
int _n1##z = z<(img).depth() - 1?z + 1:(img).depth() - 1
#define cimg_def3x3x3(img,x,y,z) \
cimg_def2x2x2(img,x,y,z); \
int _p1##x = x>1?x - 1:0, \
_p1##y = y>1?y - 1:0, \
_p1##z = z>1?z - 1:0
#define cimg_get2x2(img,x,y,z,c,I,T) \
I[0] = (T)(img)(x,y,z,c), I[1] = (T)(img)(_n1##x,y,z,c), I[2] = (T)(img)(x,_n1##y,z,c), \
I[3] = (T)(img)(_n1##x,_n1##y,z,c)
#define cimg_get3x3(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p1##x,_p1##y,z,c), I[1] = (T)(img)(x,_p1##y,z,c), I[2] = (T)(img)(_n1##x,_p1##y,z,c), \
I[3] = (T)(img)(_p1##x,y,z,c), I[4] = (T)(img)(x,y,z,c), I[5] = (T)(img)(_n1##x,y,z,c), \
I[6] = (T)(img)(_p1##x,_n1##y,z,c), I[7] = (T)(img)(x,_n1##y,z,c), I[8] = (T)(img)(_n1##x,_n1##y,z,c)
#define cimg_get4x4(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p1##x,_p1##y,z,c), I[1] = (T)(img)(x,_p1##y,z,c), I[2] = (T)(img)(_n1##x,_p1##y,z,c), \
I[3] = (T)(img)(_n2##x,_p1##y,z,c), I[4] = (T)(img)(_p1##x,y,z,c), I[5] = (T)(img)(x,y,z,c), \
I[6] = (T)(img)(_n1##x,y,z,c), I[7] = (T)(img)(_n2##x,y,z,c), I[8] = (T)(img)(_p1##x,_n1##y,z,c), \
I[9] = (T)(img)(x,_n1##y,z,c), I[10] = (T)(img)(_n1##x,_n1##y,z,c), I[11] = (T)(img)(_n2##x,_n1##y,z,c), \
I[12] = (T)(img)(_p1##x,_n2##y,z,c), I[13] = (T)(img)(x,_n2##y,z,c), I[14] = (T)(img)(_n1##x,_n2##y,z,c), \
I[15] = (T)(img)(_n2##x,_n2##y,z,c)
#define cimg_get5x5(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p2##x,_p2##y,z,c), I[1] = (T)(img)(_p1##x,_p2##y,z,c), I[2] = (T)(img)(x,_p2##y,z,c), \
I[3] = (T)(img)(_n1##x,_p2##y,z,c), I[4] = (T)(img)(_n2##x,_p2##y,z,c), I[5] = (T)(img)(_p2##x,_p1##y,z,c), \
I[6] = (T)(img)(_p1##x,_p1##y,z,c), I[7] = (T)(img)(x,_p1##y,z,c), I[8] = (T)(img)(_n1##x,_p1##y,z,c), \
I[9] = (T)(img)(_n2##x,_p1##y,z,c), I[10] = (T)(img)(_p2##x,y,z,c), I[11] = (T)(img)(_p1##x,y,z,c), \
I[12] = (T)(img)(x,y,z,c), I[13] = (T)(img)(_n1##x,y,z,c), I[14] = (T)(img)(_n2##x,y,z,c), \
I[15] = (T)(img)(_p2##x,_n1##y,z,c), I[16] = (T)(img)(_p1##x,_n1##y,z,c), I[17] = (T)(img)(x,_n1##y,z,c), \
I[18] = (T)(img)(_n1##x,_n1##y,z,c), I[19] = (T)(img)(_n2##x,_n1##y,z,c), I[20] = (T)(img)(_p2##x,_n2##y,z,c), \
I[21] = (T)(img)(_p1##x,_n2##y,z,c), I[22] = (T)(img)(x,_n2##y,z,c), I[23] = (T)(img)(_n1##x,_n2##y,z,c), \
I[24] = (T)(img)(_n2##x,_n2##y,z,c)
#define cimg_get6x6(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p2##x,_p2##y,z,c), I[1] = (T)(img)(_p1##x,_p2##y,z,c), I[2] = (T)(img)(x,_p2##y,z,c), \
I[3] = (T)(img)(_n1##x,_p2##y,z,c), I[4] = (T)(img)(_n2##x,_p2##y,z,c), I[5] = (T)(img)(_n3##x,_p2##y,z,c), \
I[6] = (T)(img)(_p2##x,_p1##y,z,c), I[7] = (T)(img)(_p1##x,_p1##y,z,c), I[8] = (T)(img)(x,_p1##y,z,c), \
I[9] = (T)(img)(_n1##x,_p1##y,z,c), I[10] = (T)(img)(_n2##x,_p1##y,z,c), I[11] = (T)(img)(_n3##x,_p1##y,z,c), \
I[12] = (T)(img)(_p2##x,y,z,c), I[13] = (T)(img)(_p1##x,y,z,c), I[14] = (T)(img)(x,y,z,c), \
I[15] = (T)(img)(_n1##x,y,z,c), I[16] = (T)(img)(_n2##x,y,z,c), I[17] = (T)(img)(_n3##x,y,z,c), \
I[18] = (T)(img)(_p2##x,_n1##y,z,c), I[19] = (T)(img)(_p1##x,_n1##y,z,c), I[20] = (T)(img)(x,_n1##y,z,c), \
I[21] = (T)(img)(_n1##x,_n1##y,z,c), I[22] = (T)(img)(_n2##x,_n1##y,z,c), I[23] = (T)(img)(_n3##x,_n1##y,z,c), \
I[24] = (T)(img)(_p2##x,_n2##y,z,c), I[25] = (T)(img)(_p1##x,_n2##y,z,c), I[26] = (T)(img)(x,_n2##y,z,c), \
I[27] = (T)(img)(_n1##x,_n2##y,z,c), I[28] = (T)(img)(_n2##x,_n2##y,z,c), I[29] = (T)(img)(_n3##x,_n2##y,z,c), \
I[30] = (T)(img)(_p2##x,_n3##y,z,c), I[31] = (T)(img)(_p1##x,_n3##y,z,c), I[32] = (T)(img)(x,_n3##y,z,c), \
I[33] = (T)(img)(_n1##x,_n3##y,z,c), I[34] = (T)(img)(_n2##x,_n3##y,z,c), I[35] = (T)(img)(_n3##x,_n3##y,z,c)
#define cimg_get7x7(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p3##x,_p3##y,z,c), I[1] = (T)(img)(_p2##x,_p3##y,z,c), I[2] = (T)(img)(_p1##x,_p3##y,z,c), \
I[3] = (T)(img)(x,_p3##y,z,c), I[4] = (T)(img)(_n1##x,_p3##y,z,c), I[5] = (T)(img)(_n2##x,_p3##y,z,c), \
I[6] = (T)(img)(_n3##x,_p3##y,z,c), I[7] = (T)(img)(_p3##x,_p2##y,z,c), I[8] = (T)(img)(_p2##x,_p2##y,z,c), \
I[9] = (T)(img)(_p1##x,_p2##y,z,c), I[10] = (T)(img)(x,_p2##y,z,c), I[11] = (T)(img)(_n1##x,_p2##y,z,c), \
I[12] = (T)(img)(_n2##x,_p2##y,z,c), I[13] = (T)(img)(_n3##x,_p2##y,z,c), I[14] = (T)(img)(_p3##x,_p1##y,z,c), \
I[15] = (T)(img)(_p2##x,_p1##y,z,c), I[16] = (T)(img)(_p1##x,_p1##y,z,c), I[17] = (T)(img)(x,_p1##y,z,c), \
I[18] = (T)(img)(_n1##x,_p1##y,z,c), I[19] = (T)(img)(_n2##x,_p1##y,z,c), I[20] = (T)(img)(_n3##x,_p1##y,z,c), \
I[21] = (T)(img)(_p3##x,y,z,c), I[22] = (T)(img)(_p2##x,y,z,c), I[23] = (T)(img)(_p1##x,y,z,c), \
I[24] = (T)(img)(x,y,z,c), I[25] = (T)(img)(_n1##x,y,z,c), I[26] = (T)(img)(_n2##x,y,z,c), \
I[27] = (T)(img)(_n3##x,y,z,c), I[28] = (T)(img)(_p3##x,_n1##y,z,c), I[29] = (T)(img)(_p2##x,_n1##y,z,c), \
I[30] = (T)(img)(_p1##x,_n1##y,z,c), I[31] = (T)(img)(x,_n1##y,z,c), I[32] = (T)(img)(_n1##x,_n1##y,z,c), \
I[33] = (T)(img)(_n2##x,_n1##y,z,c), I[34] = (T)(img)(_n3##x,_n1##y,z,c), I[35] = (T)(img)(_p3##x,_n2##y,z,c), \
I[36] = (T)(img)(_p2##x,_n2##y,z,c), I[37] = (T)(img)(_p1##x,_n2##y,z,c), I[38] = (T)(img)(x,_n2##y,z,c), \
I[39] = (T)(img)(_n1##x,_n2##y,z,c), I[40] = (T)(img)(_n2##x,_n2##y,z,c), I[41] = (T)(img)(_n3##x,_n2##y,z,c), \
I[42] = (T)(img)(_p3##x,_n3##y,z,c), I[43] = (T)(img)(_p2##x,_n3##y,z,c), I[44] = (T)(img)(_p1##x,_n3##y,z,c), \
I[45] = (T)(img)(x,_n3##y,z,c), I[46] = (T)(img)(_n1##x,_n3##y,z,c), I[47] = (T)(img)(_n2##x,_n3##y,z,c), \
I[48] = (T)(img)(_n3##x,_n3##y,z,c)
#define cimg_get8x8(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p3##x,_p3##y,z,c), I[1] = (T)(img)(_p2##x,_p3##y,z,c), I[2] = (T)(img)(_p1##x,_p3##y,z,c), \
I[3] = (T)(img)(x,_p3##y,z,c), I[4] = (T)(img)(_n1##x,_p3##y,z,c), I[5] = (T)(img)(_n2##x,_p3##y,z,c), \
I[6] = (T)(img)(_n3##x,_p3##y,z,c), I[7] = (T)(img)(_n4##x,_p3##y,z,c), I[8] = (T)(img)(_p3##x,_p2##y,z,c), \
I[9] = (T)(img)(_p2##x,_p2##y,z,c), I[10] = (T)(img)(_p1##x,_p2##y,z,c), I[11] = (T)(img)(x,_p2##y,z,c), \
I[12] = (T)(img)(_n1##x,_p2##y,z,c), I[13] = (T)(img)(_n2##x,_p2##y,z,c), I[14] = (T)(img)(_n3##x,_p2##y,z,c), \
I[15] = (T)(img)(_n4##x,_p2##y,z,c), I[16] = (T)(img)(_p3##x,_p1##y,z,c), I[17] = (T)(img)(_p2##x,_p1##y,z,c), \
I[18] = (T)(img)(_p1##x,_p1##y,z,c), I[19] = (T)(img)(x,_p1##y,z,c), I[20] = (T)(img)(_n1##x,_p1##y,z,c), \
I[21] = (T)(img)(_n2##x,_p1##y,z,c), I[22] = (T)(img)(_n3##x,_p1##y,z,c), I[23] = (T)(img)(_n4##x,_p1##y,z,c), \
I[24] = (T)(img)(_p3##x,y,z,c), I[25] = (T)(img)(_p2##x,y,z,c), I[26] = (T)(img)(_p1##x,y,z,c), \
I[27] = (T)(img)(x,y,z,c), I[28] = (T)(img)(_n1##x,y,z,c), I[29] = (T)(img)(_n2##x,y,z,c), \
I[30] = (T)(img)(_n3##x,y,z,c), I[31] = (T)(img)(_n4##x,y,z,c), I[32] = (T)(img)(_p3##x,_n1##y,z,c), \
I[33] = (T)(img)(_p2##x,_n1##y,z,c), I[34] = (T)(img)(_p1##x,_n1##y,z,c), I[35] = (T)(img)(x,_n1##y,z,c), \
I[36] = (T)(img)(_n1##x,_n1##y,z,c), I[37] = (T)(img)(_n2##x,_n1##y,z,c), I[38] = (T)(img)(_n3##x,_n1##y,z,c), \
I[39] = (T)(img)(_n4##x,_n1##y,z,c), I[40] = (T)(img)(_p3##x,_n2##y,z,c), I[41] = (T)(img)(_p2##x,_n2##y,z,c), \
I[42] = (T)(img)(_p1##x,_n2##y,z,c), I[43] = (T)(img)(x,_n2##y,z,c), I[44] = (T)(img)(_n1##x,_n2##y,z,c), \
I[45] = (T)(img)(_n2##x,_n2##y,z,c), I[46] = (T)(img)(_n3##x,_n2##y,z,c), I[47] = (T)(img)(_n4##x,_n2##y,z,c), \
I[48] = (T)(img)(_p3##x,_n3##y,z,c), I[49] = (T)(img)(_p2##x,_n3##y,z,c), I[50] = (T)(img)(_p1##x,_n3##y,z,c), \
I[51] = (T)(img)(x,_n3##y,z,c), I[52] = (T)(img)(_n1##x,_n3##y,z,c), I[53] = (T)(img)(_n2##x,_n3##y,z,c), \
I[54] = (T)(img)(_n3##x,_n3##y,z,c), I[55] = (T)(img)(_n4##x,_n3##y,z,c), I[56] = (T)(img)(_p3##x,_n4##y,z,c), \
I[57] = (T)(img)(_p2##x,_n4##y,z,c), I[58] = (T)(img)(_p1##x,_n4##y,z,c), I[59] = (T)(img)(x,_n4##y,z,c), \
I[60] = (T)(img)(_n1##x,_n4##y,z,c), I[61] = (T)(img)(_n2##x,_n4##y,z,c), I[62] = (T)(img)(_n3##x,_n4##y,z,c), \
I[63] = (T)(img)(_n4##x,_n4##y,z,c);
#define cimg_get9x9(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p4##x,_p4##y,z,c), I[1] = (T)(img)(_p3##x,_p4##y,z,c), I[2] = (T)(img)(_p2##x,_p4##y,z,c), \
I[3] = (T)(img)(_p1##x,_p4##y,z,c), I[4] = (T)(img)(x,_p4##y,z,c), I[5] = (T)(img)(_n1##x,_p4##y,z,c), \
I[6] = (T)(img)(_n2##x,_p4##y,z,c), I[7] = (T)(img)(_n3##x,_p4##y,z,c), I[8] = (T)(img)(_n4##x,_p4##y,z,c), \
I[9] = (T)(img)(_p4##x,_p3##y,z,c), I[10] = (T)(img)(_p3##x,_p3##y,z,c), I[11] = (T)(img)(_p2##x,_p3##y,z,c), \
I[12] = (T)(img)(_p1##x,_p3##y,z,c), I[13] = (T)(img)(x,_p3##y,z,c), I[14] = (T)(img)(_n1##x,_p3##y,z,c), \
I[15] = (T)(img)(_n2##x,_p3##y,z,c), I[16] = (T)(img)(_n3##x,_p3##y,z,c), I[17] = (T)(img)(_n4##x,_p3##y,z,c), \
I[18] = (T)(img)(_p4##x,_p2##y,z,c), I[19] = (T)(img)(_p3##x,_p2##y,z,c), I[20] = (T)(img)(_p2##x,_p2##y,z,c), \
I[21] = (T)(img)(_p1##x,_p2##y,z,c), I[22] = (T)(img)(x,_p2##y,z,c), I[23] = (T)(img)(_n1##x,_p2##y,z,c), \
I[24] = (T)(img)(_n2##x,_p2##y,z,c), I[25] = (T)(img)(_n3##x,_p2##y,z,c), I[26] = (T)(img)(_n4##x,_p2##y,z,c), \
I[27] = (T)(img)(_p4##x,_p1##y,z,c), I[28] = (T)(img)(_p3##x,_p1##y,z,c), I[29] = (T)(img)(_p2##x,_p1##y,z,c), \
I[30] = (T)(img)(_p1##x,_p1##y,z,c), I[31] = (T)(img)(x,_p1##y,z,c), I[32] = (T)(img)(_n1##x,_p1##y,z,c), \
I[33] = (T)(img)(_n2##x,_p1##y,z,c), I[34] = (T)(img)(_n3##x,_p1##y,z,c), I[35] = (T)(img)(_n4##x,_p1##y,z,c), \
I[36] = (T)(img)(_p4##x,y,z,c), I[37] = (T)(img)(_p3##x,y,z,c), I[38] = (T)(img)(_p2##x,y,z,c), \
I[39] = (T)(img)(_p1##x,y,z,c), I[40] = (T)(img)(x,y,z,c), I[41] = (T)(img)(_n1##x,y,z,c), \
I[42] = (T)(img)(_n2##x,y,z,c), I[43] = (T)(img)(_n3##x,y,z,c), I[44] = (T)(img)(_n4##x,y,z,c), \
I[45] = (T)(img)(_p4##x,_n1##y,z,c), I[46] = (T)(img)(_p3##x,_n1##y,z,c), I[47] = (T)(img)(_p2##x,_n1##y,z,c), \
I[48] = (T)(img)(_p1##x,_n1##y,z,c), I[49] = (T)(img)(x,_n1##y,z,c), I[50] = (T)(img)(_n1##x,_n1##y,z,c), \
I[51] = (T)(img)(_n2##x,_n1##y,z,c), I[52] = (T)(img)(_n3##x,_n1##y,z,c), I[53] = (T)(img)(_n4##x,_n1##y,z,c), \
I[54] = (T)(img)(_p4##x,_n2##y,z,c), I[55] = (T)(img)(_p3##x,_n2##y,z,c), I[56] = (T)(img)(_p2##x,_n2##y,z,c), \
I[57] = (T)(img)(_p1##x,_n2##y,z,c), I[58] = (T)(img)(x,_n2##y,z,c), I[59] = (T)(img)(_n1##x,_n2##y,z,c), \
I[60] = (T)(img)(_n2##x,_n2##y,z,c), I[61] = (T)(img)(_n3##x,_n2##y,z,c), I[62] = (T)(img)(_n4##x,_n2##y,z,c), \
I[63] = (T)(img)(_p4##x,_n3##y,z,c), I[64] = (T)(img)(_p3##x,_n3##y,z,c), I[65] = (T)(img)(_p2##x,_n3##y,z,c), \
I[66] = (T)(img)(_p1##x,_n3##y,z,c), I[67] = (T)(img)(x,_n3##y,z,c), I[68] = (T)(img)(_n1##x,_n3##y,z,c), \
I[69] = (T)(img)(_n2##x,_n3##y,z,c), I[70] = (T)(img)(_n3##x,_n3##y,z,c), I[71] = (T)(img)(_n4##x,_n3##y,z,c), \
I[72] = (T)(img)(_p4##x,_n4##y,z,c), I[73] = (T)(img)(_p3##x,_n4##y,z,c), I[74] = (T)(img)(_p2##x,_n4##y,z,c), \
I[75] = (T)(img)(_p1##x,_n4##y,z,c), I[76] = (T)(img)(x,_n4##y,z,c), I[77] = (T)(img)(_n1##x,_n4##y,z,c), \
I[78] = (T)(img)(_n2##x,_n4##y,z,c), I[79] = (T)(img)(_n3##x,_n4##y,z,c), I[80] = (T)(img)(_n4##x,_n4##y,z,c)
#define cimg_get2x2x2(img,x,y,z,c,I,T) \
I[0] = (T)(img)(x,y,z,c), I[1] = (T)(img)(_n1##x,y,z,c), I[2] = (T)(img)(x,_n1##y,z,c), \
I[3] = (T)(img)(_n1##x,_n1##y,z,c), I[4] = (T)(img)(x,y,_n1##z,c), I[5] = (T)(img)(_n1##x,y,_n1##z,c), \
I[6] = (T)(img)(x,_n1##y,_n1##z,c), I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)
#define cimg_get3x3x3(img,x,y,z,c,I,T) \
I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[1] = (T)(img)(x,_p1##y,_p1##z,c), \
I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[3] = (T)(img)(_p1##x,y,_p1##z,c), I[4] = (T)(img)(x,y,_p1##z,c), \
I[5] = (T)(img)(_n1##x,y,_p1##z,c), I[6] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[7] = (T)(img)(x,_n1##y,_p1##z,c), \
I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[9] = (T)(img)(_p1##x,_p1##y,z,c), I[10] = (T)(img)(x,_p1##y,z,c), \
I[11] = (T)(img)(_n1##x,_p1##y,z,c), I[12] = (T)(img)(_p1##x,y,z,c), I[13] = (T)(img)(x,y,z,c), \
I[14] = (T)(img)(_n1##x,y,z,c), I[15] = (T)(img)(_p1##x,_n1##y,z,c), I[16] = (T)(img)(x,_n1##y,z,c), \
I[17] = (T)(img)(_n1##x,_n1##y,z,c), I[18] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[19] = (T)(img)(x,_p1##y,_n1##z,c), \
I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[21] = (T)(img)(_p1##x,y,_n1##z,c), I[22] = (T)(img)(x,y,_n1##z,c), \
I[23] = (T)(img)(_n1##x,y,_n1##z,c), I[24] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[25] = (T)(img)(x,_n1##y,_n1##z,c), \
I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)
// Macros to perform various image loops.
//
// These macros are simpler to use than loops with C++ iterators.
#define cimg_for(img,ptrs,T_ptrs) \
for (T_ptrs *ptrs = (img)._data, *_max##ptrs = (img)._data + (img).size(); ptrs<_max##ptrs; ++ptrs)
#define cimg_rof(img,ptrs,T_ptrs) for (T_ptrs *ptrs = (img)._data + (img).size() - 1; ptrs>=(img)._data; --ptrs)
#define cimg_foroff(img,off) for (cimg_ulong off = 0, _max##off = (img).size(); off<_max##off; ++off)
#define cimg_rofoff(img,off) for (cimg_long off = (cimg_long)((img).size() - 1); off>=0; --off)
#define cimg_for1(bound,i) for (int i = 0; i<(int)(bound); ++i)
#define cimg_forX(img,x) cimg_for1((img)._width,x)
#define cimg_forY(img,y) cimg_for1((img)._height,y)
#define cimg_forZ(img,z) cimg_for1((img)._depth,z)
#define cimg_forC(img,c) cimg_for1((img)._spectrum,c)
#define cimg_forXY(img,x,y) cimg_forY(img,y) cimg_forX(img,x)
#define cimg_forXZ(img,x,z) cimg_forZ(img,z) cimg_forX(img,x)
#define cimg_forYZ(img,y,z) cimg_forZ(img,z) cimg_forY(img,y)
#define cimg_forXC(img,x,c) cimg_forC(img,c) cimg_forX(img,x)
#define cimg_forYC(img,y,c) cimg_forC(img,c) cimg_forY(img,y)
#define cimg_forZC(img,z,c) cimg_forC(img,c) cimg_forZ(img,z)
#define cimg_forXYZ(img,x,y,z) cimg_forZ(img,z) cimg_forXY(img,x,y)
#define cimg_forXYC(img,x,y,c) cimg_forC(img,c) cimg_forXY(img,x,y)
#define cimg_forXZC(img,x,z,c) cimg_forC(img,c) cimg_forXZ(img,x,z)
#define cimg_forYZC(img,y,z,c) cimg_forC(img,c) cimg_forYZ(img,y,z)
#define cimg_forXYZC(img,x,y,z,c) cimg_forC(img,c) cimg_forXYZ(img,x,y,z)
#define cimg_rof1(bound,i) for (int i = (int)(bound) - 1; i>=0; --i)
#define cimg_rofX(img,x) cimg_rof1((img)._width,x)
#define cimg_rofY(img,y) cimg_rof1((img)._height,y)
#define cimg_rofZ(img,z) cimg_rof1((img)._depth,z)
#define cimg_rofC(img,c) cimg_rof1((img)._spectrum,c)
#define cimg_rofXY(img,x,y) cimg_rofY(img,y) cimg_rofX(img,x)
#define cimg_rofXZ(img,x,z) cimg_rofZ(img,z) cimg_rofX(img,x)
#define cimg_rofYZ(img,y,z) cimg_rofZ(img,z) cimg_rofY(img,y)
#define cimg_rofXC(img,x,c) cimg_rofC(img,c) cimg_rofX(img,x)
#define cimg_rofYC(img,y,c) cimg_rofC(img,c) cimg_rofY(img,y)
#define cimg_rofZC(img,z,c) cimg_rofC(img,c) cimg_rofZ(img,z)
#define cimg_rofXYZ(img,x,y,z) cimg_rofZ(img,z) cimg_rofXY(img,x,y)
#define cimg_rofXYC(img,x,y,c) cimg_rofC(img,c) cimg_rofXY(img,x,y)
#define cimg_rofXZC(img,x,z,c) cimg_rofC(img,c) cimg_rofXZ(img,x,z)
#define cimg_rofYZC(img,y,z,c) cimg_rofC(img,c) cimg_rofYZ(img,y,z)
#define cimg_rofXYZC(img,x,y,z,c) cimg_rofC(img,c) cimg_rofXYZ(img,x,y,z)
#define cimg_for_in1(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), _max##i = (int)(i1)<(int)(bound)?(int)(i1):(int)(bound) - 1; i<=_max##i; ++i)
#define cimg_for_inX(img,x0,x1,x) cimg_for_in1((img)._width,x0,x1,x)
#define cimg_for_inY(img,y0,y1,y) cimg_for_in1((img)._height,y0,y1,y)
#define cimg_for_inZ(img,z0,z1,z) cimg_for_in1((img)._depth,z0,z1,z)
#define cimg_for_inC(img,c0,c1,c) cimg_for_in1((img)._spectrum,c0,c1,c)
#define cimg_for_inXY(img,x0,y0,x1,y1,x,y) cimg_for_inY(img,y0,y1,y) cimg_for_inX(img,x0,x1,x)
#define cimg_for_inXZ(img,x0,z0,x1,z1,x,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inX(img,x0,x1,x)
#define cimg_for_inXC(img,x0,c0,x1,c1,x,c) cimg_for_inC(img,c0,c1,c) cimg_for_inX(img,x0,x1,x)
#define cimg_for_inYZ(img,y0,z0,y1,z1,y,z) cimg_for_inZ(img,x0,z1,z) cimg_for_inY(img,y0,y1,y)
#define cimg_for_inYC(img,y0,c0,y1,c1,y,c) cimg_for_inC(img,c0,c1,c) cimg_for_inY(img,y0,y1,y)
#define cimg_for_inZC(img,z0,c0,z1,c1,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inZ(img,z0,z1,z)
#define cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inXY(img,x0,y0,x1,y1,x,y)
#define cimg_for_inXYC(img,x0,y0,c0,x1,y1,c1,x,y,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXY(img,x0,y0,x1,y1,x,y)
#define cimg_for_inXZC(img,x0,z0,c0,x1,z1,c1,x,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXZ(img,x0,z0,x1,z1,x,z)
#define cimg_for_inYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inYZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_inXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_inC(img,c0,c1,c) cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for_insideX(img,x,n) cimg_for_inX(img,n,(img)._width - 1 - (n),x)
#define cimg_for_insideY(img,y,n) cimg_for_inY(img,n,(img)._height - 1 - (n),y)
#define cimg_for_insideZ(img,z,n) cimg_for_inZ(img,n,(img)._depth - 1 - (n),z)
#define cimg_for_insideC(img,c,n) cimg_for_inC(img,n,(img)._spectrum - 1 - (n),c)
#define cimg_for_insideXY(img,x,y,n) cimg_for_inXY(img,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),x,y)
#define cimg_for_insideXYZ(img,x,y,z,n) \
cimg_for_inXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z)
#define cimg_for_insideXYZC(img,x,y,z,c,n) \
cimg_for_inXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z)
#define cimg_for_out1(boundi,i0,i1,i) \
for (int i = (int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1) + 1:i)
#define cimg_for_out2(boundi,boundj,i0,j0,i1,j1,i,j) \
for (int j = 0; j<(int)(boundj); ++j) \
for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j?0:(int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); \
++i, i = _n1j?i:(i==(int)(i0)?(int)(i1) + 1:i))
#define cimg_for_out3(boundi,boundj,boundk,i0,j0,k0,i1,j1,k1,i,j,k) \
for (int k = 0; k<(int)(boundk); ++k) \
for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \
for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k?0:(int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); \
++i, i = _n1j || _n1k?i:(i==(int)(i0)?(int)(i1) + 1:i))
#define cimg_for_out4(boundi,boundj,boundk,boundl,i0,j0,k0,l0,i1,j1,k1,l1,i,j,k,l) \
for (int l = 0; l<(int)(boundl); ++l) \
for (int _n1l = (int)(l<(int)(l0) || l>(int)(l1)), k = 0; k<(int)(boundk); ++k) \
for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \
for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k || _n1l?0:(int)(i0)>0?0:(int)(i1) + 1; \
i<(int)(boundi); ++i, i = _n1j || _n1k || _n1l?i:(i==(int)(i0)?(int)(i1) + 1:i))
#define cimg_for_outX(img,x0,x1,x) cimg_for_out1((img)._width,x0,x1,x)
#define cimg_for_outY(img,y0,y1,y) cimg_for_out1((img)._height,y0,y1,y)
#define cimg_for_outZ(img,z0,z1,z) cimg_for_out1((img)._depth,z0,z1,z)
#define cimg_for_outC(img,c0,c1,c) cimg_for_out1((img)._spectrum,c0,c1,c)
#define cimg_for_outXY(img,x0,y0,x1,y1,x,y) cimg_for_out2((img)._width,(img)._height,x0,y0,x1,y1,x,y)
#define cimg_for_outXZ(img,x0,z0,x1,z1,x,z) cimg_for_out2((img)._width,(img)._depth,x0,z0,x1,z1,x,z)
#define cimg_for_outXC(img,x0,c0,x1,c1,x,c) cimg_for_out2((img)._width,(img)._spectrum,x0,c0,x1,c1,x,c)
#define cimg_for_outYZ(img,y0,z0,y1,z1,y,z) cimg_for_out2((img)._height,(img)._depth,y0,z0,y1,z1,y,z)
#define cimg_for_outYC(img,y0,c0,y1,c1,y,c) cimg_for_out2((img)._height,(img)._spectrum,y0,c0,y1,c1,y,c)
#define cimg_for_outZC(img,z0,c0,z1,c1,z,c) cimg_for_out2((img)._depth,(img)._spectrum,z0,c0,z1,c1,z,c)
#define cimg_for_outXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) \
cimg_for_out3((img)._width,(img)._height,(img)._depth,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for_outXYC(img,x0,y0,c0,x1,y1,c1,x,y,c) \
cimg_for_out3((img)._width,(img)._height,(img)._spectrum,x0,y0,c0,x1,y1,c1,x,y,c)
#define cimg_for_outXZC(img,x0,z0,c0,x1,z1,c1,x,z,c) \
cimg_for_out3((img)._width,(img)._depth,(img)._spectrum,x0,z0,c0,x1,z1,c1,x,z,c)
#define cimg_for_outYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) \
cimg_for_out3((img)._height,(img)._depth,(img)._spectrum,y0,z0,c0,y1,z1,c1,y,z,c)
#define cimg_for_outXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_out4((img)._width,(img)._height,(img)._depth,(img)._spectrum,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c)
#define cimg_for_borderX(img,x,n) cimg_for_outX(img,n,(img)._width - 1 - (n),x)
#define cimg_for_borderY(img,y,n) cimg_for_outY(img,n,(img)._height - 1 - (n),y)
#define cimg_for_borderZ(img,z,n) cimg_for_outZ(img,n,(img)._depth - 1 - (n),z)
#define cimg_for_borderC(img,c,n) cimg_for_outC(img,n,(img)._spectrum - 1 - (n),c)
#define cimg_for_borderXY(img,x,y,n) cimg_for_outXY(img,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),x,y)
#define cimg_for_borderXYZ(img,x,y,z,n) \
cimg_for_outXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z)
#define cimg_for_borderXYZC(img,x,y,z,c,n) \
cimg_for_outXYZC(img,n,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n), \
(img)._depth - 1 - (n),(img)._spectrum - 1 - (n),x,y,z,c)
#define cimg_for_spiralXY(img,x,y) \
for (int x = 0, y = 0, _n1##x = 1, _n1##y = (img).width()*(img).height(); _n1##y; \
--_n1##y, _n1##x+=(_n1##x>>2) - ((!(_n1##x&3)?--y:((_n1##x&3)==1?(img)._width - 1 - ++x:\
((_n1##x&3)==2?(img)._height - 1 - ++y:--x))))?0:1)
#define cimg_for_lineXY(x,y,x0,y0,x1,y1) \
for (int x = (int)(x0), y = (int)(y0), _sx = 1, _sy = 1, _slope = 0, \
_dx=(x1)>(x0)?(int)(x1) - (int)(x0):(_sx=-1,(int)(x0) - (int)(x1)), \
_dy=(y1)>(y0)?(int)(y1) - (int)(y0):(_sy=-1,(int)(y0) - (int)(y1)), \
_counter = _dx, \
_err = _dx>_dy?(_dy>>1):((_slope=1),(_counter=_dy),(_dx>>1)); \
_counter>=0; \
--_counter, x+=_slope? \
(y+=_sy,(_err-=_dx)<0?_err+=_dy,_sx:0): \
(y+=(_err-=_dy)<0?_err+=_dx,_sy:0,_sx))
#define cimg_for2(bound,i) \
for (int i = 0, _n1##i = 1>=(bound)?(int)(bound) - 1:1; \
_n1##i<(int)(bound) || i==--_n1##i; \
++i, ++_n1##i)
#define cimg_for2X(img,x) cimg_for2((img)._width,x)
#define cimg_for2Y(img,y) cimg_for2((img)._height,y)
#define cimg_for2Z(img,z) cimg_for2((img)._depth,z)
#define cimg_for2C(img,c) cimg_for2((img)._spectrum,c)
#define cimg_for2XY(img,x,y) cimg_for2Y(img,y) cimg_for2X(img,x)
#define cimg_for2XZ(img,x,z) cimg_for2Z(img,z) cimg_for2X(img,x)
#define cimg_for2XC(img,x,c) cimg_for2C(img,c) cimg_for2X(img,x)
#define cimg_for2YZ(img,y,z) cimg_for2Z(img,z) cimg_for2Y(img,y)
#define cimg_for2YC(img,y,c) cimg_for2C(img,c) cimg_for2Y(img,y)
#define cimg_for2ZC(img,z,c) cimg_for2C(img,c) cimg_for2Z(img,z)
#define cimg_for2XYZ(img,x,y,z) cimg_for2Z(img,z) cimg_for2XY(img,x,y)
#define cimg_for2XZC(img,x,z,c) cimg_for2C(img,c) cimg_for2XZ(img,x,z)
#define cimg_for2YZC(img,y,z,c) cimg_for2C(img,c) cimg_for2YZ(img,y,z)
#define cimg_for2XYZC(img,x,y,z,c) cimg_for2C(img,c) cimg_for2XYZ(img,x,y,z)
#define cimg_for_in2(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1; \
i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \
++i, ++_n1##i)
#define cimg_for_in2X(img,x0,x1,x) cimg_for_in2((img)._width,x0,x1,x)
#define cimg_for_in2Y(img,y0,y1,y) cimg_for_in2((img)._height,y0,y1,y)
#define cimg_for_in2Z(img,z0,z1,z) cimg_for_in2((img)._depth,z0,z1,z)
#define cimg_for_in2C(img,c0,c1,c) cimg_for_in2((img)._spectrum,c0,c1,c)
#define cimg_for_in2XY(img,x0,y0,x1,y1,x,y) cimg_for_in2Y(img,y0,y1,y) cimg_for_in2X(img,x0,x1,x)
#define cimg_for_in2XZ(img,x0,z0,x1,z1,x,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2X(img,x0,x1,x)
#define cimg_for_in2XC(img,x0,c0,x1,c1,x,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2X(img,x0,x1,x)
#define cimg_for_in2YZ(img,y0,z0,y1,z1,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2Y(img,y0,y1,y)
#define cimg_for_in2YC(img,y0,c0,y1,c1,y,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2Y(img,y0,y1,y)
#define cimg_for_in2ZC(img,z0,c0,z1,c1,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2Z(img,z0,z1,z)
#define cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in2XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in2YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in2XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in2C(img,c0,c1,c) cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for3(bound,i) \
for (int i = 0, _p1##i = 0, \
_n1##i = 1>=(bound)?(int)(bound) - 1:1; \
_n1##i<(int)(bound) || i==--_n1##i; \
_p1##i = i++, ++_n1##i)
#define cimg_for3X(img,x) cimg_for3((img)._width,x)
#define cimg_for3Y(img,y) cimg_for3((img)._height,y)
#define cimg_for3Z(img,z) cimg_for3((img)._depth,z)
#define cimg_for3C(img,c) cimg_for3((img)._spectrum,c)
#define cimg_for3XY(img,x,y) cimg_for3Y(img,y) cimg_for3X(img,x)
#define cimg_for3XZ(img,x,z) cimg_for3Z(img,z) cimg_for3X(img,x)
#define cimg_for3XC(img,x,c) cimg_for3C(img,c) cimg_for3X(img,x)
#define cimg_for3YZ(img,y,z) cimg_for3Z(img,z) cimg_for3Y(img,y)
#define cimg_for3YC(img,y,c) cimg_for3C(img,c) cimg_for3Y(img,y)
#define cimg_for3ZC(img,z,c) cimg_for3C(img,c) cimg_for3Z(img,z)
#define cimg_for3XYZ(img,x,y,z) cimg_for3Z(img,z) cimg_for3XY(img,x,y)
#define cimg_for3XZC(img,x,z,c) cimg_for3C(img,c) cimg_for3XZ(img,x,z)
#define cimg_for3YZC(img,y,z,c) cimg_for3C(img,c) cimg_for3YZ(img,y,z)
#define cimg_for3XYZC(img,x,y,z,c) cimg_for3C(img,c) cimg_for3XYZ(img,x,y,z)
#define cimg_for_in3(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1; \
i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \
_p1##i = i++, ++_n1##i)
#define cimg_for_in3X(img,x0,x1,x) cimg_for_in3((img)._width,x0,x1,x)
#define cimg_for_in3Y(img,y0,y1,y) cimg_for_in3((img)._height,y0,y1,y)
#define cimg_for_in3Z(img,z0,z1,z) cimg_for_in3((img)._depth,z0,z1,z)
#define cimg_for_in3C(img,c0,c1,c) cimg_for_in3((img)._spectrum,c0,c1,c)
#define cimg_for_in3XY(img,x0,y0,x1,y1,x,y) cimg_for_in3Y(img,y0,y1,y) cimg_for_in3X(img,x0,x1,x)
#define cimg_for_in3XZ(img,x0,z0,x1,z1,x,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3X(img,x0,x1,x)
#define cimg_for_in3XC(img,x0,c0,x1,c1,x,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3X(img,x0,x1,x)
#define cimg_for_in3YZ(img,y0,z0,y1,z1,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3Y(img,y0,y1,y)
#define cimg_for_in3YC(img,y0,c0,y1,c1,y,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3Y(img,y0,y1,y)
#define cimg_for_in3ZC(img,z0,c0,z1,c1,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3Z(img,z0,z1,z)
#define cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in3XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in3YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in3XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in3C(img,c0,c1,c) cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for4(bound,i) \
for (int i = 0, _p1##i = 0, _n1##i = 1>=(bound)?(int)(bound) - 1:1, \
_n2##i = 2>=(bound)?(int)(bound) - 1:2; \
_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \
_p1##i = i++, ++_n1##i, ++_n2##i)
#define cimg_for4X(img,x) cimg_for4((img)._width,x)
#define cimg_for4Y(img,y) cimg_for4((img)._height,y)
#define cimg_for4Z(img,z) cimg_for4((img)._depth,z)
#define cimg_for4C(img,c) cimg_for4((img)._spectrum,c)
#define cimg_for4XY(img,x,y) cimg_for4Y(img,y) cimg_for4X(img,x)
#define cimg_for4XZ(img,x,z) cimg_for4Z(img,z) cimg_for4X(img,x)
#define cimg_for4XC(img,x,c) cimg_for4C(img,c) cimg_for4X(img,x)
#define cimg_for4YZ(img,y,z) cimg_for4Z(img,z) cimg_for4Y(img,y)
#define cimg_for4YC(img,y,c) cimg_for4C(img,c) cimg_for4Y(img,y)
#define cimg_for4ZC(img,z,c) cimg_for4C(img,c) cimg_for4Z(img,z)
#define cimg_for4XYZ(img,x,y,z) cimg_for4Z(img,z) cimg_for4XY(img,x,y)
#define cimg_for4XZC(img,x,z,c) cimg_for4C(img,c) cimg_for4XZ(img,x,z)
#define cimg_for4YZC(img,y,z,c) cimg_for4C(img,c) cimg_for4YZ(img,y,z)
#define cimg_for4XYZC(img,x,y,z,c) cimg_for4C(img,c) cimg_for4XYZ(img,x,y,z)
#define cimg_for_in4(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \
_n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2; \
i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \
_p1##i = i++, ++_n1##i, ++_n2##i)
#define cimg_for_in4X(img,x0,x1,x) cimg_for_in4((img)._width,x0,x1,x)
#define cimg_for_in4Y(img,y0,y1,y) cimg_for_in4((img)._height,y0,y1,y)
#define cimg_for_in4Z(img,z0,z1,z) cimg_for_in4((img)._depth,z0,z1,z)
#define cimg_for_in4C(img,c0,c1,c) cimg_for_in4((img)._spectrum,c0,c1,c)
#define cimg_for_in4XY(img,x0,y0,x1,y1,x,y) cimg_for_in4Y(img,y0,y1,y) cimg_for_in4X(img,x0,x1,x)
#define cimg_for_in4XZ(img,x0,z0,x1,z1,x,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4X(img,x0,x1,x)
#define cimg_for_in4XC(img,x0,c0,x1,c1,x,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4X(img,x0,x1,x)
#define cimg_for_in4YZ(img,y0,z0,y1,z1,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4Y(img,y0,y1,y)
#define cimg_for_in4YC(img,y0,c0,y1,c1,y,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4Y(img,y0,y1,y)
#define cimg_for_in4ZC(img,z0,c0,z1,c1,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4Z(img,z0,z1,z)
#define cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in4XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in4YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in4XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in4C(img,c0,c1,c) cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for5(bound,i) \
for (int i = 0, _p2##i = 0, _p1##i = 0, \
_n1##i = 1>=(bound)?(int)(bound) - 1:1, \
_n2##i = 2>=(bound)?(int)(bound) - 1:2; \
_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \
_p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i)
#define cimg_for5X(img,x) cimg_for5((img)._width,x)
#define cimg_for5Y(img,y) cimg_for5((img)._height,y)
#define cimg_for5Z(img,z) cimg_for5((img)._depth,z)
#define cimg_for5C(img,c) cimg_for5((img)._spectrum,c)
#define cimg_for5XY(img,x,y) cimg_for5Y(img,y) cimg_for5X(img,x)
#define cimg_for5XZ(img,x,z) cimg_for5Z(img,z) cimg_for5X(img,x)
#define cimg_for5XC(img,x,c) cimg_for5C(img,c) cimg_for5X(img,x)
#define cimg_for5YZ(img,y,z) cimg_for5Z(img,z) cimg_for5Y(img,y)
#define cimg_for5YC(img,y,c) cimg_for5C(img,c) cimg_for5Y(img,y)
#define cimg_for5ZC(img,z,c) cimg_for5C(img,c) cimg_for5Z(img,z)
#define cimg_for5XYZ(img,x,y,z) cimg_for5Z(img,z) cimg_for5XY(img,x,y)
#define cimg_for5XZC(img,x,z,c) cimg_for5C(img,c) cimg_for5XZ(img,x,z)
#define cimg_for5YZC(img,y,z,c) cimg_for5C(img,c) cimg_for5YZ(img,y,z)
#define cimg_for5XYZC(img,x,y,z,c) cimg_for5C(img,c) cimg_for5XYZ(img,x,y,z)
#define cimg_for_in5(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p2##i = i - 2<0?0:i - 2, \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \
_n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2; \
i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \
_p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i)
#define cimg_for_in5X(img,x0,x1,x) cimg_for_in5((img)._width,x0,x1,x)
#define cimg_for_in5Y(img,y0,y1,y) cimg_for_in5((img)._height,y0,y1,y)
#define cimg_for_in5Z(img,z0,z1,z) cimg_for_in5((img)._depth,z0,z1,z)
#define cimg_for_in5C(img,c0,c1,c) cimg_for_in5((img)._spectrum,c0,c1,c)
#define cimg_for_in5XY(img,x0,y0,x1,y1,x,y) cimg_for_in5Y(img,y0,y1,y) cimg_for_in5X(img,x0,x1,x)
#define cimg_for_in5XZ(img,x0,z0,x1,z1,x,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5X(img,x0,x1,x)
#define cimg_for_in5XC(img,x0,c0,x1,c1,x,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5X(img,x0,x1,x)
#define cimg_for_in5YZ(img,y0,z0,y1,z1,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5Y(img,y0,y1,y)
#define cimg_for_in5YC(img,y0,c0,y1,c1,y,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5Y(img,y0,y1,y)
#define cimg_for_in5ZC(img,z0,c0,z1,c1,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5Z(img,z0,z1,z)
#define cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in5XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in5YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in5XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in5C(img,c0,c1,c) cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for6(bound,i) \
for (int i = 0, _p2##i = 0, _p1##i = 0, \
_n1##i = 1>=(bound)?(int)(bound) - 1:1, \
_n2##i = 2>=(bound)?(int)(bound) - 1:2, \
_n3##i = 3>=(bound)?(int)(bound) - 1:3; \
_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \
_p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
#define cimg_for6X(img,x) cimg_for6((img)._width,x)
#define cimg_for6Y(img,y) cimg_for6((img)._height,y)
#define cimg_for6Z(img,z) cimg_for6((img)._depth,z)
#define cimg_for6C(img,c) cimg_for6((img)._spectrum,c)
#define cimg_for6XY(img,x,y) cimg_for6Y(img,y) cimg_for6X(img,x)
#define cimg_for6XZ(img,x,z) cimg_for6Z(img,z) cimg_for6X(img,x)
#define cimg_for6XC(img,x,c) cimg_for6C(img,c) cimg_for6X(img,x)
#define cimg_for6YZ(img,y,z) cimg_for6Z(img,z) cimg_for6Y(img,y)
#define cimg_for6YC(img,y,c) cimg_for6C(img,c) cimg_for6Y(img,y)
#define cimg_for6ZC(img,z,c) cimg_for6C(img,c) cimg_for6Z(img,z)
#define cimg_for6XYZ(img,x,y,z) cimg_for6Z(img,z) cimg_for6XY(img,x,y)
#define cimg_for6XZC(img,x,z,c) cimg_for6C(img,c) cimg_for6XZ(img,x,z)
#define cimg_for6YZC(img,y,z,c) cimg_for6C(img,c) cimg_for6YZ(img,y,z)
#define cimg_for6XYZC(img,x,y,z,c) cimg_for6C(img,c) cimg_for6XYZ(img,x,y,z)
#define cimg_for_in6(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p2##i = i - 2<0?0:i - 2, \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \
_n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \
_n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3; \
i<=(int)(i1) && \
(_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \
_p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
#define cimg_for_in6X(img,x0,x1,x) cimg_for_in6((img)._width,x0,x1,x)
#define cimg_for_in6Y(img,y0,y1,y) cimg_for_in6((img)._height,y0,y1,y)
#define cimg_for_in6Z(img,z0,z1,z) cimg_for_in6((img)._depth,z0,z1,z)
#define cimg_for_in6C(img,c0,c1,c) cimg_for_in6((img)._spectrum,c0,c1,c)
#define cimg_for_in6XY(img,x0,y0,x1,y1,x,y) cimg_for_in6Y(img,y0,y1,y) cimg_for_in6X(img,x0,x1,x)
#define cimg_for_in6XZ(img,x0,z0,x1,z1,x,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6X(img,x0,x1,x)
#define cimg_for_in6XC(img,x0,c0,x1,c1,x,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6X(img,x0,x1,x)
#define cimg_for_in6YZ(img,y0,z0,y1,z1,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6Y(img,y0,y1,y)
#define cimg_for_in6YC(img,y0,c0,y1,c1,y,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6Y(img,y0,y1,y)
#define cimg_for_in6ZC(img,z0,c0,z1,c1,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6Z(img,z0,z1,z)
#define cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in6XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in6YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in6XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in6C(img,c0,c1,c) cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for7(bound,i) \
for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \
_n1##i = 1>=(bound)?(int)(bound) - 1:1, \
_n2##i = 2>=(bound)?(int)(bound) - 1:2, \
_n3##i = 3>=(bound)?(int)(bound) - 1:3; \
_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \
_p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
#define cimg_for7X(img,x) cimg_for7((img)._width,x)
#define cimg_for7Y(img,y) cimg_for7((img)._height,y)
#define cimg_for7Z(img,z) cimg_for7((img)._depth,z)
#define cimg_for7C(img,c) cimg_for7((img)._spectrum,c)
#define cimg_for7XY(img,x,y) cimg_for7Y(img,y) cimg_for7X(img,x)
#define cimg_for7XZ(img,x,z) cimg_for7Z(img,z) cimg_for7X(img,x)
#define cimg_for7XC(img,x,c) cimg_for7C(img,c) cimg_for7X(img,x)
#define cimg_for7YZ(img,y,z) cimg_for7Z(img,z) cimg_for7Y(img,y)
#define cimg_for7YC(img,y,c) cimg_for7C(img,c) cimg_for7Y(img,y)
#define cimg_for7ZC(img,z,c) cimg_for7C(img,c) cimg_for7Z(img,z)
#define cimg_for7XYZ(img,x,y,z) cimg_for7Z(img,z) cimg_for7XY(img,x,y)
#define cimg_for7XZC(img,x,z,c) cimg_for7C(img,c) cimg_for7XZ(img,x,z)
#define cimg_for7YZC(img,y,z,c) cimg_for7C(img,c) cimg_for7YZ(img,y,z)
#define cimg_for7XYZC(img,x,y,z,c) cimg_for7C(img,c) cimg_for7XYZ(img,x,y,z)
#define cimg_for_in7(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p3##i = i - 3<0?0:i - 3, \
_p2##i = i - 2<0?0:i - 2, \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \
_n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \
_n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3; \
i<=(int)(i1) && \
(_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \
_p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i)
#define cimg_for_in7X(img,x0,x1,x) cimg_for_in7((img)._width,x0,x1,x)
#define cimg_for_in7Y(img,y0,y1,y) cimg_for_in7((img)._height,y0,y1,y)
#define cimg_for_in7Z(img,z0,z1,z) cimg_for_in7((img)._depth,z0,z1,z)
#define cimg_for_in7C(img,c0,c1,c) cimg_for_in7((img)._spectrum,c0,c1,c)
#define cimg_for_in7XY(img,x0,y0,x1,y1,x,y) cimg_for_in7Y(img,y0,y1,y) cimg_for_in7X(img,x0,x1,x)
#define cimg_for_in7XZ(img,x0,z0,x1,z1,x,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7X(img,x0,x1,x)
#define cimg_for_in7XC(img,x0,c0,x1,c1,x,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7X(img,x0,x1,x)
#define cimg_for_in7YZ(img,y0,z0,y1,z1,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7Y(img,y0,y1,y)
#define cimg_for_in7YC(img,y0,c0,y1,c1,y,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7Y(img,y0,y1,y)
#define cimg_for_in7ZC(img,z0,c0,z1,c1,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7Z(img,z0,z1,z)
#define cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in7XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in7YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in7XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in7C(img,c0,c1,c) cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for8(bound,i) \
for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \
_n1##i = 1>=(bound)?(int)(bound) - 1:1, \
_n2##i = 2>=(bound)?(int)(bound) - 1:2, \
_n3##i = 3>=(bound)?(int)(bound) - 1:3, \
_n4##i = 4>=(bound)?(int)(bound) - 1:4; \
_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
i==(_n4##i = _n3##i = _n2##i = --_n1##i); \
_p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
#define cimg_for8X(img,x) cimg_for8((img)._width,x)
#define cimg_for8Y(img,y) cimg_for8((img)._height,y)
#define cimg_for8Z(img,z) cimg_for8((img)._depth,z)
#define cimg_for8C(img,c) cimg_for8((img)._spectrum,c)
#define cimg_for8XY(img,x,y) cimg_for8Y(img,y) cimg_for8X(img,x)
#define cimg_for8XZ(img,x,z) cimg_for8Z(img,z) cimg_for8X(img,x)
#define cimg_for8XC(img,x,c) cimg_for8C(img,c) cimg_for8X(img,x)
#define cimg_for8YZ(img,y,z) cimg_for8Z(img,z) cimg_for8Y(img,y)
#define cimg_for8YC(img,y,c) cimg_for8C(img,c) cimg_for8Y(img,y)
#define cimg_for8ZC(img,z,c) cimg_for8C(img,c) cimg_for8Z(img,z)
#define cimg_for8XYZ(img,x,y,z) cimg_for8Z(img,z) cimg_for8XY(img,x,y)
#define cimg_for8XZC(img,x,z,c) cimg_for8C(img,c) cimg_for8XZ(img,x,z)
#define cimg_for8YZC(img,y,z,c) cimg_for8C(img,c) cimg_for8YZ(img,y,z)
#define cimg_for8XYZC(img,x,y,z,c) cimg_for8C(img,c) cimg_for8XYZ(img,x,y,z)
#define cimg_for_in8(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p3##i = i - 3<0?0:i - 3, \
_p2##i = i - 2<0?0:i - 2, \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \
_n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \
_n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3, \
_n4##i = i + 4>=(int)(bound)?(int)(bound) - 1:i + 4; \
i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \
_p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
#define cimg_for_in8X(img,x0,x1,x) cimg_for_in8((img)._width,x0,x1,x)
#define cimg_for_in8Y(img,y0,y1,y) cimg_for_in8((img)._height,y0,y1,y)
#define cimg_for_in8Z(img,z0,z1,z) cimg_for_in8((img)._depth,z0,z1,z)
#define cimg_for_in8C(img,c0,c1,c) cimg_for_in8((img)._spectrum,c0,c1,c)
#define cimg_for_in8XY(img,x0,y0,x1,y1,x,y) cimg_for_in8Y(img,y0,y1,y) cimg_for_in8X(img,x0,x1,x)
#define cimg_for_in8XZ(img,x0,z0,x1,z1,x,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8X(img,x0,x1,x)
#define cimg_for_in8XC(img,x0,c0,x1,c1,x,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8X(img,x0,x1,x)
#define cimg_for_in8YZ(img,y0,z0,y1,z1,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8Y(img,y0,y1,y)
#define cimg_for_in8YC(img,y0,c0,y1,c1,y,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8Y(img,y0,y1,y)
#define cimg_for_in8ZC(img,z0,c0,z1,c1,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8Z(img,z0,z1,z)
#define cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in8XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in8YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in8XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in8C(img,c0,c1,c) cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for9(bound,i) \
for (int i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \
_n1##i = 1>=(int)(bound)?(int)(bound) - 1:1, \
_n2##i = 2>=(int)(bound)?(int)(bound) - 1:2, \
_n3##i = 3>=(int)(bound)?(int)(bound) - 1:3, \
_n4##i = 4>=(int)(bound)?(int)(bound) - 1:4; \
_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
i==(_n4##i = _n3##i = _n2##i = --_n1##i); \
_p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
#define cimg_for9X(img,x) cimg_for9((img)._width,x)
#define cimg_for9Y(img,y) cimg_for9((img)._height,y)
#define cimg_for9Z(img,z) cimg_for9((img)._depth,z)
#define cimg_for9C(img,c) cimg_for9((img)._spectrum,c)
#define cimg_for9XY(img,x,y) cimg_for9Y(img,y) cimg_for9X(img,x)
#define cimg_for9XZ(img,x,z) cimg_for9Z(img,z) cimg_for9X(img,x)
#define cimg_for9XC(img,x,c) cimg_for9C(img,c) cimg_for9X(img,x)
#define cimg_for9YZ(img,y,z) cimg_for9Z(img,z) cimg_for9Y(img,y)
#define cimg_for9YC(img,y,c) cimg_for9C(img,c) cimg_for9Y(img,y)
#define cimg_for9ZC(img,z,c) cimg_for9C(img,c) cimg_for9Z(img,z)
#define cimg_for9XYZ(img,x,y,z) cimg_for9Z(img,z) cimg_for9XY(img,x,y)
#define cimg_for9XZC(img,x,z,c) cimg_for9C(img,c) cimg_for9XZ(img,x,z)
#define cimg_for9YZC(img,y,z,c) cimg_for9C(img,c) cimg_for9YZ(img,y,z)
#define cimg_for9XYZC(img,x,y,z,c) cimg_for9C(img,c) cimg_for9XYZ(img,x,y,z)
#define cimg_for_in9(bound,i0,i1,i) \
for (int i = (int)(i0)<0?0:(int)(i0), \
_p4##i = i - 4<0?0:i - 4, \
_p3##i = i - 3<0?0:i - 3, \
_p2##i = i - 2<0?0:i - 2, \
_p1##i = i - 1<0?0:i - 1, \
_n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \
_n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \
_n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3, \
_n4##i = i + 4>=(int)(bound)?(int)(bound) - 1:i + 4; \
i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \
i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \
_p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i)
#define cimg_for_in9X(img,x0,x1,x) cimg_for_in9((img)._width,x0,x1,x)
#define cimg_for_in9Y(img,y0,y1,y) cimg_for_in9((img)._height,y0,y1,y)
#define cimg_for_in9Z(img,z0,z1,z) cimg_for_in9((img)._depth,z0,z1,z)
#define cimg_for_in9C(img,c0,c1,c) cimg_for_in9((img)._spectrum,c0,c1,c)
#define cimg_for_in9XY(img,x0,y0,x1,y1,x,y) cimg_for_in9Y(img,y0,y1,y) cimg_for_in9X(img,x0,x1,x)
#define cimg_for_in9XZ(img,x0,z0,x1,z1,x,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9X(img,x0,x1,x)
#define cimg_for_in9XC(img,x0,c0,x1,c1,x,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9X(img,x0,x1,x)
#define cimg_for_in9YZ(img,y0,z0,y1,z1,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9Y(img,y0,y1,y)
#define cimg_for_in9YC(img,y0,c0,y1,c1,y,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9Y(img,y0,y1,y)
#define cimg_for_in9ZC(img,z0,c0,z1,c1,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9Z(img,z0,z1,z)
#define cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9XY(img,x0,y0,x1,y1,x,y)
#define cimg_for_in9XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9XZ(img,x0,y0,x1,y1,x,z)
#define cimg_for_in9YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9YZ(img,y0,z0,y1,z1,y,z)
#define cimg_for_in9XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \
cimg_for_in9C(img,c0,c1,c) cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z)
#define cimg_for2x2(img,x,y,z,c,I,T) \
cimg_for2((img)._height,y) for (int x = 0, \
_n1##x = (int)( \
(I[0] = (T)(img)(0,y,z,c)), \
(I[2] = (T)(img)(0,_n1##y,z,c)), \
1>=(img)._width?(img).width() - 1:1); \
(_n1##x<(img).width() && ( \
(I[1] = (T)(img)(_n1##x,y,z,c)), \
(I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \
x==--_n1##x; \
I[0] = I[1], \
I[2] = I[3], \
++x, ++_n1##x)
#define cimg_for_in2x2(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in2((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_n1##x = (int)( \
(I[0] = (T)(img)(x,y,z,c)), \
(I[2] = (T)(img)(x,_n1##y,z,c)), \
x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \
x<=(int)(x1) && ((_n1##x<(img).width() && ( \
(I[1] = (T)(img)(_n1##x,y,z,c)), \
(I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \
x==--_n1##x); \
I[0] = I[1], \
I[2] = I[3], \
++x, ++_n1##x)
#define cimg_for3x3(img,x,y,z,c,I,T) \
cimg_for3((img)._height,y) for (int x = 0, \
_p1##x = 0, \
_n1##x = (int)( \
(I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[3] = I[4] = (T)(img)(0,y,z,c)), \
(I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \
1>=(img)._width?(img).width() - 1:1); \
(_n1##x<(img).width() && ( \
(I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[5] = (T)(img)(_n1##x,y,z,c)), \
(I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \
x==--_n1##x; \
I[0] = I[1], I[1] = I[2], \
I[3] = I[4], I[4] = I[5], \
I[6] = I[7], I[7] = I[8], \
_p1##x = x++, ++_n1##x)
#define cimg_for_in3x3(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = (int)( \
(I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[3] = (T)(img)(_p1##x,y,z,c)), \
(I[6] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[1] = (T)(img)(x,_p1##y,z,c)), \
(I[4] = (T)(img)(x,y,z,c)), \
(I[7] = (T)(img)(x,_n1##y,z,c)), \
x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \
x<=(int)(x1) && ((_n1##x<(img).width() && ( \
(I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[5] = (T)(img)(_n1##x,y,z,c)), \
(I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \
x==--_n1##x); \
I[0] = I[1], I[1] = I[2], \
I[3] = I[4], I[4] = I[5], \
I[6] = I[7], I[7] = I[8], \
_p1##x = x++, ++_n1##x)
#define cimg_for4x4(img,x,y,z,c,I,T) \
cimg_for4((img)._height,y) for (int x = 0, \
_p1##x = 0, \
_n1##x = 1>=(img)._width?(img).width() - 1:1, \
_n2##x = (int)( \
(I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[4] = I[5] = (T)(img)(0,y,z,c)), \
(I[8] = I[9] = (T)(img)(0,_n1##y,z,c)), \
(I[12] = I[13] = (T)(img)(0,_n2##y,z,c)), \
(I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[6] = (T)(img)(_n1##x,y,z,c)), \
(I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \
2>=(img)._width?(img).width() - 1:2); \
(_n2##x<(img).width() && ( \
(I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[7] = (T)(img)(_n2##x,y,z,c)), \
(I[11] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[15] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \
_n1##x==--_n2##x || x==(_n2##x = --_n1##x); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], \
I[4] = I[5], I[5] = I[6], I[6] = I[7], \
I[8] = I[9], I[9] = I[10], I[10] = I[11], \
I[12] = I[13], I[13] = I[14], I[14] = I[15], \
_p1##x = x++, ++_n1##x, ++_n2##x)
#define cimg_for_in4x4(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in4((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \
_n2##x = (int)( \
(I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[4] = (T)(img)(_p1##x,y,z,c)), \
(I[8] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[12] = (T)(img)(_p1##x,_n2##y,z,c)), \
(I[1] = (T)(img)(x,_p1##y,z,c)), \
(I[5] = (T)(img)(x,y,z,c)), \
(I[9] = (T)(img)(x,_n1##y,z,c)), \
(I[13] = (T)(img)(x,_n2##y,z,c)), \
(I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[6] = (T)(img)(_n1##x,y,z,c)), \
(I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \
x + 2>=(int)(img)._width?(img).width() - 1:x + 2); \
x<=(int)(x1) && ((_n2##x<(img).width() && ( \
(I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[7] = (T)(img)(_n2##x,y,z,c)), \
(I[11] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[15] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \
_n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], \
I[4] = I[5], I[5] = I[6], I[6] = I[7], \
I[8] = I[9], I[9] = I[10], I[10] = I[11], \
I[12] = I[13], I[13] = I[14], I[14] = I[15], \
_p1##x = x++, ++_n1##x, ++_n2##x)
#define cimg_for5x5(img,x,y,z,c,I,T) \
cimg_for5((img)._height,y) for (int x = 0, \
_p2##x = 0, _p1##x = 0, \
_n1##x = 1>=(img)._width?(img).width() - 1:1, \
_n2##x = (int)( \
(I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[5] = I[6] = I[7] = (T)(img)(0,_p1##y,z,c)), \
(I[10] = I[11] = I[12] = (T)(img)(0,y,z,c)), \
(I[15] = I[16] = I[17] = (T)(img)(0,_n1##y,z,c)), \
(I[20] = I[21] = I[22] = (T)(img)(0,_n2##y,z,c)), \
(I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[8] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[13] = (T)(img)(_n1##x,y,z,c)), \
(I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \
2>=(img)._width?(img).width() - 1:2); \
(_n2##x<(img).width() && ( \
(I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[14] = (T)(img)(_n2##x,y,z,c)), \
(I[19] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[24] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \
_n1##x==--_n2##x || x==(_n2##x = --_n1##x); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \
I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \
I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \
I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \
I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \
_p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x)
#define cimg_for_in5x5(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in5((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p2##x = x - 2<0?0:x - 2, \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \
_n2##x = (int)( \
(I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[5] = (T)(img)(_p2##x,_p1##y,z,c)), \
(I[10] = (T)(img)(_p2##x,y,z,c)), \
(I[15] = (T)(img)(_p2##x,_n1##y,z,c)), \
(I[20] = (T)(img)(_p2##x,_n2##y,z,c)), \
(I[1] = (T)(img)(_p1##x,_p2##y,z,c)), \
(I[6] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[11] = (T)(img)(_p1##x,y,z,c)), \
(I[16] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[21] = (T)(img)(_p1##x,_n2##y,z,c)), \
(I[2] = (T)(img)(x,_p2##y,z,c)), \
(I[7] = (T)(img)(x,_p1##y,z,c)), \
(I[12] = (T)(img)(x,y,z,c)), \
(I[17] = (T)(img)(x,_n1##y,z,c)), \
(I[22] = (T)(img)(x,_n2##y,z,c)), \
(I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[8] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[13] = (T)(img)(_n1##x,y,z,c)), \
(I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \
x + 2>=(int)(img)._width?(img).width() - 1:x + 2); \
x<=(int)(x1) && ((_n2##x<(img).width() && ( \
(I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[14] = (T)(img)(_n2##x,y,z,c)), \
(I[19] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[24] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \
_n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \
I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \
I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \
I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \
I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \
_p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x)
#define cimg_for6x6(img,x,y,z,c,I,T) \
cimg_for6((img)._height,y) for (int x = 0, \
_p2##x = 0, _p1##x = 0, \
_n1##x = 1>=(img)._width?(img).width() - 1:1, \
_n2##x = 2>=(img)._width?(img).width() - 1:2, \
_n3##x = (int)( \
(I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[6] = I[7] = I[8] = (T)(img)(0,_p1##y,z,c)), \
(I[12] = I[13] = I[14] = (T)(img)(0,y,z,c)), \
(I[18] = I[19] = I[20] = (T)(img)(0,_n1##y,z,c)), \
(I[24] = I[25] = I[26] = (T)(img)(0,_n2##y,z,c)), \
(I[30] = I[31] = I[32] = (T)(img)(0,_n3##y,z,c)), \
(I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[9] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[15] = (T)(img)(_n1##x,y,z,c)), \
(I[21] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[27] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[33] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[10] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[16] = (T)(img)(_n2##x,y,z,c)), \
(I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \
3>=(img)._width?(img).width() - 1:3); \
(_n3##x<(img).width() && ( \
(I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[17] = (T)(img)(_n3##x,y,z,c)), \
(I[23] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[29] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[35] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \
_n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \
I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \
I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \
I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \
I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \
_p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
#define cimg_for_in6x6(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in6((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)x0, \
_p2##x = x - 2<0?0:x - 2, \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \
_n2##x = x + 2>=(int)(img)._width?(img).width() - 1:x + 2, \
_n3##x = (int)( \
(I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[6] = (T)(img)(_p2##x,_p1##y,z,c)), \
(I[12] = (T)(img)(_p2##x,y,z,c)), \
(I[18] = (T)(img)(_p2##x,_n1##y,z,c)), \
(I[24] = (T)(img)(_p2##x,_n2##y,z,c)), \
(I[30] = (T)(img)(_p2##x,_n3##y,z,c)), \
(I[1] = (T)(img)(_p1##x,_p2##y,z,c)), \
(I[7] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[13] = (T)(img)(_p1##x,y,z,c)), \
(I[19] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[25] = (T)(img)(_p1##x,_n2##y,z,c)), \
(I[31] = (T)(img)(_p1##x,_n3##y,z,c)), \
(I[2] = (T)(img)(x,_p2##y,z,c)), \
(I[8] = (T)(img)(x,_p1##y,z,c)), \
(I[14] = (T)(img)(x,y,z,c)), \
(I[20] = (T)(img)(x,_n1##y,z,c)), \
(I[26] = (T)(img)(x,_n2##y,z,c)), \
(I[32] = (T)(img)(x,_n3##y,z,c)), \
(I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[9] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[15] = (T)(img)(_n1##x,y,z,c)), \
(I[21] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[27] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[33] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[10] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[16] = (T)(img)(_n2##x,y,z,c)), \
(I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \
x + 3>=(int)(img)._width?(img).width() - 1:x + 3); \
x<=(int)(x1) && ((_n3##x<(img).width() && ( \
(I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[17] = (T)(img)(_n3##x,y,z,c)), \
(I[23] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[29] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[35] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \
_n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x)); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \
I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \
I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \
I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \
I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \
_p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
#define cimg_for7x7(img,x,y,z,c,I,T) \
cimg_for7((img)._height,y) for (int x = 0, \
_p3##x = 0, _p2##x = 0, _p1##x = 0, \
_n1##x = 1>=(img)._width?(img).width() - 1:1, \
_n2##x = 2>=(img)._width?(img).width() - 1:2, \
_n3##x = (int)( \
(I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \
(I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p2##y,z,c)), \
(I[14] = I[15] = I[16] = I[17] = (T)(img)(0,_p1##y,z,c)), \
(I[21] = I[22] = I[23] = I[24] = (T)(img)(0,y,z,c)), \
(I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_n1##y,z,c)), \
(I[35] = I[36] = I[37] = I[38] = (T)(img)(0,_n2##y,z,c)), \
(I[42] = I[43] = I[44] = I[45] = (T)(img)(0,_n3##y,z,c)), \
(I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \
(I[11] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[25] = (T)(img)(_n1##x,y,z,c)), \
(I[32] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[39] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[46] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \
(I[12] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[26] = (T)(img)(_n2##x,y,z,c)), \
(I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \
3>=(img)._width?(img).width() - 1:3); \
(_n3##x<(img).width() && ( \
(I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \
(I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[20] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[27] = (T)(img)(_n3##x,y,z,c)), \
(I[34] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[41] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[48] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \
_n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \
I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \
I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \
I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \
I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \
I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \
I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \
_p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
#define cimg_for_in7x7(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in7((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p3##x = x - 3<0?0:x - 3, \
_p2##x = x - 2<0?0:x - 2, \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \
_n2##x = x + 2>=(int)(img)._width?(img).width() - 1:x + 2, \
_n3##x = (int)( \
(I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \
(I[7] = (T)(img)(_p3##x,_p2##y,z,c)), \
(I[14] = (T)(img)(_p3##x,_p1##y,z,c)), \
(I[21] = (T)(img)(_p3##x,y,z,c)), \
(I[28] = (T)(img)(_p3##x,_n1##y,z,c)), \
(I[35] = (T)(img)(_p3##x,_n2##y,z,c)), \
(I[42] = (T)(img)(_p3##x,_n3##y,z,c)), \
(I[1] = (T)(img)(_p2##x,_p3##y,z,c)), \
(I[8] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[15] = (T)(img)(_p2##x,_p1##y,z,c)), \
(I[22] = (T)(img)(_p2##x,y,z,c)), \
(I[29] = (T)(img)(_p2##x,_n1##y,z,c)), \
(I[36] = (T)(img)(_p2##x,_n2##y,z,c)), \
(I[43] = (T)(img)(_p2##x,_n3##y,z,c)), \
(I[2] = (T)(img)(_p1##x,_p3##y,z,c)), \
(I[9] = (T)(img)(_p1##x,_p2##y,z,c)), \
(I[16] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[23] = (T)(img)(_p1##x,y,z,c)), \
(I[30] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[37] = (T)(img)(_p1##x,_n2##y,z,c)), \
(I[44] = (T)(img)(_p1##x,_n3##y,z,c)), \
(I[3] = (T)(img)(x,_p3##y,z,c)), \
(I[10] = (T)(img)(x,_p2##y,z,c)), \
(I[17] = (T)(img)(x,_p1##y,z,c)), \
(I[24] = (T)(img)(x,y,z,c)), \
(I[31] = (T)(img)(x,_n1##y,z,c)), \
(I[38] = (T)(img)(x,_n2##y,z,c)), \
(I[45] = (T)(img)(x,_n3##y,z,c)), \
(I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \
(I[11] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[25] = (T)(img)(_n1##x,y,z,c)), \
(I[32] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[39] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[46] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \
(I[12] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[26] = (T)(img)(_n2##x,y,z,c)), \
(I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \
x + 3>=(int)(img)._width?(img).width() - 1:x + 3); \
x<=(int)(x1) && ((_n3##x<(img).width() && ( \
(I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \
(I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[20] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[27] = (T)(img)(_n3##x,y,z,c)), \
(I[34] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[41] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[48] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \
_n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x)); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \
I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \
I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \
I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \
I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \
I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \
I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \
_p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x)
#define cimg_for8x8(img,x,y,z,c,I,T) \
cimg_for8((img)._height,y) for (int x = 0, \
_p3##x = 0, _p2##x = 0, _p1##x = 0, \
_n1##x = 1>=((img)._width)?(img).width() - 1:1, \
_n2##x = 2>=((img)._width)?(img).width() - 1:2, \
_n3##x = 3>=((img)._width)?(img).width() - 1:3, \
_n4##x = (int)( \
(I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \
(I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p2##y,z,c)), \
(I[16] = I[17] = I[18] = I[19] = (T)(img)(0,_p1##y,z,c)), \
(I[24] = I[25] = I[26] = I[27] = (T)(img)(0,y,z,c)), \
(I[32] = I[33] = I[34] = I[35] = (T)(img)(0,_n1##y,z,c)), \
(I[40] = I[41] = I[42] = I[43] = (T)(img)(0,_n2##y,z,c)), \
(I[48] = I[49] = I[50] = I[51] = (T)(img)(0,_n3##y,z,c)), \
(I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_n4##y,z,c)), \
(I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \
(I[12] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[20] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[28] = (T)(img)(_n1##x,y,z,c)), \
(I[36] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[44] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[52] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[60] = (T)(img)(_n1##x,_n4##y,z,c)), \
(I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \
(I[13] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[21] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[29] = (T)(img)(_n2##x,y,z,c)), \
(I[37] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[45] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[53] = (T)(img)(_n2##x,_n3##y,z,c)), \
(I[61] = (T)(img)(_n2##x,_n4##y,z,c)), \
(I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \
(I[14] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[22] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[30] = (T)(img)(_n3##x,y,z,c)), \
(I[38] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \
(I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \
4>=((img)._width)?(img).width() - 1:4); \
(_n4##x<(img).width() && ( \
(I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \
(I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \
(I[23] = (T)(img)(_n4##x,_p1##y,z,c)), \
(I[31] = (T)(img)(_n4##x,y,z,c)), \
(I[39] = (T)(img)(_n4##x,_n1##y,z,c)), \
(I[47] = (T)(img)(_n4##x,_n2##y,z,c)), \
(I[55] = (T)(img)(_n4##x,_n3##y,z,c)), \
(I[63] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \
_n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \
I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \
I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \
I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \
I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \
I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \
I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \
_p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
#define cimg_for_in8x8(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in8((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p3##x = x - 3<0?0:x - 3, \
_p2##x = x - 2<0?0:x - 2, \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = x + 1>=(img).width()?(img).width() - 1:x + 1, \
_n2##x = x + 2>=(img).width()?(img).width() - 1:x + 2, \
_n3##x = x + 3>=(img).width()?(img).width() - 1:x + 3, \
_n4##x = (int)( \
(I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \
(I[8] = (T)(img)(_p3##x,_p2##y,z,c)), \
(I[16] = (T)(img)(_p3##x,_p1##y,z,c)), \
(I[24] = (T)(img)(_p3##x,y,z,c)), \
(I[32] = (T)(img)(_p3##x,_n1##y,z,c)), \
(I[40] = (T)(img)(_p3##x,_n2##y,z,c)), \
(I[48] = (T)(img)(_p3##x,_n3##y,z,c)), \
(I[56] = (T)(img)(_p3##x,_n4##y,z,c)), \
(I[1] = (T)(img)(_p2##x,_p3##y,z,c)), \
(I[9] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[17] = (T)(img)(_p2##x,_p1##y,z,c)), \
(I[25] = (T)(img)(_p2##x,y,z,c)), \
(I[33] = (T)(img)(_p2##x,_n1##y,z,c)), \
(I[41] = (T)(img)(_p2##x,_n2##y,z,c)), \
(I[49] = (T)(img)(_p2##x,_n3##y,z,c)), \
(I[57] = (T)(img)(_p2##x,_n4##y,z,c)), \
(I[2] = (T)(img)(_p1##x,_p3##y,z,c)), \
(I[10] = (T)(img)(_p1##x,_p2##y,z,c)), \
(I[18] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[26] = (T)(img)(_p1##x,y,z,c)), \
(I[34] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[42] = (T)(img)(_p1##x,_n2##y,z,c)), \
(I[50] = (T)(img)(_p1##x,_n3##y,z,c)), \
(I[58] = (T)(img)(_p1##x,_n4##y,z,c)), \
(I[3] = (T)(img)(x,_p3##y,z,c)), \
(I[11] = (T)(img)(x,_p2##y,z,c)), \
(I[19] = (T)(img)(x,_p1##y,z,c)), \
(I[27] = (T)(img)(x,y,z,c)), \
(I[35] = (T)(img)(x,_n1##y,z,c)), \
(I[43] = (T)(img)(x,_n2##y,z,c)), \
(I[51] = (T)(img)(x,_n3##y,z,c)), \
(I[59] = (T)(img)(x,_n4##y,z,c)), \
(I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \
(I[12] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[20] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[28] = (T)(img)(_n1##x,y,z,c)), \
(I[36] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[44] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[52] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[60] = (T)(img)(_n1##x,_n4##y,z,c)), \
(I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \
(I[13] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[21] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[29] = (T)(img)(_n2##x,y,z,c)), \
(I[37] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[45] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[53] = (T)(img)(_n2##x,_n3##y,z,c)), \
(I[61] = (T)(img)(_n2##x,_n4##y,z,c)), \
(I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \
(I[14] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[22] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[30] = (T)(img)(_n3##x,y,z,c)), \
(I[38] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \
(I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \
x + 4>=(img).width()?(img).width() - 1:x + 4); \
x<=(int)(x1) && ((_n4##x<(img).width() && ( \
(I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \
(I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \
(I[23] = (T)(img)(_n4##x,_p1##y,z,c)), \
(I[31] = (T)(img)(_n4##x,y,z,c)), \
(I[39] = (T)(img)(_n4##x,_n1##y,z,c)), \
(I[47] = (T)(img)(_n4##x,_n2##y,z,c)), \
(I[55] = (T)(img)(_n4##x,_n3##y,z,c)), \
(I[63] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \
_n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \
I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \
I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \
I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \
I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \
I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \
I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \
I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \
_p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
#define cimg_for9x9(img,x,y,z,c,I,T) \
cimg_for9((img)._height,y) for (int x = 0, \
_p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \
_n1##x = 1>=((img)._width)?(img).width() - 1:1, \
_n2##x = 2>=((img)._width)?(img).width() - 1:2, \
_n3##x = 3>=((img)._width)?(img).width() - 1:3, \
_n4##x = (int)( \
(I[0] = I[1] = I[2] = I[3] = I[4] = (T)(img)(_p4##x,_p4##y,z,c)), \
(I[9] = I[10] = I[11] = I[12] = I[13] = (T)(img)(0,_p3##y,z,c)), \
(I[18] = I[19] = I[20] = I[21] = I[22] = (T)(img)(0,_p2##y,z,c)), \
(I[27] = I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_p1##y,z,c)), \
(I[36] = I[37] = I[38] = I[39] = I[40] = (T)(img)(0,y,z,c)), \
(I[45] = I[46] = I[47] = I[48] = I[49] = (T)(img)(0,_n1##y,z,c)), \
(I[54] = I[55] = I[56] = I[57] = I[58] = (T)(img)(0,_n2##y,z,c)), \
(I[63] = I[64] = I[65] = I[66] = I[67] = (T)(img)(0,_n3##y,z,c)), \
(I[72] = I[73] = I[74] = I[75] = I[76] = (T)(img)(0,_n4##y,z,c)), \
(I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \
(I[14] = (T)(img)(_n1##x,_p3##y,z,c)), \
(I[23] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[32] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[41] = (T)(img)(_n1##x,y,z,c)), \
(I[50] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[59] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[68] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[77] = (T)(img)(_n1##x,_n4##y,z,c)), \
(I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \
(I[15] = (T)(img)(_n2##x,_p3##y,z,c)), \
(I[24] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[33] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[42] = (T)(img)(_n2##x,y,z,c)), \
(I[51] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[60] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[69] = (T)(img)(_n2##x,_n3##y,z,c)), \
(I[78] = (T)(img)(_n2##x,_n4##y,z,c)), \
(I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \
(I[16] = (T)(img)(_n3##x,_p3##y,z,c)), \
(I[25] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[34] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[43] = (T)(img)(_n3##x,y,z,c)), \
(I[52] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \
(I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \
4>=((img)._width)?(img).width() - 1:4); \
(_n4##x<(img).width() && ( \
(I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \
(I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \
(I[26] = (T)(img)(_n4##x,_p2##y,z,c)), \
(I[35] = (T)(img)(_n4##x,_p1##y,z,c)), \
(I[44] = (T)(img)(_n4##x,y,z,c)), \
(I[53] = (T)(img)(_n4##x,_n1##y,z,c)), \
(I[62] = (T)(img)(_n4##x,_n2##y,z,c)), \
(I[71] = (T)(img)(_n4##x,_n3##y,z,c)), \
(I[80] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \
_n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \
I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], \
I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \
I[24] = I[25], I[25] = I[26], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], \
I[32] = I[33], I[33] = I[34], I[34] = I[35], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], \
I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[45] = I[46], I[46] = I[47], I[47] = I[48], \
I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[54] = I[55], I[55] = I[56], \
I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[63] = I[64], \
I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \
I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \
I[79] = I[80], \
_p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
#define cimg_for_in9x9(img,x0,y0,x1,y1,x,y,z,c,I,T) \
cimg_for_in9((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p4##x = x - 4<0?0:x - 4, \
_p3##x = x - 3<0?0:x - 3, \
_p2##x = x - 2<0?0:x - 2, \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = x + 1>=(img).width()?(img).width() - 1:x + 1, \
_n2##x = x + 2>=(img).width()?(img).width() - 1:x + 2, \
_n3##x = x + 3>=(img).width()?(img).width() - 1:x + 3, \
_n4##x = (int)( \
(I[0] = (T)(img)(_p4##x,_p4##y,z,c)), \
(I[9] = (T)(img)(_p4##x,_p3##y,z,c)), \
(I[18] = (T)(img)(_p4##x,_p2##y,z,c)), \
(I[27] = (T)(img)(_p4##x,_p1##y,z,c)), \
(I[36] = (T)(img)(_p4##x,y,z,c)), \
(I[45] = (T)(img)(_p4##x,_n1##y,z,c)), \
(I[54] = (T)(img)(_p4##x,_n2##y,z,c)), \
(I[63] = (T)(img)(_p4##x,_n3##y,z,c)), \
(I[72] = (T)(img)(_p4##x,_n4##y,z,c)), \
(I[1] = (T)(img)(_p3##x,_p4##y,z,c)), \
(I[10] = (T)(img)(_p3##x,_p3##y,z,c)), \
(I[19] = (T)(img)(_p3##x,_p2##y,z,c)), \
(I[28] = (T)(img)(_p3##x,_p1##y,z,c)), \
(I[37] = (T)(img)(_p3##x,y,z,c)), \
(I[46] = (T)(img)(_p3##x,_n1##y,z,c)), \
(I[55] = (T)(img)(_p3##x,_n2##y,z,c)), \
(I[64] = (T)(img)(_p3##x,_n3##y,z,c)), \
(I[73] = (T)(img)(_p3##x,_n4##y,z,c)), \
(I[2] = (T)(img)(_p2##x,_p4##y,z,c)), \
(I[11] = (T)(img)(_p2##x,_p3##y,z,c)), \
(I[20] = (T)(img)(_p2##x,_p2##y,z,c)), \
(I[29] = (T)(img)(_p2##x,_p1##y,z,c)), \
(I[38] = (T)(img)(_p2##x,y,z,c)), \
(I[47] = (T)(img)(_p2##x,_n1##y,z,c)), \
(I[56] = (T)(img)(_p2##x,_n2##y,z,c)), \
(I[65] = (T)(img)(_p2##x,_n3##y,z,c)), \
(I[74] = (T)(img)(_p2##x,_n4##y,z,c)), \
(I[3] = (T)(img)(_p1##x,_p4##y,z,c)), \
(I[12] = (T)(img)(_p1##x,_p3##y,z,c)), \
(I[21] = (T)(img)(_p1##x,_p2##y,z,c)), \
(I[30] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[39] = (T)(img)(_p1##x,y,z,c)), \
(I[48] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[57] = (T)(img)(_p1##x,_n2##y,z,c)), \
(I[66] = (T)(img)(_p1##x,_n3##y,z,c)), \
(I[75] = (T)(img)(_p1##x,_n4##y,z,c)), \
(I[4] = (T)(img)(x,_p4##y,z,c)), \
(I[13] = (T)(img)(x,_p3##y,z,c)), \
(I[22] = (T)(img)(x,_p2##y,z,c)), \
(I[31] = (T)(img)(x,_p1##y,z,c)), \
(I[40] = (T)(img)(x,y,z,c)), \
(I[49] = (T)(img)(x,_n1##y,z,c)), \
(I[58] = (T)(img)(x,_n2##y,z,c)), \
(I[67] = (T)(img)(x,_n3##y,z,c)), \
(I[76] = (T)(img)(x,_n4##y,z,c)), \
(I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \
(I[14] = (T)(img)(_n1##x,_p3##y,z,c)), \
(I[23] = (T)(img)(_n1##x,_p2##y,z,c)), \
(I[32] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[41] = (T)(img)(_n1##x,y,z,c)), \
(I[50] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[59] = (T)(img)(_n1##x,_n2##y,z,c)), \
(I[68] = (T)(img)(_n1##x,_n3##y,z,c)), \
(I[77] = (T)(img)(_n1##x,_n4##y,z,c)), \
(I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \
(I[15] = (T)(img)(_n2##x,_p3##y,z,c)), \
(I[24] = (T)(img)(_n2##x,_p2##y,z,c)), \
(I[33] = (T)(img)(_n2##x,_p1##y,z,c)), \
(I[42] = (T)(img)(_n2##x,y,z,c)), \
(I[51] = (T)(img)(_n2##x,_n1##y,z,c)), \
(I[60] = (T)(img)(_n2##x,_n2##y,z,c)), \
(I[69] = (T)(img)(_n2##x,_n3##y,z,c)), \
(I[78] = (T)(img)(_n2##x,_n4##y,z,c)), \
(I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \
(I[16] = (T)(img)(_n3##x,_p3##y,z,c)), \
(I[25] = (T)(img)(_n3##x,_p2##y,z,c)), \
(I[34] = (T)(img)(_n3##x,_p1##y,z,c)), \
(I[43] = (T)(img)(_n3##x,y,z,c)), \
(I[52] = (T)(img)(_n3##x,_n1##y,z,c)), \
(I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \
(I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \
(I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \
x + 4>=(img).width()?(img).width() - 1:x + 4); \
x<=(int)(x1) && ((_n4##x<(img).width() && ( \
(I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \
(I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \
(I[26] = (T)(img)(_n4##x,_p2##y,z,c)), \
(I[35] = (T)(img)(_n4##x,_p1##y,z,c)), \
(I[44] = (T)(img)(_n4##x,y,z,c)), \
(I[53] = (T)(img)(_n4##x,_n1##y,z,c)), \
(I[62] = (T)(img)(_n4##x,_n2##y,z,c)), \
(I[71] = (T)(img)(_n4##x,_n3##y,z,c)), \
(I[80] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \
_n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \
I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \
I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], \
I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \
I[24] = I[25], I[25] = I[26], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], \
I[32] = I[33], I[33] = I[34], I[34] = I[35], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], \
I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[45] = I[46], I[46] = I[47], I[47] = I[48], \
I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[54] = I[55], I[55] = I[56], \
I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[63] = I[64], \
I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \
I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \
I[79] = I[80], \
_p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x)
#define cimg_for2x2x2(img,x,y,z,c,I,T) \
cimg_for2((img)._depth,z) cimg_for2((img)._height,y) for (int x = 0, \
_n1##x = (int)( \
(I[0] = (T)(img)(0,y,z,c)), \
(I[2] = (T)(img)(0,_n1##y,z,c)), \
(I[4] = (T)(img)(0,y,_n1##z,c)), \
(I[6] = (T)(img)(0,_n1##y,_n1##z,c)), \
1>=(img)._width?(img).width() - 1:1); \
(_n1##x<(img).width() && ( \
(I[1] = (T)(img)(_n1##x,y,z,c)), \
(I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[5] = (T)(img)(_n1##x,y,_n1##z,c)), \
(I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \
x==--_n1##x; \
I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \
++x, ++_n1##x)
#define cimg_for_in2x2x2(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \
cimg_for_in2((img)._depth,z0,z1,z) cimg_for_in2((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_n1##x = (int)( \
(I[0] = (T)(img)(x,y,z,c)), \
(I[2] = (T)(img)(x,_n1##y,z,c)), \
(I[4] = (T)(img)(x,y,_n1##z,c)), \
(I[6] = (T)(img)(x,_n1##y,_n1##z,c)), \
x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \
x<=(int)(x1) && ((_n1##x<(img).width() && ( \
(I[1] = (T)(img)(_n1##x,y,z,c)), \
(I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[5] = (T)(img)(_n1##x,y,_n1##z,c)), \
(I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \
x==--_n1##x); \
I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \
++x, ++_n1##x)
#define cimg_for3x3x3(img,x,y,z,c,I,T) \
cimg_for3((img)._depth,z) cimg_for3((img)._height,y) for (int x = 0, \
_p1##x = 0, \
_n1##x = (int)( \
(I[0] = I[1] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \
(I[3] = I[4] = (T)(img)(0,y,_p1##z,c)), \
(I[6] = I[7] = (T)(img)(0,_n1##y,_p1##z,c)), \
(I[9] = I[10] = (T)(img)(0,_p1##y,z,c)), \
(I[12] = I[13] = (T)(img)(0,y,z,c)), \
(I[15] = I[16] = (T)(img)(0,_n1##y,z,c)), \
(I[18] = I[19] = (T)(img)(0,_p1##y,_n1##z,c)), \
(I[21] = I[22] = (T)(img)(0,y,_n1##z,c)), \
(I[24] = I[25] = (T)(img)(0,_n1##y,_n1##z,c)), \
1>=(img)._width?(img).width() - 1:1); \
(_n1##x<(img).width() && ( \
(I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \
(I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \
(I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \
(I[11] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[14] = (T)(img)(_n1##x,y,z,c)), \
(I[17] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \
(I[23] = (T)(img)(_n1##x,y,_n1##z,c)), \
(I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \
x==--_n1##x; \
I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \
I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \
I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \
_p1##x = x++, ++_n1##x)
#define cimg_for_in3x3x3(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \
cimg_for_in3((img)._depth,z0,z1,z) cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \
_p1##x = x - 1<0?0:x - 1, \
_n1##x = (int)( \
(I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \
(I[3] = (T)(img)(_p1##x,y,_p1##z,c)), \
(I[6] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \
(I[9] = (T)(img)(_p1##x,_p1##y,z,c)), \
(I[12] = (T)(img)(_p1##x,y,z,c)), \
(I[15] = (T)(img)(_p1##x,_n1##y,z,c)), \
(I[18] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \
(I[21] = (T)(img)(_p1##x,y,_n1##z,c)), \
(I[24] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \
(I[1] = (T)(img)(x,_p1##y,_p1##z,c)), \
(I[4] = (T)(img)(x,y,_p1##z,c)), \
(I[7] = (T)(img)(x,_n1##y,_p1##z,c)), \
(I[10] = (T)(img)(x,_p1##y,z,c)), \
(I[13] = (T)(img)(x,y,z,c)), \
(I[16] = (T)(img)(x,_n1##y,z,c)), \
(I[19] = (T)(img)(x,_p1##y,_n1##z,c)), \
(I[22] = (T)(img)(x,y,_n1##z,c)), \
(I[25] = (T)(img)(x,_n1##y,_n1##z,c)), \
x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \
x<=(int)(x1) && ((_n1##x<(img).width() && ( \
(I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \
(I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \
(I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \
(I[11] = (T)(img)(_n1##x,_p1##y,z,c)), \
(I[14] = (T)(img)(_n1##x,y,z,c)), \
(I[17] = (T)(img)(_n1##x,_n1##y,z,c)), \
(I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \
(I[23] = (T)(img)(_n1##x,y,_n1##z,c)), \
(I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \
x==--_n1##x); \
I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \
I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \
I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \
_p1##x = x++, ++_n1##x)
#define cimglist_for(list,l) for (int l = 0; l<(int)(list)._width; ++l)
#define cimglist_rof(list,l) for (int l = (int)(list)._width - 1; l>=0; --l)
#define cimglist_for_in(list,l0,l1,l) \
for (int l = (int)(l0)<0?0:(int)(l0), _max##l = (unsigned int)l1<(list)._width?(int)(l1):(int)(list)._width - 1; \
l<=_max##l; ++l)
#define cimglist_apply(list,fn) cimglist_for(list,__##fn) (list)[__##fn].fn
// Macros used to display error messages when exceptions are thrown.
// You should not use these macros is your own code.
#define _cimgdisplay_instance "[instance(%u,%u,%u,%c%s%c)] CImgDisplay::"
#define cimgdisplay_instance _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']'
#define _cimg_instance "[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::"
#define cimg_instance _width,_height,_depth,_spectrum,_data,_is_shared?"carview.php?tsp=":"non-",pixel_type()
#define _cimglist_instance "[instance(%u,%u,%p)] CImgList<%s>::"
#define cimglist_instance _width,_allocated_width,_data,pixel_type()
/*------------------------------------------------
#
#
# Define cimg_library:: namespace
#
#
-------------------------------------------------*/
//! Contains all classes and functions of the \CImg library.
/**
This namespace is defined to avoid functions and class names collisions
that could happen with the inclusion of other C++ header files.
Anyway, it should not happen often and you should reasonably start most of your
\CImg-based programs with
\code
#include "CImg.h"
using namespace cimg_library;
\endcode
to simplify the declaration of \CImg Library objects afterwards.
**/
namespace cimg_library {
// Declare the four classes of the CImg Library.
template struct CImg;
template struct CImgList;
struct CImgDisplay;
struct CImgException;
// Declare cimg:: namespace.
// This is an incomplete namespace definition here. It only contains some stuff to ensure a correct declaration order
// of the classes and functions defined afterwards.
namespace cimg {
// Define character sequences for colored terminal output.
#ifdef cimg_use_vt100
static const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 };
static const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 };
static const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 };
static const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 };
static const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 };
static const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 };
static const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 };
static const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 };
static const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 };
static const char t_bold[] = { 0x1b, '[', '1', 'm', 0 };
static const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 };
#else
static const char t_normal[] = { 0 };
static const char *const t_black = cimg::t_normal,
*const t_red = cimg::t_normal,
*const t_green = cimg::t_normal,
*const t_yellow = cimg::t_normal,
*const t_blue = cimg::t_normal,
*const t_magenta = cimg::t_normal,
*const t_cyan = cimg::t_normal,
*const t_white = cimg::t_normal,
*const t_bold = cimg::t_normal,
*const t_underscore = cimg::t_normal;
#endif
inline std::FILE* output(std::FILE *file=0);
inline void info();
//! Avoid warning messages due to unused parameters. Do nothing actually.
template
inline void unused(const T&, ...) {}
// [internal] Lock/unlock a mutex for managing concurrent threads.
// 'lock_mode' can be { 0=unlock | 1=lock | 2=trylock }.
// 'n' can be in [0,31] but mutex range [0,15] is reserved by CImg.
inline int mutex(const unsigned int n, const int lock_mode=1);
inline unsigned int& exception_mode(const unsigned int value, const bool is_set) {
static unsigned int mode = cimg_verbosity;
if (is_set) { cimg::mutex(0); mode = value<4?value:4; cimg::mutex(0,0); }
return mode;
}
// Functions to return standard streams 'stdin', 'stdout' and 'stderr'.
inline FILE* _stdin(const bool throw_exception=true);
inline FILE* _stdout(const bool throw_exception=true);
inline FILE* _stderr(const bool throw_exception=true);
// Mandatory because Microsoft's _snprintf() and _vsnprintf() do not add the '\0' character
// at the end of the string.
#if cimg_OS==2 && defined(_MSC_VER)
inline int _snprintf(char *const s, const size_t size, const char *const format, ...) {
va_list ap;
va_start(ap,format);
const int result = _vsnprintf(s,size,format,ap);
va_end(ap);
return result;
}
inline int _vsnprintf(char *const s, const size_t size, const char *const format, va_list ap) {
int result = -1;
cimg::mutex(6);
if (size) result = _vsnprintf_s(s,size,_TRUNCATE,format,ap);
if (result==-1) result = _vscprintf(format,ap);
cimg::mutex(6,0);
return result;
}
// Mutex-protected version of sscanf, snprintf and vnsprintf.
// Used only MacOSX, as it seems those functions are not re-entrant on MacOSX.
#elif defined(__MACOSX__) || defined(__APPLE__)
inline int _sscanf(const char *const s, const char *const format, ...) {
cimg::mutex(6);
va_list args;
va_start(args,format);
const int result = std::vsscanf(s,format,args);
va_end(args);
cimg::mutex(6,0);
return result;
}
inline int _snprintf(char *const s, const size_t n, const char *const format, ...) {
cimg::mutex(6);
va_list args;
va_start(args,format);
const int result = std::vsnprintf(s,n,format,args);
va_end(args);
cimg::mutex(6,0);
return result;
}
inline int _vsnprintf(char *const s, const size_t size, const char* format, va_list ap) {
cimg::mutex(6);
const int result = std::vsnprintf(s,size,format,ap);
cimg::mutex(6,0);
return result;
}
#endif
//! Set current \CImg exception mode.
/**
The way error messages are handled by \CImg can be changed dynamically, using this function.
\param mode Desired exception mode. Possible values are:
- \c 0: Hide library messages (quiet mode).
- \c 1: Print library messages on the console.
- \c 2: Display library messages on a dialog window.
- \c 3: Do as \c 1 + add extra debug warnings (slow down the code!).
- \c 4: Do as \c 2 + add extra debug warnings (slow down the code!).
**/
inline unsigned int& exception_mode(const unsigned int mode) {
return exception_mode(mode,true);
}
//! Return current \CImg exception mode.
/**
\note By default, return the value of configuration macro \c cimg_verbosity
**/
inline unsigned int& exception_mode() {
return exception_mode(0,false);
}
inline unsigned int openmp_mode(const unsigned int value, const bool is_set) {
#if cimg_use_openmp!=0
static unsigned int mode = 2;
if (is_set) { cimg::mutex(0); mode = value<2?value:2; cimg::mutex(0,0); }
return mode;
#else
cimg::unused(value,is_set);
return 0;
#endif
}
//! Set current \CImg openmp mode.
/**
The way openmp-based methods are handled by \CImg can be changed dynamically, using this function.
\param mode Desired openmp mode. Possible values are:
- \c 0: Never parallelize.
- \c 1: Always parallelize.
- \c 2: Adaptive parallelization mode (default behavior).
**/
inline unsigned int openmp_mode(const unsigned int mode) {
return openmp_mode(mode,true);
}
//! Return current \CImg openmp mode.
inline unsigned int openmp_mode() {
return openmp_mode(0,false);
}
#ifndef cimg_openmp_sizefactor
#define cimg_openmp_sizefactor 1
#endif
#define cimg_openmp_if(cond) if ((cimg::openmp_mode()==1 || (cimg::openmp_mode()>1 && (cond))))
#define cimg_openmp_if_size(size,min_size) cimg_openmp_if((size)>=(cimg_openmp_sizefactor)*(min_size))
#ifdef _MSC_VER
// Disable 'collapse()' directive for MSVC (supports only OpenMP 2.0).
#define cimg_openmp_collapse(k)
#else
#define cimg_openmp_collapse(k) collapse(k)
#endif
#if cimg_OS==2
// Disable parallelization of simple loops on Windows, due to noticed performance drop.
#define cimg_openmp_for(instance,expr,min_size) cimg_rof((instance),ptr,T) *ptr = (T)(expr);
#else
#define cimg_openmp_for(instance,expr,min_size) \
cimg_pragma_openmp(parallel for cimg_openmp_if_size((instance).size(),min_size)) \
cimg_rof((instance),ptr,T) *ptr = (T)(expr);
#endif
// Display a simple dialog box, and wait for the user's response.
inline int dialog(const char *const title, const char *const msg,
const char *const button1_label="OK", const char *const button2_label=0,
const char *const button3_label=0, const char *const button4_label=0,
const char *const button5_label=0, const char *const button6_label=0,
const bool centering=false);
// Evaluate math expression.
inline double eval(const char *const expression,
const double x=0, const double y=0, const double z=0, const double c=0);
} // namespace cimg { ...
/*---------------------------------------
#
# Define the CImgException structures
#
--------------------------------------*/
//! Instances of \c CImgException are thrown when errors are encountered in a \CImg function call.
/**
\par Overview
CImgException is the base class of all exceptions thrown by \CImg (except \b CImgAbortException).
CImgException is never thrown itself. Derived classes that specify the type of errord are thrown instead.
These classes can be:
- \b CImgAbortException: Thrown when a computationally-intensive function is aborted by an external signal.
This is the only \c non-derived exception class.
- \b CImgArgumentException: Thrown when one argument of a called \CImg function is invalid.
This is probably one of the most thrown exception by \CImg.
For instance, the following example throws a \c CImgArgumentException:
\code
CImg img(100,100,1,3); // Define a 100x100 color image with float-valued pixels
img.mirror('e'); // Try to mirror image along the (non-existing) 'e'-axis
\endcode
- \b CImgDisplayException: Thrown when something went wrong during the display of images in CImgDisplay instances.
- \b CImgInstanceException: Thrown when an instance associated to a called \CImg method does not fit
the function requirements. For instance, the following example throws a \c CImgInstanceException:
\code
const CImg img; // Define an empty image
const float value = img.at(0); // Try to read first pixel value (does not exist)
\endcode
- \b CImgIOException: Thrown when an error occurred when trying to load or save image files.
This happens when trying to read files that do not exist or with invalid formats.
For instance, the following example throws a \c CImgIOException:
\code
const CImg img("missing_file.jpg"); // Try to load a file that does not exist
\endcode
- \b CImgWarningException: Thrown only if configuration macro \c cimg_strict_warnings is set, and
when a \CImg function has to display a warning message (see cimg::warn()).
It is not recommended to throw CImgException instances by yourself,
since they are expected to be thrown only by \CImg.
When an error occurs in a library function call, \CImg may display error messages on the screen or on the
standard output, depending on the current \CImg exception mode.
The \CImg exception mode can be get and set by functions cimg::exception_mode() and
cimg::exception_mode(unsigned int).
\par Exceptions handling
In all cases, when an error occurs in \CImg, an instance of the corresponding exception class is thrown.
This may lead the program to break (this is the default behavior), but you can bypass this behavior by
handling the exceptions by yourself,
using a usual try { ... } catch () { ... } block, as in the following example:
\code
#define "CImg.h"
using namespace cimg_library;
int main() {
cimg::exception_mode(0); // Enable quiet exception mode
try {
... // Here, do what you want to stress CImg
} catch (CImgException& e) { // You succeeded: something went wrong!
std::fprintf(stderr,"CImg Library Error: %s",e.what()); // Display your custom error message
... // Do what you want now to save the ship!
}
}
\endcode
**/
struct CImgException : public std::exception {
#define _cimg_exception_err(etype,disp_flag) \
std::va_list ap, ap2; \
va_start(ap,format); va_start(ap2,format); \
int size = cimg_vsnprintf(0,0,format,ap2); \
if (size++>=0) { \
delete[] _message; \
_message = new char[(size_t)size]; \
cimg_vsnprintf(_message,(size_t)size,format,ap); \
if (cimg::exception_mode()) { \
std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,etype,cimg::t_normal,_message); \
if (cimg_display && disp_flag && !(cimg::exception_mode()%2)) try { cimg::dialog(etype,_message,"Abort"); } \
catch (CImgException&) {} \
if (cimg::exception_mode()>=3) cimg_library::cimg::info(); \
} \
} \
va_end(ap); va_end(ap2);
char *_message;
CImgException() { _message = new char[1]; *_message = 0; }
CImgException(const char *const format, ...):_message(0) { _cimg_exception_err("CImgException",true); }
CImgException(const CImgException& e):std::exception(e) {
const size_t size = std::strlen(e._message);
_message = new char[size + 1];
std::strncpy(_message,e._message,size);
_message[size] = 0;
}
~CImgException() throw() { delete[] _message; }
CImgException& operator=(const CImgException& e) {
const size_t size = std::strlen(e._message);
_message = new char[size + 1];
std::strncpy(_message,e._message,size);
_message[size] = 0;
return *this;
}
//! Return a C-string containing the error message associated to the thrown exception.
const char *what() const throw() { return _message; }
}; // struct CImgException { ...
// The CImgAbortException class is used to throw an exception when
// a computationally-intensive function has been aborted by an external signal.
struct CImgAbortException : public std::exception {
char *_message;
CImgAbortException() { _message = new char[1]; *_message = 0; }
CImgAbortException(const char *const format, ...):_message(0) { _cimg_exception_err("CImgAbortException",true); }
CImgAbortException(const CImgAbortException& e):std::exception(e) {
const size_t size = std::strlen(e._message);
_message = new char[size + 1];
std::strncpy(_message,e._message,size);
_message[size] = 0;
}
~CImgAbortException() throw() { delete[] _message; }
CImgAbortException& operator=(const CImgAbortException& e) {
const size_t size = std::strlen(e._message);
_message = new char[size + 1];
std::strncpy(_message,e._message,size);
_message[size] = 0;
return *this;
}
//! Return a C-string containing the error message associated to the thrown exception.
const char *what() const throw() { return _message; }
}; // struct CImgAbortException { ...
// The CImgArgumentException class is used to throw an exception related
// to invalid arguments encountered in a library function call.
struct CImgArgumentException : public CImgException {
CImgArgumentException(const char *const format, ...) { _cimg_exception_err("CImgArgumentException",true); }
}; // struct CImgArgumentException { ...
// The CImgDisplayException class is used to throw an exception related
// to display problems encountered in a library function call.
struct CImgDisplayException : public CImgException {
CImgDisplayException(const char *const format, ...) { _cimg_exception_err("CImgDisplayException",false); }
}; // struct CImgDisplayException { ...
// The CImgInstanceException class is used to throw an exception related
// to an invalid instance encountered in a library function call.
struct CImgInstanceException : public CImgException {
CImgInstanceException(const char *const format, ...) { _cimg_exception_err("CImgInstanceException",true); }
}; // struct CImgInstanceException { ...
// The CImgIOException class is used to throw an exception related
// to input/output file problems encountered in a library function call.
struct CImgIOException : public CImgException {
CImgIOException(const char *const format, ...) { _cimg_exception_err("CImgIOException",true); }
}; // struct CImgIOException { ...
// The CImgWarningException class is used to throw an exception for warnings
// encountered in a library function call.
struct CImgWarningException : public CImgException {
CImgWarningException(const char *const format, ...) { _cimg_exception_err("CImgWarningException",false); }
}; // struct CImgWarningException { ...
/*-------------------------------------
#
# Define cimg:: namespace
#
-----------------------------------*/
//! Contains \a low-level functions and variables of the \CImg Library.
/**
Most of the functions and variables within this namespace are used by the \CImg library for low-level operations.
You may use them to access specific const values or environment variables internally used by \CImg.
\warning Never write using namespace cimg_library::cimg; in your source code. Lot of functions in the
cimg:: namespace have the same names as standard C functions that may be defined in the global
namespace ::.
**/
namespace cimg {
// Define traits that will be used to determine the best data type to work in CImg functions.
//
template struct type {
static const char* string() {
static const char* s[] = { "unknown", "unknown8", "unknown16", "unknown24",
"unknown32", "unknown40", "unknown48", "unknown56",
"unknown64", "unknown72", "unknown80", "unknown88",
"unknown96", "unknown104", "unknown112", "unknown120",
"unknown128" };
return s[(sizeof(T)<17)?sizeof(T):0];
}
static bool is_float() { return false; }
static bool is_inf(const T) { return false; }
static bool is_nan(const T) { return false; }
static bool is_finite(const T) { return true; }
static T min() { return ~max(); }
static T max() { return (T)1<<(8*sizeof(T) - 1); }
static T inf() { return max(); }
static T nan() { return inf(); }
static T cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(T)val; }
static const char* format() { return "%s"; }
static const char* format_s() { return "%s"; }
static const char* format(const T& val) { static const char *const s = "unknown"; cimg::unused(val); return s; }
};
template<> struct type {
static const char* string() {
static const char *const s = "bool";
return s;
}
static bool is_float() { return false; }
static bool is_inf(const bool) { return false; }
static bool is_nan(const bool) { return false; }
static bool is_finite(const bool) { return true; }
static bool min() { return false; }
static bool max() { return true; }
static bool inf() { return max(); }
static bool nan() { return inf(); }
static bool is_inf() { return false; }
static bool cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(bool)val; }
static const char* format() { return "%s"; }
static const char* format_s() { return "%s"; }
static const char* format(const bool val) { static const char* s[] = { "false", "true" }; return s[val?1:0]; }
};
template<> struct type {
static const char* string() { static const char *const s = "uint8"; return s; }
static bool is_float() { return false; }
static bool is_inf(const unsigned char) { return false; }
static bool is_nan(const unsigned char) { return false; }
static bool is_finite(const unsigned char) { return true; }
static unsigned char min() { return 0; }
static unsigned char max() { return (unsigned char)-1; }
static unsigned char inf() { return max(); }
static unsigned char nan() { return inf(); }
static unsigned char cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; }
static const char* format() { return "%u"; }
static const char* format_s() { return "%u"; }
static unsigned int format(const unsigned char val) { return (unsigned int)val; }
};
#if defined(CHAR_MAX) && CHAR_MAX==255
template<> struct type {
static const char* string() { static const char *const s = "uint8"; return s; }
static bool is_float() { return false; }
static bool is_inf(const char) { return false; }
static bool is_nan(const char) { return false; }
static bool is_finite(const char) { return true; }
static char min() { return 0; }
static char max() { return (char)-1; }
static char inf() { return max(); }
static char nan() { return inf(); }
static char cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; }
static const char* format() { return "%u"; }
static const char* format_s() { return "%u"; }
static unsigned int format(const char val) { return (unsigned int)val; }
};
#else
template<> struct type {
static const char* string() { static const char *const s = "int8"; return s; }
static bool is_float() { return false; }
static bool is_inf(const char) { return false; }
static bool is_nan(const char) { return false; }
static bool is_finite(const char) { return true; }
static char min() { return ~max(); }
static char max() { return (char)((unsigned char)-1>>1); }
static char inf() { return max(); }
static char nan() { return inf(); }
static char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(char)val; }
static const char* format() { return "%d"; }
static const char* format_s() { return "%d"; }
static int format(const char val) { return (int)val; }
};
#endif
template<> struct type {
static const char* string() { static const char *const s = "int8"; return s; }
static bool is_float() { return false; }
static bool is_inf(const signed char) { return false; }
static bool is_nan(const signed char) { return false; }
static bool is_finite(const signed char) { return true; }
static signed char min() { return ~max(); }
static signed char max() { return (signed char)((unsigned char)-1>>1); }
static signed char inf() { return max(); }
static signed char nan() { return inf(); }
static signed char cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(signed char)val; }
static const char* format() { return "%d"; }
static const char* format_s() { return "%d"; }
static int format(const signed char val) { return (int)val; }
};
template<> struct type {
static const char* string() { static const char *const s = "uint16"; return s; }
static bool is_float() { return false; }
static bool is_inf(const unsigned short) { return false; }
static bool is_nan(const unsigned short) { return false; }
static bool is_finite(const unsigned short) { return true; }
static unsigned short min() { return 0; }
static unsigned short max() { return (unsigned short)-1; }
static unsigned short inf() { return max(); }
static unsigned short nan() { return inf(); }
static unsigned short cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(unsigned short)val; }
static const char* format() { return "%u"; }
static const char* format_s() { return "%u"; }
static unsigned int format(const unsigned short val) { return (unsigned int)val; }
};
template<> struct type {
static const char* string() { static const char *const s = "int16"; return s; }
static bool is_float() { return false; }
static bool is_inf(const short) { return false; }
static bool is_nan(const short) { return false; }
static bool is_finite(const short) { return true; }
static short min() { return ~max(); }
static short max() { return (short)((unsigned short)-1>>1); }
static short inf() { return max(); }
static short nan() { return inf(); }
static short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(short)val; }
static const char* format() { return "%d"; }
static const char* format_s() { return "%d"; }
static int format(const short val) { return (int)val; }
};
template<> struct type {
static const char* string() { static const char *const s = "uint32"; return s; }
static bool is_float() { return false; }
static bool is_inf(const unsigned int) { return false; }
static bool is_nan(const unsigned int) { return false; }
static bool is_finite(const unsigned int) { return true; }
static unsigned int min() { return 0; }
static unsigned int max() { return (unsigned int)-1; }
static unsigned int inf() { return max(); }
static unsigned int nan() { return inf(); }
static unsigned int cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(unsigned int)val; }
static const char* format() { return "%u"; }
static const char* format_s() { return "%u"; }
static unsigned int format(const unsigned int val) { return val; }
};
template<> struct type {
static const char* string() { static const char *const s = "int32"; return s; }
static bool is_float() { return false; }
static bool is_inf(const int) { return false; }
static bool is_nan(const int) { return false; }
static bool is_finite(const int) { return true; }
static int min() { return ~max(); }
static int max() { return (int)(~0U>>1); }
static int inf() { return max(); }
static int nan() { return inf(); }
static int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(int)val; }
static const char* format() { return "%d"; }
static const char* format_s() { return "%d"; }
static int format(const int val) { return val; }
};
template<> struct type {
static const char* string() { static const char *const s = "uint64"; return s; }
static bool is_float() { return false; }
static bool is_inf(const cimg_uint64) { return false; }
static bool is_nan(const cimg_uint64) { return false; }
static bool is_finite(const cimg_uint64) { return true; }
static cimg_uint64 min() { return 0; }
static cimg_uint64 max() { return (cimg_uint64)-1; }
static cimg_uint64 inf() { return max(); }
static cimg_uint64 nan() { return inf(); }
static cimg_uint64 cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(cimg_uint64)val; }
static const char* format() { return cimg_fuint64; }
static const char* format_s() { return cimg_fuint64; }
static cimg_uint64 format(const cimg_uint64 val) { return val; }
};
template<> struct type {
static const char* string() { static const char *const s = "int64"; return s; }
static bool is_float() { return false; }
static bool is_inf(const cimg_int64) { return false; }
static bool is_nan(const cimg_int64) { return false; }
static bool is_finite(const cimg_int64) { return true; }
static cimg_int64 min() { return ~max(); }
static cimg_int64 max() { return (cimg_int64)((cimg_uint64)-1>>1); }
static cimg_int64 inf() { return max(); }
static cimg_int64 nan() { return inf(); }
static cimg_int64 cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(cimg_int64)val;
}
static const char* format() { return cimg_fint64; }
static const char* format_s() { return cimg_fint64; }
static long format(const long val) { return (long)val; }
};
#if cimg_use_cpp11==1 && \
(!(UINTPTR_MAX==0xffffffff || defined(__arm__) || defined(_M_ARM) || ((ULONG_MAX)==(UINT_MAX))))
template<> struct type {
static const char* string() { static const char *const s = "uint64"; return s; }
static bool is_float() { return false; }
static bool is_inf(const cimg_uint64) { return false; }
static bool is_nan(const cimg_uint64) { return false; }
static bool is_finite(const cimg_uint64) { return true; }
static cimg_uint64 min() { return 0; }
static cimg_uint64 max() { return (cimg_uint64)-1; }
static cimg_uint64 inf() { return max(); }
static cimg_uint64 nan() { return inf(); }
static cimg_uint64 cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(cimg_uint64)val; }
static const char* format() { return cimg_fuint64; }
static const char* format_s() { return cimg_fuint64; }
static cimg_uint64 format(const cimg_uint64 val) { return val; }
};
template<> struct type {
static const char* string() { static const char *const s = "int64"; return s; }
static bool is_float() { return false; }
static bool is_inf(const cimg_int64) { return false; }
static bool is_nan(const cimg_int64) { return false; }
static bool is_finite(const cimg_int64) { return true; }
static long long min() { return ~max(); }
static long long max() { return (cimg_int64)((cimg_uint64)-1>>1); }
static long long inf() { return max(); }
static long long nan() { return max(); }
static long long cut(const double val) {
return val<(double)min()?min():val>(double)max()?max():(cimg_int64)val;
}
static const char* format() { return cimg_fint64; }
static const char* format_s() { return cimg_fint64; }
static long format(const long val) { return (long)val; }
};
#endif
template<> struct type {
static const char* string() { static const char *const s = "float64"; return s; }
static bool is_float() { return true; }
static bool is_inf(const double val) {
#ifdef isinf
return (bool)isinf(val);
#else
return !is_nan(val) && (val::min() || val>cimg::type::max());
#endif
}
static bool is_nan(const double val) { // Custom version that works with '-ffast-math'
if (sizeof(double)==8) {
cimg_uint64 u;
std::memcpy(&u,&val,sizeof(double));
return ((unsigned int)(u>>32)&0x7fffffff) + ((unsigned int)u!=0)>0x7ff00000;
}
#ifdef isnan
return (bool)isnan(val);
#else
return !(val==val);
#endif
}
static bool is_finite(const double val) {
#ifdef isfinite
return (bool)isfinite(val);
#else
return !is_nan(val) && !is_inf(val);
#endif
}
static double min() { return -DBL_MAX; }
static double max() { return DBL_MAX; }
static double inf() {
#ifdef INFINITY
return (double)INFINITY;
#else
return max()*max();
#endif
}
static double nan() {
#ifdef NAN
return (double)NAN;
#else
const double val_nan = -std::sqrt(-1.); return val_nan;
#endif
}
static double cut(const double val) { return val; }
static const char* format() { return "%.17g"; }
static const char* format_s() { return "%g"; }
static double format(const double val) { return val; }
};
template<> struct type {
static const char* string() { static const char *const s = "float32"; return s; }
static bool is_float() { return true; }
static bool is_inf(const float val) {
#ifdef isinf
return (bool)isinf(val);
#else
return !is_nan(val) && (val::min() || val>cimg::type::max());
#endif
}
static bool is_nan(const float val) { // Custom version that works with '-ffast-math'
if (sizeof(float)==4) {
unsigned int u;
std::memcpy(&u,&val,sizeof(float));
return (u&0x7fffffff)>0x7f800000;
}
#ifdef isnan
return (bool)isnan(val);
#else
return !(val==val);
#endif
}
static bool is_finite(const float val) {
#ifdef isfinite
return (bool)isfinite(val);
#else
return !is_nan(val) && !is_inf(val);
#endif
}
static float min() { return -FLT_MAX; }
static float max() { return FLT_MAX; }
static float inf() { return (float)cimg::type::inf(); }
static float nan() { return (float)cimg::type::nan(); }
static float cut(const double val) { return (float)val; }
static float cut(const float val) { return (float)val; }
static const char* format() { return "%.9g"; }
static const char* format_s() { return "%g"; }
static double format(const float val) { return (double)val; }
};
template<> struct type {
static const char* string() { static const char *const s = "float128"; return s; }
static bool is_float() { return true; }
static bool is_inf(const long double val) {
#ifdef isinf
return (bool)isinf(val);
#else
return !is_nan(val) && (val::min() || val>cimg::type::max());
#endif
}
static bool is_nan(const long double val) {
#ifdef isnan
return (bool)isnan(val);
#else
return !(val==val);
#endif
}
static bool is_finite(const long double val) {
#ifdef isfinite
return (bool)isfinite(val);
#else
return !is_nan(val) && !is_inf(val);
#endif
}
static long double min() { return -LDBL_MAX; }
static long double max() { return LDBL_MAX; }
static long double inf() { return max()*max(); }
static long double nan() { const long double val_nan = -std::sqrt(-1.L); return val_nan; }
static long double cut(const long double val) { return val; }
static const char* format() { return "%.17g"; }
static const char* format_s() { return "%g"; }
static double format(const long double val) { return (double)val; }
};
#ifdef cimg_use_half
template<> struct type {
static const char* string() { static const char *const s = "float16"; return s; }
static bool is_float() { return true; }
static bool is_inf(const long double val) {
#ifdef isinf
return (bool)isinf(val);
#else
return !is_nan(val) && (val::min() || val>cimg::type::max());
#endif
}
static bool is_nan(const half val) { // Custom version that works with '-ffast-math'
if (sizeof(half)==2) {
short u;
std::memcpy(&u,&val,sizeof(short));
return (bool)((u&0x7fff)>0x7c00);
}
return cimg::type::is_nan((float)val);
}
static bool is_finite(const half val) {
#ifdef isfinite
return (bool)isfinite(val);
#else
return !is_nan(val) && !is_inf(val);
#endif
}
static half min() { return (half)-65504; }
static half max() { return (half)65504; }
static half inf() { return max()*max(); }
static half nan() { const half val_nan = (half)-std::sqrt(-1.); return val_nan; }
static half cut(const double val) { return (half)val; }
static const char* format() { return "%.9g"; }
static const char* format_s() { return "%g"; }
static double format(const half val) { return (double)val; }
};
#endif
template struct superset { typedef T type; };
template<> struct superset { typedef unsigned char type; };
template<> struct superset { typedef char type; };
template<> struct superset { typedef signed char type; };
template<> struct superset { typedef unsigned short type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef unsigned int type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_uint64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef unsigned short type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef unsigned int type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_uint64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef short type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef unsigned int type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_uint64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef int type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_uint64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
#if cimg_use_cpp11==1 && \
(!(UINTPTR_MAX==0xffffffff || defined(__arm__) || defined(_M_ARM) || ((ULONG_MAX)==(UINT_MAX))))
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef cimg_int64 type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
#endif
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
template<> struct superset { typedef double type; };
#ifdef cimg_use_half
template<> struct superset { typedef float type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef float type; };
template<> struct superset { typedef double type; };
#endif
template struct superset2 {
typedef typename superset::type>::type type;
};
template struct superset3 {
typedef typename superset::type>::type type;
};
template struct last { typedef t2 type; };
#define _cimg_Tt typename cimg::superset::type
#define _cimg_Tfloat typename cimg::superset::type
#define _cimg_tfloat typename cimg::superset::type
#define _cimg_Ttfloat typename cimg::superset2::type
#define _cimg_Ttdouble typename cimg::superset2::type
// Define variables used internally by CImg.
#if cimg_display==1
struct X11_attr {
CImgDisplay **cimg_displays;
unsigned int nb_cimg_displays;
Display *display;
pthread_t *events_thread;
pthread_cond_t wait_event;
pthread_mutex_t mutex_lock_display, mutex_wait_event;
unsigned int nb_bits;
bool is_blue_first, is_shm_enabled, byte_order, events_thread_running;
#ifdef cimg_use_xrandr
XRRScreenSize *resolutions;
Rotation curr_rotation;
unsigned int curr_resolution, nb_resolutions;
#endif
X11_attr():nb_cimg_displays(0),display(0),events_thread(0),nb_bits(0),
is_blue_first(false),is_shm_enabled(false),byte_order(false),events_thread_running(false) {
#ifdef __FreeBSD__
XInitThreads();
#endif
pthread_mutex_init(&mutex_wait_event,0);
pthread_mutex_init(&mutex_lock_display,0);
pthread_cond_init(&wait_event,0);
#ifdef cimg_use_xrandr
resolutions = 0;
curr_rotation = 0;
curr_resolution = nb_resolutions = 0;
#endif
cimg_displays = new CImgDisplay*[512];
}
~X11_attr() {
unlock();
if (events_thread) {
terminate_events_thread();
delete events_thread;
}
pthread_cond_destroy(&wait_event);
pthread_mutex_unlock(&mutex_wait_event);
pthread_mutex_destroy(&mutex_wait_event);
pthread_mutex_unlock(&mutex_lock_display);
pthread_mutex_destroy(&mutex_lock_display);
delete[] cimg_displays;
if (display) { XCloseDisplay(display); }
}
X11_attr& lock() { // Lock display
pthread_mutex_lock(&mutex_lock_display);
return *this;
}
X11_attr& unlock() { // Unlock display
pthread_mutex_unlock(&mutex_lock_display);
return *this;
}
X11_attr& terminate_events_thread() {
events_thread_running = false;
pthread_join(*events_thread,0);
delete events_thread;
events_thread = 0;
return *this;
}
static X11_attr& ref() { // Return shared instance across compilation modules
static X11_attr ref;
return ref;
}
}; // struct X11_attr { ...
#elif cimg_display==2
struct Win32_attr {
HANDLE wait_event;
Win32_attr() {
wait_event = CreateEvent(0,FALSE_WIN,FALSE_WIN,0);
}
static Win32_attr& ref() { // Return shared instance across compilation modules
static Win32_attr ref;
return ref;
}
}; // struct Win32_attr { ...
#elif cimg_display==3
struct SDL3_attr {
CImgDisplay **cimg_displays;
unsigned int nb_cimg_displays;
SDL_DisplayID display;
SDL_ThreadID main_thread_id;
const SDL_DisplayMode *mode;
SDL_Mutex *mutex_lock_display; //, *mutex_wait_event;
SDL3_attr():nb_cimg_displays(0),display(0),mode(0),mutex_lock_display(0) {
bool init_failed = true;
if (SDL_Init(SDL_INIT_VIDEO)) {
display = SDL_GetPrimaryDisplay();
if (display) {
mode = SDL_GetCurrentDisplayMode(display);
if (mode) {
mutex_lock_display = SDL_CreateMutex();
if (mutex_lock_display) init_failed = false;
main_thread_id = SDL_GetCurrentThreadID();
}
}
}
#if cimg_OS==1
std::signal(SIGINT,SIG_DFL); // Restore default behavior for CTRL+C
#endif
if (init_failed)
throw CImgDisplayException("cimg::SDL3_attr(): %s",SDL_GetError());
cimg_displays = new CImgDisplay*[512];
}
~SDL3_attr() {
unlock();
SDL_DestroyMutex(mutex_lock_display);
SDL_Quit();
delete[] cimg_displays;
}
SDL3_attr& lock() { // Lock display
SDL_LockMutex(mutex_lock_display);
return *this;
}
SDL3_attr& unlock() { // Unlock display
SDL_UnlockMutex(mutex_lock_display);
return *this;
}
static SDL3_attr& ref() { // Return shared instance across compilation modules
static SDL3_attr ref;
return ref;
}
}; // struct SDL3_attr { ...
#endif
struct Mutex_attr {
#if cimg_OS==1 && (defined(cimg_use_pthread) || cimg_display==1)
pthread_mutex_t mutex[32];
Mutex_attr() { for (unsigned int i = 0; i<32; ++i) pthread_mutex_init(&mutex[i],0); }
void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); }
void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); }
int trylock(const unsigned int n) { return pthread_mutex_trylock(&mutex[n]); }
#elif cimg_OS==2
HANDLE mutex[32];
Mutex_attr() { for (unsigned int i = 0; i<32; ++i) mutex[i] = CreateMutex(0,FALSE_WIN,0); }
void lock(const unsigned int n) { WaitForSingleObject(mutex[n],INFINITE); }
void unlock(const unsigned int n) { ReleaseMutex(mutex[n]); }
int trylock(const unsigned int) { return 0; }
#else
Mutex_attr() {}
void lock(const unsigned int) {}
void unlock(const unsigned int) {}
int trylock(const unsigned int) { return 0; }
#endif
static Mutex_attr &ref() { // Return shared instance across compilation modules
static Mutex_attr ref;
return ref;
}
}; // struct Mutex_attr { ...
#if defined(cimg_use_magick)
struct Magick_static {
Magick_static() {
Magick::InitializeMagick("carview.php?tsp=");
}
}; // struct Magick_static { ...
static Magick_static _Magick_static;
#endif
#if defined(cimg_use_fftw3) && !defined(cimg_use_fftw3_singlethread)
struct FFTW3_static {
FFTW3_static() {
fftw_init_threads();
}
}; // struct FFTW3_static { ...
static FFTW3_static _FFTW3_static;
#endif
#if cimg_display==1
// Define keycodes for X11-based display (Unix).
const unsigned int keyESC = XK_Escape;
const unsigned int keyF1 = XK_F1;
const unsigned int keyF2 = XK_F2;
const unsigned int keyF3 = XK_F3;
const unsigned int keyF4 = XK_F4;
const unsigned int keyF5 = XK_F5;
const unsigned int keyF6 = XK_F6;
const unsigned int keyF7 = XK_F7;
const unsigned int keyF8 = XK_F8;
const unsigned int keyF9 = XK_F9;
const unsigned int keyF10 = XK_F10;
const unsigned int keyF11 = XK_F11;
const unsigned int keyF12 = XK_F12;
const unsigned int keyPAUSE = XK_Pause;
const unsigned int key1 = XK_1;
const unsigned int key2 = XK_2;
const unsigned int key3 = XK_3;
const unsigned int key4 = XK_4;
const unsigned int key5 = XK_5;
const unsigned int key6 = XK_6;
const unsigned int key7 = XK_7;
const unsigned int key8 = XK_8;
const unsigned int key9 = XK_9;
const unsigned int key0 = XK_0;
const unsigned int keyBACKSPACE = XK_BackSpace;
const unsigned int keyINSERT = XK_Insert;
const unsigned int keyHOME = XK_Home;
const unsigned int keyPAGEUP = XK_Page_Up;
const unsigned int keyTAB = XK_Tab;
const unsigned int keyQ = XK_q;
const unsigned int keyW = XK_w;
const unsigned int keyE = XK_e;
const unsigned int keyR = XK_r;
const unsigned int keyT = XK_t;
const unsigned int keyY = XK_y;
const unsigned int keyU = XK_u;
const unsigned int keyI = XK_i;
const unsigned int keyO = XK_o;
const unsigned int keyP = XK_p;
const unsigned int keyDELETE = XK_Delete;
const unsigned int keyEND = XK_End;
const unsigned int keyPAGEDOWN = XK_Page_Down;
const unsigned int keyCAPSLOCK = XK_Caps_Lock;
const unsigned int keyA = XK_a;
const unsigned int keyS = XK_s;
const unsigned int keyD = XK_d;
const unsigned int keyF = XK_f;
const unsigned int keyG = XK_g;
const unsigned int keyH = XK_h;
const unsigned int keyJ = XK_j;
const unsigned int keyK = XK_k;
const unsigned int keyL = XK_l;
const unsigned int keyRETURN = XK_Return;
const unsigned int keySHIFTLEFT = XK_Shift_L;
const unsigned int keyZ = XK_z;
const unsigned int keyX = XK_x;
const unsigned int keyC = XK_c;
const unsigned int keyV = XK_v;
const unsigned int keyB = XK_b;
const unsigned int keyN = XK_n;
const unsigned int keyM = XK_m;
const unsigned int keySHIFTRIGHT = XK_Shift_R;
const unsigned int keyARROWUP = XK_Up;
const unsigned int keyCTRLLEFT = XK_Control_L;
const unsigned int keyAPPLEFT = XK_Super_L;
const unsigned int keyALT = XK_Alt_L;
const unsigned int keySPACE = XK_space;
const unsigned int keyALTGR = XK_Alt_R;
const unsigned int keyAPPRIGHT = XK_Super_R;
const unsigned int keyMENU = XK_Menu;
const unsigned int keyCTRLRIGHT = XK_Control_R;
const unsigned int keyARROWLEFT = XK_Left;
const unsigned int keyARROWDOWN = XK_Down;
const unsigned int keyARROWRIGHT = XK_Right;
const unsigned int keyPAD0 = XK_KP_0;
const unsigned int keyPAD1 = XK_KP_1;
const unsigned int keyPAD2 = XK_KP_2;
const unsigned int keyPAD3 = XK_KP_3;
const unsigned int keyPAD4 = XK_KP_4;
const unsigned int keyPAD5 = XK_KP_5;
const unsigned int keyPAD6 = XK_KP_6;
const unsigned int keyPAD7 = XK_KP_7;
const unsigned int keyPAD8 = XK_KP_8;
const unsigned int keyPAD9 = XK_KP_9;
const unsigned int keyPADADD = XK_KP_Add;
const unsigned int keyPADSUB = XK_KP_Subtract;
const unsigned int keyPADMUL = XK_KP_Multiply;
const unsigned int keyPADDIV = XK_KP_Divide;
const unsigned int keyENTER = XK_KP_Enter;
#elif cimg_display==2
// Define keycodes for GDI32-based display (Windows).
const unsigned int keyESC = VK_ESCAPE;
const unsigned int keyF1 = VK_F1;
const unsigned int keyF2 = VK_F2;
const unsigned int keyF3 = VK_F3;
const unsigned int keyF4 = VK_F4;
const unsigned int keyF5 = VK_F5;
const unsigned int keyF6 = VK_F6;
const unsigned int keyF7 = VK_F7;
const unsigned int keyF8 = VK_F8;
const unsigned int keyF9 = VK_F9;
const unsigned int keyF10 = VK_F10;
const unsigned int keyF11 = VK_F11;
const unsigned int keyF12 = VK_F12;
const unsigned int keyPAUSE = VK_PAUSE;
const unsigned int key1 = '1';
const unsigned int key2 = '2';
const unsigned int key3 = '3';
const unsigned int key4 = '4';
const unsigned int key5 = '5';
const unsigned int key6 = '6';
const unsigned int key7 = '7';
const unsigned int key8 = '8';
const unsigned int key9 = '9';
const unsigned int key0 = '0';
const unsigned int keyBACKSPACE = VK_BACK;
const unsigned int keyINSERT = VK_INSERT;
const unsigned int keyHOME = VK_HOME;
const unsigned int keyPAGEUP = VK_PRIOR;
const unsigned int keyTAB = VK_TAB;
const unsigned int keyQ = 'Q';
const unsigned int keyW = 'W';
const unsigned int keyE = 'E';
const unsigned int keyR = 'R';
const unsigned int keyT = 'T';
const unsigned int keyY = 'Y';
const unsigned int keyU = 'U';
const unsigned int keyI = 'I';
const unsigned int keyO = 'O';
const unsigned int keyP = 'P';
const unsigned int keyDELETE = VK_DELETE;
const unsigned int keyEND = VK_END;
const unsigned int keyPAGEDOWN = VK_NEXT;
const unsigned int keyCAPSLOCK = VK_CAPITAL;
const unsigned int keyA = 'A';
const unsigned int keyS = 'S';
const unsigned int keyD = 'D';
const unsigned int keyF = 'F';
const unsigned int keyG = 'G';
const unsigned int keyH = 'H';
const unsigned int keyJ = 'J';
const unsigned int keyK = 'K';
const unsigned int keyL = 'L';
const unsigned int keyRETURN = VK_RETURN;
const unsigned int keySHIFTLEFT = VK_SHIFT;
const unsigned int keyZ = 'Z';
const unsigned int keyX = 'X';
const unsigned int keyC = 'C';
const unsigned int keyV = 'V';
const unsigned int keyB = 'B';
const unsigned int keyN = 'N';
const unsigned int keyM = 'M';
const unsigned int keySHIFTRIGHT = VK_SHIFT;
const unsigned int keyARROWUP = VK_UP;
const unsigned int keyCTRLLEFT = VK_CONTROL;
const unsigned int keyAPPLEFT = VK_LWIN;
const unsigned int keyALT = VK_LMENU;
const unsigned int keySPACE = VK_SPACE;
const unsigned int keyALTGR = VK_CONTROL;
const unsigned int keyAPPRIGHT = VK_RWIN;
const unsigned int keyMENU = VK_APPS;
const unsigned int keyCTRLRIGHT = VK_CONTROL;
const unsigned int keyARROWLEFT = VK_LEFT;
const unsigned int keyARROWDOWN = VK_DOWN;
const unsigned int keyARROWRIGHT = VK_RIGHT;
const unsigned int keyPAD0 = 0x60;
const unsigned int keyPAD1 = 0x61;
const unsigned int keyPAD2 = 0x62;
const unsigned int keyPAD3 = 0x63;
const unsigned int keyPAD4 = 0x64;
const unsigned int keyPAD5 = 0x65;
const unsigned int keyPAD6 = 0x66;
const unsigned int keyPAD7 = 0x67;
const unsigned int keyPAD8 = 0x68;
const unsigned int keyPAD9 = 0x69;
const unsigned int keyPADADD = VK_ADD;
const unsigned int keyPADSUB = VK_SUBTRACT;
const unsigned int keyPADMUL = VK_MULTIPLY;
const unsigned int keyPADDIV = VK_DIVIDE;
const unsigned int keyENTER = VK_RETURN;
#elif cimg_display==3
// Define keycodes for SDL3-based display.
const unsigned int keyESC = SDL_SCANCODE_ESCAPE;
const unsigned int keyF1 = SDL_SCANCODE_F1;
const unsigned int keyF2 = SDL_SCANCODE_F2;
const unsigned int keyF3 = SDL_SCANCODE_F3;
const unsigned int keyF4 = SDL_SCANCODE_F4;
const unsigned int keyF5 = SDL_SCANCODE_F5;
const unsigned int keyF6 = SDL_SCANCODE_F6;
const unsigned int keyF7 = SDL_SCANCODE_F7;
const unsigned int keyF8 = SDL_SCANCODE_F8;
const unsigned int keyF9 = SDL_SCANCODE_F9;
const unsigned int keyF10 = SDL_SCANCODE_F10;
const unsigned int keyF11 = SDL_SCANCODE_F11;
const unsigned int keyF12 = SDL_SCANCODE_F12;
const unsigned int keyPAUSE = SDL_SCANCODE_PAUSE;
const unsigned int key1 = SDL_SCANCODE_1;
const unsigned int key2 = SDL_SCANCODE_2;
const unsigned int key3 = SDL_SCANCODE_3;
const unsigned int key4 = SDL_SCANCODE_4;
const unsigned int key5 = SDL_SCANCODE_5;
const unsigned int key6 = SDL_SCANCODE_6;
const unsigned int key7 = SDL_SCANCODE_7;
const unsigned int key8 = SDL_SCANCODE_8;
const unsigned int key9 = SDL_SCANCODE_9;
const unsigned int key0 = SDL_SCANCODE_0;
const unsigned int keyBACKSPACE = SDL_SCANCODE_BACKSPACE;
const unsigned int keyINSERT = SDL_SCANCODE_INSERT;
const unsigned int keyHOME = SDL_SCANCODE_HOME;
const unsigned int keyPAGEUP = SDL_SCANCODE_PAGEUP;
const unsigned int keyTAB = SDL_SCANCODE_TAB;
const unsigned int keyQ = SDL_SCANCODE_Q;
const unsigned int keyW = SDL_SCANCODE_W;
const unsigned int keyE = SDL_SCANCODE_E;
const unsigned int keyR = SDL_SCANCODE_R;
const unsigned int keyT = SDL_SCANCODE_T;
const unsigned int keyY = SDL_SCANCODE_Y;
const unsigned int keyU = SDL_SCANCODE_U;
const unsigned int keyI = SDL_SCANCODE_I;
const unsigned int keyO = SDL_SCANCODE_O;
const unsigned int keyP = SDL_SCANCODE_P;
const unsigned int keyDELETE = SDL_SCANCODE_DELETE;
const unsigned int keyEND = SDL_SCANCODE_END;
const unsigned int keyPAGEDOWN = SDL_SCANCODE_PAGEDOWN;
const unsigned int keyCAPSLOCK = SDL_SCANCODE_CAPSLOCK;
const unsigned int keyA = SDL_SCANCODE_A;
const unsigned int keyS = SDL_SCANCODE_S;
const unsigned int keyD = SDL_SCANCODE_D;
const unsigned int keyF = SDL_SCANCODE_F;
const unsigned int keyG = SDL_SCANCODE_G;
const unsigned int keyH = SDL_SCANCODE_H;
const unsigned int keyJ = SDL_SCANCODE_J;
const unsigned int keyK = SDL_SCANCODE_K;
const unsigned int keyL = SDL_SCANCODE_L;
const unsigned int keyRETURN = SDL_SCANCODE_RETURN;
const unsigned int keySHIFTLEFT = SDL_SCANCODE_LSHIFT;
const unsigned int keyZ = SDL_SCANCODE_Z;
const unsigned int keyX = SDL_SCANCODE_X;
const unsigned int keyC = SDL_SCANCODE_C;
const unsigned int keyV = SDL_SCANCODE_V;
const unsigned int keyB = SDL_SCANCODE_B;
const unsigned int keyN = SDL_SCANCODE_N;
const unsigned int keyM = SDL_SCANCODE_M;
const unsigned int keySHIFTRIGHT = SDL_SCANCODE_RSHIFT;
const unsigned int keyARROWUP = SDL_SCANCODE_UP;
const unsigned int keyCTRLLEFT = SDL_SCANCODE_LCTRL;
const unsigned int keyAPPLEFT = SDL_SCANCODE_LGUI;
const unsigned int keyALT = SDL_SCANCODE_LALT;
const unsigned int keySPACE = SDL_SCANCODE_SPACE;
const unsigned int keyALTGR = SDL_SCANCODE_RALT;
const unsigned int keyAPPRIGHT = SDL_SCANCODE_RGUI;
const unsigned int keyMENU = SDL_SCANCODE_MENU;
const unsigned int keyCTRLRIGHT = SDL_SCANCODE_RCTRL;
const unsigned int keyARROWLEFT = SDL_SCANCODE_LEFT;
const unsigned int keyARROWDOWN = SDL_SCANCODE_DOWN;
const unsigned int keyARROWRIGHT = SDL_SCANCODE_RIGHT;
const unsigned int keyPAD0 = SDL_SCANCODE_KP_0;
const unsigned int keyPAD1 = SDL_SCANCODE_KP_1;
const unsigned int keyPAD2 = SDL_SCANCODE_KP_2;
const unsigned int keyPAD3 = SDL_SCANCODE_KP_3;
const unsigned int keyPAD4 = SDL_SCANCODE_KP_4;
const unsigned int keyPAD5 = SDL_SCANCODE_KP_5;
const unsigned int keyPAD6 = SDL_SCANCODE_KP_6;
const unsigned int keyPAD7 = SDL_SCANCODE_KP_7;
const unsigned int keyPAD8 = SDL_SCANCODE_KP_8;
const unsigned int keyPAD9 = SDL_SCANCODE_KP_9;
const unsigned int keyPADADD = SDL_SCANCODE_KP_PLUS;
const unsigned int keyPADSUB = SDL_SCANCODE_KP_MINUS;
const unsigned int keyPADMUL = SDL_SCANCODE_KP_MULTIPLY;
const unsigned int keyPADDIV = SDL_SCANCODE_KP_DIVIDE;
const unsigned int keyENTER = SDL_SCANCODE_KP_ENTER;
#else
// Define random keycodes when no display is available.
// (should rarely be used then!).
const unsigned int keyESC = 1U; //!< Keycode for the \c ESC key (architecture-dependent)
const unsigned int keyF1 = 2U; //!< Keycode for the \c F1 key (architecture-dependent)
const unsigned int keyF2 = 3U; //!< Keycode for the \c F2 key (architecture-dependent)
const unsigned int keyF3 = 4U; //!< Keycode for the \c F3 key (architecture-dependent)
const unsigned int keyF4 = 5U; //!< Keycode for the \c F4 key (architecture-dependent)
const unsigned int keyF5 = 6U; //!< Keycode for the \c F5 key (architecture-dependent)
const unsigned int keyF6 = 7U; //!< Keycode for the \c F6 key (architecture-dependent)
const unsigned int keyF7 = 8U; //!< Keycode for the \c F7 key (architecture-dependent)
const unsigned int keyF8 = 9U; //!< Keycode for the \c F8 key (architecture-dependent)
const unsigned int keyF9 = 10U; //!< Keycode for the \c F9 key (architecture-dependent)
const unsigned int keyF10 = 11U; //!< Keycode for the \c F10 key (architecture-dependent)
const unsigned int keyF11 = 12U; //!< Keycode for the \c F11 key (architecture-dependent)
const unsigned int keyF12 = 13U; //!< Keycode for the \c F12 key (architecture-dependent)
const unsigned int keyPAUSE = 14U; //!< Keycode for the \c PAUSE key (architecture-dependent)
const unsigned int key1 = 15U; //!< Keycode for the \c 1 key (architecture-dependent)
const unsigned int key2 = 16U; //!< Keycode for the \c 2 key (architecture-dependent)
const unsigned int key3 = 17U; //!< Keycode for the \c 3 key (architecture-dependent)
const unsigned int key4 = 18U; //!< Keycode for the \c 4 key (architecture-dependent)
const unsigned int key5 = 19U; //!< Keycode for the \c 5 key (architecture-dependent)
const unsigned int key6 = 20U; //!< Keycode for the \c 6 key (architecture-dependent)
const unsigned int key7 = 21U; //!< Keycode for the \c 7 key (architecture-dependent)
const unsigned int key8 = 22U; //!< Keycode for the \c 8 key (architecture-dependent)
const unsigned int key9 = 23U; //!< Keycode for the \c 9 key (architecture-dependent)
const unsigned int key0 = 24U; //!< Keycode for the \c 0 key (architecture-dependent)
const unsigned int keyBACKSPACE = 25U; //!< Keycode for the \c BACKSPACE key (architecture-dependent)
const unsigned int keyINSERT = 26U; //!< Keycode for the \c INSERT key (architecture-dependent)
const unsigned int keyHOME = 27U; //!< Keycode for the \c HOME key (architecture-dependent)
const unsigned int keyPAGEUP = 28U; //!< Keycode for the \c PAGEUP key (architecture-dependent)
const unsigned int keyTAB = 29U; //!< Keycode for the \c TAB key (architecture-dependent)
const unsigned int keyQ = 30U; //!< Keycode for the \c Q key (architecture-dependent)
const unsigned int keyW = 31U; //!< Keycode for the \c W key (architecture-dependent)
const unsigned int keyE = 32U; //!< Keycode for the \c E key (architecture-dependent)
const unsigned int keyR = 33U; //!< Keycode for the \c R key (architecture-dependent)
const unsigned int keyT = 34U; //!< Keycode for the \c T key (architecture-dependent)
const unsigned int keyY = 35U; //!< Keycode for the \c Y key (architecture-dependent)
const unsigned int keyU = 36U; //!< Keycode for the \c U key (architecture-dependent)
const unsigned int keyI = 37U; //!< Keycode for the \c I key (architecture-dependent)
const unsigned int keyO = 38U; //!< Keycode for the \c O key (architecture-dependent)
const unsigned int keyP = 39U; //!< Keycode for the \c P key (architecture-dependent)
const unsigned int keyDELETE = 40U; //!< Keycode for the \c DELETE key (architecture-dependent)
const unsigned int keyEND = 41U; //!< Keycode for the \c END key (architecture-dependent)
const unsigned int keyPAGEDOWN = 42U; //!< Keycode for the \c PAGEDOWN key (architecture-dependent)
const unsigned int keyCAPSLOCK = 43U; //!< Keycode for the \c CAPSLOCK key (architecture-dependent)
const unsigned int keyA = 44U; //!< Keycode for the \c A key (architecture-dependent)
const unsigned int keyS = 45U; //!< Keycode for the \c S key (architecture-dependent)
const unsigned int keyD = 46U; //!< Keycode for the \c D key (architecture-dependent)
const unsigned int keyF = 47U; //!< Keycode for the \c F key (architecture-dependent)
const unsigned int keyG = 48U; //!< Keycode for the \c G key (architecture-dependent)
const unsigned int keyH = 49U; //!< Keycode for the \c H key (architecture-dependent)
const unsigned int keyJ = 50U; //!< Keycode for the \c J key (architecture-dependent)
const unsigned int keyK = 51U; //!< Keycode for the \c K key (architecture-dependent)
const unsigned int keyL = 52U; //!< Keycode for the \c L key (architecture-dependent)
const unsigned int keyRETURN = 53U; //!< Keycode for the \c RETURN key (architecture-dependent)
const unsigned int keySHIFTLEFT = 54U; //!< Keycode for the \c SHIFTLEFT key (architecture-dependent)
const unsigned int keyZ = 55U; //!< Keycode for the \c Z key (architecture-dependent)
const unsigned int keyX = 56U; //!< Keycode for the \c X key (architecture-dependent)
const unsigned int keyC = 57U; //!< Keycode for the \c C key (architecture-dependent)
const unsigned int keyV = 58U; //!< Keycode for the \c V key (architecture-dependent)
const unsigned int keyB = 59U; //!< Keycode for the \c B key (architecture-dependent)
const unsigned int keyN = 60U; //!< Keycode for the \c N key (architecture-dependent)
const unsigned int keyM = 61U; //!< Keycode for the \c M key (architecture-dependent)
const unsigned int keySHIFTRIGHT = 62U; //!< Keycode for the \c SHIFTRIGHT key (architecture-dependent)
const unsigned int keyARROWUP = 63U; //!< Keycode for the \c ARROWUP key (architecture-dependent)
const unsigned int keyCTRLLEFT = 64U; //!< Keycode for the \c CTRLLEFT key (architecture-dependent)
const unsigned int keyAPPLEFT = 65U; //!< Keycode for the \c APPLEFT key (architecture-dependent)
const unsigned int keyALT = 66U; //!< Keycode for the \c ALT key (architecture-dependent)
const unsigned int keySPACE = 67U; //!< Keycode for the \c SPACE key (architecture-dependent)
const unsigned int keyALTGR = 68U; //!< Keycode for the \c ALTGR key (architecture-dependent)
const unsigned int keyAPPRIGHT = 69U; //!< Keycode for the \c APPRIGHT key (architecture-dependent)
const unsigned int keyMENU = 70U; //!< Keycode for the \c MENU key (architecture-dependent)
const unsigned int keyCTRLRIGHT = 71U; //!< Keycode for the \c CTRLRIGHT key (architecture-dependent)
const unsigned int keyARROWLEFT = 72U; //!< Keycode for the \c ARROWLEFT key (architecture-dependent)
const unsigned int keyARROWDOWN = 73U; //!< Keycode for the \c ARROWDOWN key (architecture-dependent)
const unsigned int keyARROWRIGHT = 74U; //!< Keycode for the \c ARROWRIGHT key (architecture-dependent)
const unsigned int keyPAD0 = 75U; //!< Keycode for the \c PAD0 key (architecture-dependent)
const unsigned int keyPAD1 = 76U; //!< Keycode for the \c PAD1 key (architecture-dependent)
const unsigned int keyPAD2 = 77U; //!< Keycode for the \c PAD2 key (architecture-dependent)
const unsigned int keyPAD3 = 78U; //!< Keycode for the \c PAD3 key (architecture-dependent)
const unsigned int keyPAD4 = 79U; //!< Keycode for the \c PAD4 key (architecture-dependent)
const unsigned int keyPAD5 = 80U; //!< Keycode for the \c PAD5 key (architecture-dependent)
const unsigned int keyPAD6 = 81U; //!< Keycode for the \c PAD6 key (architecture-dependent)
const unsigned int keyPAD7 = 82U; //!< Keycode for the \c PAD7 key (architecture-dependent)
const unsigned int keyPAD8 = 83U; //!< Keycode for the \c PAD8 key (architecture-dependent)
const unsigned int keyPAD9 = 84U; //!< Keycode for the \c PAD9 key (architecture-dependent)
const unsigned int keyPADADD = 85U; //!< Keycode for the \c PADADD key (architecture-dependent)
const unsigned int keyPADSUB = 86U; //!< Keycode for the \c PADSUB key (architecture-dependent)
const unsigned int keyPADMUL = 87U; //!< Keycode for the \c PADMUL key (architecture-dependent)
const unsigned int keyPADDIV = 88U; //!< Keycode for the \c PADDDIV key (architecture-dependent)
const unsigned int keyENTER = 89U; //!< Keycode for the \c ENTER key (architecture-dependent)
#endif
const double PI = 3.14159265358979323846; //!< Value of the mathematical constant PI
// Define a 10x13 binary font (small sans).
static const char *const data_font_small[] = {
" UwlwnwoyuwHwlwmwcwlwnw[xuwowlwmwoyuwRwlwnxcw Mw (wnwnwuwpwuypwuwoy"
"ZwnwmwuwowuwmwnwnwuwowuwfwuxnwnwmwuwpwuypwuwZwnwnwtwpwtwow'y Hw cwnw >{ jw %xdxZwdw_wexfwYwkw 7yowoyFx=w "
"ry qw %wuw !xnwkwnwoyuwfwuw[wkwnwcwowrwpwdwuwoxuwpwkwnwoyuwRwkwnwbwpwNyoyoyoyoy;wdwnxpxtxowG|!ydwnwuwowtwow"
"pxswqxlwnxnxmwDwoyoxnyoymwp{oyq{pyoy>ypwqwpwp{oyqzo{q{pzrwrwowlwqwswpwnwqwsxswpypzoyqzozq}swrwrwqwtwswswtxsxswq"
"ws}qwnwkwnydwew_wfwdwkwmwowkw(w0wmwmwGwtwdxQw swuwnwo{q{pynwp|rwtwtwqydwcwcwcwmwmxgwqwpwnzpwuwpzoyRzoyoyexnynwd"
"z\\xnxgxrwsxrwsyswowmwmwmwmwmwmwo}ryp{q{q{q{nwmwnwmwozqxswpyoyoyoyoyeyuwswrwrwrwrwrwrwrwrwqwrwmwtwnwmwnwuwpwuyp"
"wuwoyZwmwnwuwowuwmwqwkwuwowuwoxnwuxowmwnwuwpwuypwuwZwmwnwuwowuwnwowmwtw\\wuwuwqwswqwswqwswqwswEwqwtweypzr~qyIw "
"rwswewnwuwowuwozswtwuwqwtwmwnwlwowuwuwowOxpxuxqwuwowswqwswoxpwlwjwqwswqwswy~}P{|k~-{|w~}k{|w~}Ww~|S{|k~X{|v~vv~|Y{|}k~}|Z{|y~"
"}y|xy|}w~| s{|}k~}|Z{|l~|V{}p~}\"{|y~}|w{|}w~|V{|}|u{|v~P{}x~} {{}h~} N{|~y}y|}x~|S{|v~}|y{|}w~}2{|w~y}x~|g{}x"
"~|k{|w~y}x~|g{}x~|kx}|w{|}w~}k{}x~}%{}t~|P{}t~|P{}t~|P{}t~|P{}t~|P{}t~}W{|[~}e{}f~}b{}c~|a{}c~|a{}c~|a{}c~|X{}w"
"~}M{}w~}M{}w~}M{}w~}Z{|d~}|`{}t~}kv~b{|g~}]{|g~}]{|g~}]{|g~}]{|g~}){|g~|{|w~|h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f"
"{|v~h{}w~}f{|v~|j{|v~|b{}w~}L{|u~}|w{|}v~|W{|w~|Iw~}Qw~x{}x~|V{}y~}x{}s~|X{|v~|wv~}Vx~}v{|x~| D{}x~}I{}w~Q{}x~|"
"xw~U{}w~}w{|v~T{|w~|J{|w~Q{|x~}x{|x~|V{|v~vv~|T{}q~}|Wx~|x{}s~T{|w~I{|w~|R{|x~}x{}x~|Vx~}x{}s~|X{|v~vv~| Fw~}J{"
"|w~|R{|x~}x{|x~}Uv~|w{}w~}Q{|w~|Ww~}Hv~}w{}w~} Pw~}y{|x~}cY~ i{}y~|#{|w~}Qm~|`m~}w{|m~|\\{}v~| ;{}`~} -"
"{|r~x}t~}$v~}R{}x~}vw~}S{|w~t{|x~}U{|y~|_{|w~}w{}w~|n{}x~}_{|t~w}u~|Q{}x~}K{}w~N{}x~}Jx~ +{|w~Xs~y}s~|\\m~}X{}"
"f~\\{}g~}R{|s~}\\{|g~}Y{|i~|`{}c~|_{|s~w}s~}]{|s~x}s~ hr~}r~|[{|f~}Xs~}Y{}d~|\\{|c~}g{}b~|^{}c~|`{}e~_{|a~|g{"
"}w~}hv~|Y{}w~}M{}w~}W{}w~}n{|u~|_{}w~}V{}s~}jr~|h{}s~|lv~c{|p~}q~}^{}f~}_{|p~}q~}`{}e~[{}q~}p~dZ~g{|v~h{}w~}h{|"
"v~|f{|v~p{|v~m{|t~}m{}w~}m{|v~|m{}v~c{}v~jv~}e\\~]{|w~}Nw~}D{|w~|Sp~| ww~|!w~} `{|w~|${}w~}!w~}Cv~Lv~Tw~}Dv~ "
" Ov~ !{}w~}Mw~|N{|v~ :{}v~|s{|v~V{|t}|V{|t~s}w~| p{|v~ {{|v~|t{|v~|Vs~}W{}c~|_{}d~}c{|d~|W{|v~Y{}^~|iv~"
"}r{|v~qv~}f{|p~}q~}${}r~} v{}w~ v{}q~| ?y~}Ps~x}u~,v~k{}w~|Ww~|Su~}v|}w~X{|v~vv~|Z{}v~}y|wy|}v~}[{|}q{}x~} t{}"
"v~}y|wy|}v~}&{}w~|x{|w~}#y|r{}x~}Kw~|R{|w~ {{}p~}v|x~} H{}x~|S{}w~t{}w~|3x|x{}x~|h{|x~}j{|}|x{}x~|h{|x~}`{|w~l{"
"|w~$s~}Ps~}Ps~}Ps~}Ps~}Pr~W{}[~}g{|c~}c{}c~|a{}c~|a{}c~|a{}c~|X{}w~}M{}w~}M{}w~}M{}w~}Z{|b~}a{}s~|lv~c{|p~}q~}_"
"{|p~}q~}_{|p~}q~}_{|p~}q~}_{|p~}q~}+{|p~}q~}w~|g{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}e{}v~jv~}a{}w~}Lu~r{"
"|v~V{|w~J{}x~}Q{}x~|w{}x~Vx~|w{}u~}Vv|vv|U{}x~}x|}w~ Bw~|K{|w~|R{|x~}w{|x~}Vu|vv|S{|w~K{|w~|Qx~}v{}x~Uv|vv|T{|}"
"t~}|Tx~|w{|u~|S{}x~}Jw~}Qw~vw~Vx~|w{}u~}Vv|vv| Dw~|Kw~|Qw~v{}x~|Vv|vv|Pw~|Vw~}Hv|uv| G{|t}|P{|t}|P{|t}|P{|t}|P{"
"|t}|Lw~|xw~c{|[~} iy~}\"u~|S{|l~a{}l~|x{}l~]{}t~ ={|^~} .{|u~}|u{|}w~}$v~}R{}x~}vw~}S{}x~}t{}x~}Xy|y}y~y}x"
"|cw~}u{}w~o{|w~^u~}t{|}y~|Q{}x~}Kw~|N{|w~|T{}sx~s{} 4{}x~}Y{}v~}|v{}u~\\m~}X{}v~y}|wy|s~]{}x~}x|v{|}t~}Sr~}\\{"
"|v~k|Z{|t~}|v{|y}y~|`h|u~^t~|u{|}u~|^u~}|v{|}v~} iv~y|v{|t~]{|o~y}p~|[{|r~|Z{}w~}q|}s~]{|s~}|t{|}u~}g{}w~}r|y"
"}q~}_{}w~}h|_{}w~}j|`{|s~}|s{|}t~|g{}w~}hv~|Y{}w~}M{}w~}W{}w~}o{}u~|^{}w~}V{}r~k{|r~|h{}r~lv~d{|t~}|uy|s~_{}w~}"
"s|y}t~}a{|t~}|uy|s~a{}w~}s|y}s~]{}u~}|ty|}v~dn|}v~}n|g{|v~h{}w~}gv~}f{}w~}ov~|n{|t~}mv~|l{}v~|o{|v~|bv~}l{}v~dc"
"|u~}]{|w~}N{}w~D{|w~|T{}o~| x{|w~!w~} `{|w~|${}w~ w~} >w~}Dv~ Ov~ !{}w~|Mw~|M{}w~ :v~|q{}w~|Xp~}X{}v~|p{|"
"}| o{}w~| v~|r{|v~W{|r~|X{}v~}i|^{}w~}h|d{|s~}y|xy|}s~}[{|y}u~y}y|]{}w~}h|v~|iv~}r{|v~qv~}g{|t~}|uy|s~&{}p"
"~} w{}w~ w{}o~| @y~}Q{}v~}|u{|}y~,{|w~}m{|w~}Vw~|T{|v~|s{|}~({|w~}|o{|}w~|P{}x~| w{|w~}|o{|}w~|(x~}tw~ rw~K{}x"
"~|Rw~ {{}o~}w{|x~} H{}x~|T{|w~r{}x~}-{}x~|hw~|d{}x~|hw~|_{}x~|mw~|%{|r~|R{|r~|R{|r~|R{|r~|R{|r~|R{}r~|Y{|v~|y{|"
"v~}h|h{|s~}|t{|}u~}c{}w~}h|`{}w~}h|`{}w~}h|`{}w~}h|W{}w~}M{}w~}M{}w~}M{}w~}Z{|v~r|x}q~b{}r~lv~d{|t~}|uy|s~a{|t~"
"}|uy|s~a{|t~}|uy|s~a{|t~}|uy|s~a{|t~}|uy|s~-{|t~}|u{|}q~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}dv~}l{}v~`"
"{}w~}M{|v~p{}w~|V{}x~}L{}x~}Q{|x~|ux~}Wx~|v{|w~} {{}q~| Aw~|Lw~|Qw~u{}x~| y{|x~}Lw~|Q{}x~tx~}#{|}r~}Rx~u{|}y~}|"
"Q{}x~}L{}x~}Q{}x~|v{|x~}Wx~|v{}w~} j{|w~L{}x~}Q{}x~|u{}x~ x{}x~}Uw~} b{|}p~}|V{|}p~}|V{|}p~}|V{|}p~}|V{|}p~}|"
"P{|w~|xx|av~|fv~| j{|y~|#{}t~Sk~|c{|k~}y{|k~}_{|s~} ?{}t~}y| u{|u~|p{}y~}$v~}R{}x~}vw~}Sw~|tw~|[{|}m~}|h{"
"|w~sw~|p{}x~|_{}v~|q{|}|Q{}x~}L{}w~Lw~}U{}y~|ux~u{|y~}U{|x}| `w~|Z{|v~}s{|v~}]w~y}y|{}w~}X{}x~|p{|u~|^y}|n{|u~"
"|U{}x~y}w~}\\{|w~}K{|u~}o{}|Mv~|_{}v~}q{|u~_{}v~}r{|v~| jy~}|qu~|_{}t~}y|s{|}t~}\\{}w~}w~}Z{}w~}o{|u~}_{|t~|n"
"{|}x~}g{}w~}n{|}t~}`{}w~}L{}w~}P{|t~}m{|}w~|g{}w~}hv~|Y{}w~}M{}w~}W{}w~}p{}u~|]{}w~}V{}w~}w~|l{}r~|h{}r~|mv~e{|"
"u~}|p{|t~`{}w~}q{|}u~|c{|u~}|p{|t~b{}w~}p{}u~|_{|u~|n{|}y~W{|v~|Z{|v~h{}w~}g{|v~fv~|o{}w~}n{}x~}w~mv~|kv~}ov~}a"
"{|v~|n{|v~|M{}v~}\\{|w~}N{|w~|E{|w~|U{}v~}{|u~| x{|x~}\"w~} `{|w~|$v~ w~} >w~}Dv~ Ov~ !v~Lw~|M{}w~| <{|w~"
"}p{|w~}Xn~|Zv~ _{|v~ !{|w~}p{}w~}X{}w~}w~}W{}v~|M{}w~}R{|t~|p{|t~|_{|}l~}|`{}w~}hv~|iv~}r{|v~qv~}h{|u~}|p{|"
"t~({}n~} x{}w~ x{}m~| Ay~}R{|v~}p{}+{}w~|nv~Uw~|T{}w~| x{|w~|k{|w~|Q{|x~| x{|w~|k{|w~|*{|x~rx~|R{|w}Fw~Kw~|S{}"
"x~| {|n~}w{|x~} H{}x~|T{}x~}qw~|.{}x~|i{}x~}c{}x~|i{}x~}^{}x~|n{}x~}${}w~}w~}R{}w~}w~}R{}w~}w~}R{}w~}w~}R{}w~}w"
"~}Rv~|w~}Y{}w~}x{|v~U{|t~|n{|}x~}c{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~n{|}s~c{}r~|mv~e{|u~}|p{|"
"t~c{|u~}|p{|t~c{|u~}|p{|t~c{|u~}|p{|t~c{|u~}|p{|t~/{|u~}|p{}t~}e{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}d{|v"
"~|n{|v~|`{}w~}M{}w~}ow~}U{}x~|N{|w~Px~}t{|x~|Xx|sy| w{}s~| @{|w~M{}x~|Q{}x~|tw~ x{}x~}N{}x~|Q{|x~|t{|x~|&{}t~}v"
"~} t{}x~|N{|x~}Q{|x~}t{}x~|Xx|sy| g{|x~}N{|x~}Q{|x~}sx~} {{|x~}Tw~} d{|j~|Z{|j~|Z{|j~|Z{|j~|Z{|j~|R{|w~Z{}w~}"
"g{}w~} Ay|J{}y~#{|s~}Tk~}c{}j~|{}j~_q~| A{}u~} q{}v~|n{}~}$v~}R{}x~}vw~}Sw~t{|w~\\{|h~|i{}x~}s{}x~}q{|x~}^"
"v~|C{}x~}Lw~}L{}w~V{|v~|wx~w{|v~|V{}w~ a{|w~Yv~}q{|v~|^{}y|u{}w~}Xy}|m{|u~M{|v~}V{|w~|}w~}\\{|w~}Ku~|?{|v~^u~o"
"{}v~|a{|v~}p{}v~ j{~|nv~}`u~}|l{|}u~]v~{v~Z{}w~}mu~_u~}j{|y~}g{}w~}l{|}u~}a{}w~}L{}w~}Q{|u~}i{|}y~|g{}w~}hv~|"
"Y{}w~}M{}w~}W{}w~}q{}u~|\\{}w~}V{}w~|w~}lw~|v~|h{}q~mv~f{|u~}m{|u~}a{}w~}o{}v~}d{|u~}m{|u~}c{}w~}o{|u~_{}v~|j{|"
"W{|v~|Z{|v~h{}w~}fv~|h{}v~n{}w~}nw~|w~|o{|v~j{|v~}q{}v~_{}v~nv~}M{|u~[{|w~}Mw~}E{|w~|V{}v~}x{|u~| vw~} `{|w~|$"
"w~} w~} >w~}Dv~ Ov~ !v~Lw~|M{}w~| <{}w~|ow~}Xm~|[v~ ^v~| \"v~|p{|v~Xv~{v~V{}v~|N{}w~}Ru~}l{}u~|b{|g~}"
"|b{}w~}hv~|iv~}r{|v~qv~}i{|u~}m{|u~}*{}l~} y{}w~ y{}k~| By~}R{}v~ y{|w~}o{|w~}Uw~|T{}w~ x{|x~}g{}x~|R{|x~} y{|"
"x~}g{}x~|+{}y~}r{}y~}R{}w~Fx~}M{|}w~ Mm~}w{|x~} H{}x~|Tw~p{}x~|.{}x~|j{|w~b{}x~|j{|w~]w~n{|w~#v~{v~Rv~{v~Rv~{v~"
"Rv~{v~Rv~{v~S{|w~}{}w~|Zv~|x{|v~Uu~}j{|y~}c{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~k{}t~d{}q~mv~f{|"
"u~}m{|u~}e{|u~}m{|u~}e{|u~}m{|u~}e{|u~}m{|u~}e{|u~}m{|u~}1{|u~}m{|u~}e{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w"
"~}c{}v~nv~}_{}w~}Mv~n{}w~Tw}N{|x}P{|x}r{|x} F{|}x~}| ={|x}|O{|x}|Px}|s{|x}| xw|Nw|Pw|rw|'{|v~}|y{|v~} tw}Nw}P{|"
"x}rx}| 6w|Nw|Ox|rw| Nw~} e{}h~}\\{}h~}\\{}h~}\\{}h~}\\{}h~}S{|w~Z{|v~gv~| Ay~}L{|y~}${|q~}V{|j~ci~}|i~|a{}p~|"
"Oy|Uw|jw|Vu|Wv|kw|b{}v~} p{|v~|l{|}$v~}R{}x~}vw~}T{|x~}t{|x~}]{|g~|i{}x~|s{|w~qw~|^v~B{}x~}M{|w~|L{|w~}V{|}"
"w~}xx~x{}w~}|U{}w~ a{}w~Z{|v~o{}w~}U{}w~}X{|j{}v~|M{}v~Vw~}{}w~}\\{|w~}L{|v~|>v~}_{|v~|nv~}a{}v~nv~| \\{}w~}"
"b{|u~|h{|}v~|`{|w~}{}w~|[{}w~}m{|v~|a{}v~}gy}g{}w~}j{}u~|b{}w~}L{}w~}Q{}v~}f{|~|g{}w~}hv~|Y{}w~}M{}w~}W{}w~}r{}"
"u~|[{}w~}V{}w~y|w~m{|w~{v~|h{}w~}v~|nv~f{}v~}ju~|b{}w~}nu~d{}v~}ju~|d{}w~}n{}v~|`v~}D{|v~|Z{|v~h{}w~}f{}w~}hv~}"
"n{|v~o{|w~{}x~}o{}w~}i{}v~|s{|v~|^v~}p{}v~M{|u~|[{|w~}M{}x~}E{|w~|W{}v~|v{|u~| ww~} `{|w~|$w~} w~} >w~}Dv~ "
"Ov~ !v~Lw~|M{|w~| <{}w~|ow~}Xy~}w|}t~[v~| _{}w~} #{|w~}n{}w~|Z{|w~}{}w~|Vu~|O{}w~}S{}v~}j{}u~c{}d~|c{}w~"
"}hv~|iv~}r{|v~qv~}i{}v~}ju~|,{}v~y}w~|v~} {{}w~ {{}v~y}w~|u~| Cy~}R{}w~}R{|ey|_{}w~|pv~Tw~|T{}w~ y{|x~}e{}x~|\\"
"{|}p~} {{|x~}e{}x~|,{}y~}r{}y~}R{}w~G{}x~|Rq~| N{|m~}w{|x~} H{}x~|U{|w~p{|x~}.{}x~|j{}x~|b{}x~|j{}x~|_{|w~|n{}"
"x~|${|w~}{}w~|T{|w~}{}w~|T{|w~}{}w~|T{|w~}{}w~|T{|w~}{}w~|T{}w~|{|w~}[{|v~w{|v~V{}v~}gy}c{}w~}M{}w~}M{}w~}M{}w~"
"}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~j{|u~}e{}w~}v~|nv~f{}v~}ju~|f{}v~}ju~|f{}v~}ju~|f{}v~}ju~|f{}v~}ju~|c{}d{}|d{}v~}"
"k{}u~|f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}bv~}p{}v~^{}m~y}|Yv~o{|}w~ Py~}|u{|v~} 2w~} f{"
"}u~}x|{x|}t~^{}u~}x|{x|}t~^{}u~}x|{x|}t~^{}u~}x|{x|}t~^{}u~}x|{x|}t~T{|w~Yv~|i{|v~ A{}x~}M{}y~|$o~|W{|j~ch~}i~}"
"b{}n~T{|}t~y}|Zw~}kw~}X{}u~|X{}w~|m{}w~|d{|v~| ov~}j{|$v~}R{}x~}vw~}T{}x~}t{}x~}]u~}|{|y~|y{|y}x~|iw~|rw~r{"
"}x~}]v~B{}x~}Mv~Jv~T{|}w~|{x~{|w~}|S{}w~ aw~}Z{}w~}o{|v~U{}w~}Ev~}M{|v~W{}w~y{}w~}\\{|w~}Lv~}>{|v~|_{|v~m{}w~}"
"av~|n{|v~ 8{|y}6{|~|4{}v~c{|v~}d{|v~`{}w~|{|w~}[{}w~}lv~|b{|v~}e{|g{}w~}i{}u~b{}w~}L{}w~}R{|v~}dy|g{}w~}hv~|Y{}"
"w~}M{}w~}W{}w~}s{}u~Y{}w~}V{}w~|{w~|nw~}{v~|h{}w~y|v~nv~g{|v~}i{|u~b{}w~}n{|v~|f{|v~}i{|u~d{}w~}n{|v~|a{|v~C{|v"
"~|Z{|v~h{}w~}f{|v~|j{|v~|mv~|p{|w~{|x~}ov~|hv~}sv~}]{|v~|r{|v~|Mu~|Z{|w~}M{|w~E{|w~|X{}v~|t{|u~| xw~} `{|w~|$w"
"~} w~} >w~}Dv~ Ov~ !w~}Lw~|M{|w~| {|v~]{|v~m{}w~}b{|w~}l{}w~}W{|v}M{}v~D{}r~}6{|r~}|>{|v~|e{}w~|^{|w~|dv~w{|v~\\{}w~}lv~|c{}v~N{}w~}g{}v~|d{"
"}w~}L{}w~}S{}v~L{}w~}hv~|Y{}w~}M{}w~}W{}w~}vu~}V{}w~}V{}w~|yw~}pw~}yv~|h{}w~|y{}w~}pv~h{}v~e{}v~|d{}w~}mv~}g{}v"
"~e{}v~|f{}w~}mv~}a{|v~C{|v~|Z{|v~h{}w~}dv~|l{|v~k{|v~q{|w~x{}x~}q{}w~}e{}v~wv~}Y{|v~|v{|v~|N{|v~}W{|w~}L{|w~F{|"
"w~|[{}v~l{}v~ S{|}k~|Zw~}y{|o~}V{|k~|\\{|o~}y{|w~|\\{|m~}X{}k~}Y{|o~}y{|w~|`w~}y{|o~}Sv~Lv~Tw~}o{|v~}Wv~_w~}y{|"
"o~|v{|o~|ew~}y{|o~}Y{|}n~}|[w~}y{|o~}Y{|o~}y{|w~|Zw~}y{|r~|[{}j~[{}i~]{|w~|m{}w~|b{}w~|k{|w~}i{|w~}q{|u~|q{|w~|"
"h{|v~|o{|v~}b{}w~|k{|w~}`d~Uw~}Lw~|M{|w~| n{|o~}vw~|av~o{}w~|M{|v~[{|o~}|U{}k~}]w~}y{|o~}_u~|k{|w~}Wu~X{|w~|m{"
"}w~|dv~|h{|v~_{}x~}x{}s~}__~|dv~t{}w~t{|w~}\\{}n~}Y{|}e~}f{|`~b{|w~}l{}w~|\\v~w{|v~T{|u~R{}w~}U{}v~dv~}i{}u~u{|"
"v~u{|u~|g{}w~}hv~|iv~}r{|v~qv~|k{}v~e{}v~|c{~}I{|y~}w{}w~w{|y~}I{}~|U{}w~T{}~|k{}~|\\y~}w{}w~w{|y~| v~}P{}k~Z{|"
"v~S{|v~}x{|}v~}|y{|v~}^{|w~}u{|w~}Rw~|S{|u~}${}y~|v{}v~}|wy|}y~u{|y~}c{|x~}r{|x~}Q{|q{| W{}y~|uw~vy|v~u{|y~}-w~"
"|v{|w~Q{}w~K{|w~|I{|w~'{|w~|m{}w~|a{}m~}w{|x~} H{}x~|U{|x~}p{|x~}]{|q{|X{}x~|m{|w~_{}x~|m{|w~]{|}w~}q{|w~Pv~|Sv"
"~w{|v~Vv~w{|v~Vv~w{|v~Vv~w{|v~Vv~w{|v~W{|v~vv~^{|v~|v{|v~X{}v~J{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z"
"{|v~g{|v~}g{}w~|y{}w~}pv~h{}v~e{}v~|j{}v~e{}v~|j{}v~e{}v~|j{}v~e{}v~|j{}v~e{}v~|g{|u~l{}v~}g{}v~kw~}{}v~g{|v~h{"
"}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}`{|v~|v{|v~|\\{}w~}s|y}t~}_w~}u{|v~|Y{|}k~|Z{|}k~|Z{|}k~|Z{|}k~|Z{|}k~|Z{|"
"}k~|d{|}k~|v{|m~}_{|k~|[{|m~}W{|m~}W{|m~}W{|m~}Rv~Lv~Lv~Lv~Q{|}l~\\w~}y{|o~}Y{|}n~}|X{|}n~}|X{|}n~}|X{|}n~}|X{|"
"}n~}|S{}u~S{|}n~}{|x~}a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|b{}w~|k{|w~}aw~}y{|o~}^{}w~|k{|w~} X{|w~}"
"t{}w~t{|w~}f{|w~}h{|w~}f{|w~}yy|p{|}y{|w~}f{|w~}ly|y{|w~}f{|w~}h{|w~}X{}x~}X{|v~kv~| Cv~|Lx~&{|i~|Y{|m~}bU~|e{}"
"h~\\{|u~}|xy|}u~^w~}kw~}Yr~}X{}w~}ov~d{}w~ lv~| lv~}R{}x~}vw~}^{}Z~f{|w~|v{|y~|`w~|s{|w~tw~|[{|v~|D{}x~}Nw~"
"}H{}w~|Q{|t~|N{}w~ c{|w~|Zv~|lv~|W{}w~}E{}w~}M{}w~}Z{|w~|w{}w~}\\{|w~}N{|v~={}w~}\\v~|nv~|b{}w~}l{}v~W{}v~M{}v"
"~G{|}p~|6{|o~}@u~e{|w~|\\{}w~e{|w~}v{}w~|]{}w~}m{|v~|cv~}N{}w~}g{|v~}d{}w~}L{}w~}Sv~}L{}w~}hv~|Y{}w~}M{}w~}W{}w"
"~}x{|u~}U{}w~}V{}w~|y{}w~q{|w~|yv~|h{}w~|y{|v~pv~hv~}e{|v~}d{}w~}mv~}gv~}e{|v~}f{}w~}mv~}a{|v~|D{|v~|Z{|v~h{}w~"
"}d{}w~}l{}w~}jv~|r{|w~x{|x~}qv~|e{|v~}y{}v~W{}v~vv~}N{|u~V{|w~}Kw~|G{|w~|\\{}w~}j{}v~ T{}i~}[w~}{}m~}X{}j~|]{}m"
"~}{|w~|]{}j~Y{}k~}Z{}m~}{|w~|`w~}{|l~Tv~Lv~Tw~}p{}v~}Vv~_w~}{|m~|x{|m~|fw~}{|m~}[{|j~|\\w~}{}m~}[{}m~}{|w~|Zw~}"
"{|q~|\\{}i~[{}i~]{|w~|m{}w~|b{|w~}k{}w~|hw~}q{|u~}q{}w~|g{}v~ov~}a{|w~}k{}w~|`d~Uw~}Lw~|M{|w~| Gy|l{|Z{}m~}x{|w"
"~`v~p{|v~Kv~Z{|m~|X{}j~}]w~}{|l~`t~|l{}w~|X{|u~}Y{|w~|m{}w~|e{}v~f{}w~}b{|v~}y{|q~}`_~|dv~t{}w~t{|w~}^{|k~}[{|c"
"~}f{|`~b{}w~}l{}w~}]{|w~}vv~|T{|v~}S{}w~}Uv~}d{}v~j{|u~t{|v~t{|u~g{}w~}hv~|iv~}r{|v~r{|v~|kv~}e{|v~}dx~}I{|}v{}"
"w~v{|}I{}x~|V{}w~U{}x~|m{}x~|\\{|v{}w~vy| {{v~}R{|i~Z{|v~R{|v~}|q~}|v~}\\v~u{}w~Qw~|R{|t~|'{|y~}v{}w~}p{|t{}y~|"
"d{}x~|r{|x~}Ry}r{|~ X{|y~}tw~sw~|u{}y~|.{|w~}x|}w~|Q{}w~L{|w~|G{|x~}({|w~|m{}w~|a{}m~}w{|x~} H{}x~|U{|w~p{|x~}]"
"{~|r{|}Y{}x~|mw~|_{}x~|m{}x~|[{|w~|r{}x~|Pv~|T{|w~}v{}w~|X{|w~}v{}w~|X{|w~}v{}w~|X{|w~}v{}w~|X{|w~}v{}w~|X{}w~}"
"v{}w~}_{}w~}u{|v~Xv~}J{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~fu~g{}w~|y{|v~pv~hv~}e{|v~}jv~}e{|v~}"
"jv~}e{|v~}jv~}e{|v~}jv~}e{|v~}f{|u~n{}v~}fv~}l{}x~}y{|v~|h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}_{}v~vv~}["
"{}w~}q{|}u~|`w~}uv~W{}i~}[{}i~}[{}i~}[{}i~}[{}i~}[{}i~}e{}i~}x{}k~}a{}j~|\\{}j~Y{}j~Y{}j~Y{}j~Sv~Lv~Lv~Lv~R{}j~"
"}]w~}{|m~}[{|j~|Z{|j~|Z{|j~|Z{|j~|Z{|j~|T{}u~T{|f~`{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|b{|w~}k{}w~|a"
"w~}{}m~}_{|w~}k{}w~| Xw~}s{}w~s{}w~fw~}f{}w~fw~}y{|y~|r{|y~}y{}w~fw~}l{|y~}y{}w~fw~}f{}w~X{}x~}Wv~|m{|v~ C{}w~}"
"[{|}|o{|y~|&g~|Y{}n~|b{}V~e{|g~}]v~}r{|v~}_w~}kw~}Z{|r~}X{|v~p{|w~}dw~} pw|v~l| {{v~}R{}x~}vw~}^{}Z~f{|w~|v"
"{|y~|`{}x~}s{|x~}u{}x~}Y{}v~|E{}x~}O{|w~}H{}w~|S{|}r~}|P{}w~ c{|w~Yv~|lv~|W{}w~}Ev~|N{|v~|Zw~}v{}w~}\\{|w~}|}v"
"~y}|X{}w~}>{|v~|\\{}w~}o{|v~a{}w~}l{}v~W{}v~M{}v~J{|}p~}|2{|}p~}|D{}v~|e{}x~}p{|}w~}|vx|uw~|f{}w~|v{|w~}]{}w~}m"
"{}v~c{|v~|N{}w~}fv~}d{}w~}L{}w~}T{|v~|L{}w~}hv~|Y{}w~}M{}w~}W{}w~}y{|u~}T{}w~}V{}w~|y{|w~|r{}x~}xv~|h{}w~|x{}w~"
"}qv~i{|v~|dv~}d{}w~}mv~}h{|v~|dv~}f{}w~}n{|v~|`u~D{|v~|Z{|v~h{}w~}d{|v~m{|v~|j{}w~}r{}x~}x{|w~qv~|d{}v~y|v~|Vv~"
"}x{}v~Mu~|V{|w~}K{}x~}G{|w~|]{}w~}h{|v~ U{}u~v}s~}\\w~}|v~w}t~}Zr~v}v~|^{}t~w}v~}|w~|^{}t~v}t~Zv}v~s}[{}t~w}v~}"
"|w~|`w~}|u~x}t~}Uv~Lv~Tw~}q{}v~|Uv~_w~}|v~x}s~y{|v~x}s~fw~}|u~x}t~}]{|s~x}s~|]w~}|v~w}t~}]{|t~w}v~}|w~|Zw~}|t~}"
"x~|]{}t~u}u~[{|x}v~q}]{|w~|m{}w~|av~kv~g{}w~q{}t~qv~e{}v~q{}v~_v~|m{|v~_d~Uw~}Lw~|M{|w~| J{|}v~}r{}v~}|_{}u~w}u"
"~|y{}x~}`v~q{|v~}K{}w~|\\{}w~}p~}Z{}s~w}u~}]w~}|u~x}t~}as~m{|v~W{}t~Y{|w~|m{}w~|ev~|f{|v~c{|u~}yn~a_~|dv~t{}w~t"
"{|w~}_{|t~w}t~}]{|b~}f{|`~b{}w~|l{}w~}]{}w~|v{|w~}S{|v~}T{}w~}Uv~|d{|v~|k{}v~|t{|v~s{}v~|h{}w~}hv~|i{}w~}r{|v~r"
"{|v~|l{|v~|dv~}ev~}C{}w~C{}v~|W{}w~V{}v~n{|v~|W{}w~ sv~}S{|s~}y~x}v~Z{|v~Q{|e~}[{|w~}w{|w~}Qw~|R{}r~|){}y~|w{|w"
"~}g{|y~}dw~q{}x~}S{}~}s{}y~ X{}y~|tw~s{}x~}u{|y~}-{}p~}P{}w~M{|w~|F{|x~}({|w~|m{}w~|a{}m~}w{|x~} H{}x~|Tw~p{}x~"
"|]y~}s{|y~Z{}x~|n{|x~}^{}x~|n{|w~Y{|x~}s{|x~}Ov~|T{}w~|v{|w~}X{}w~|v{|w~}X{}w~|v{|w~}X{}w~|v{|w~}X{}w~|v{|w~}Xv"
"~u{|v~_v~|u{|v~Y{|v~|J{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~f{}v~g{}w~|x{}w~}qv~i{|v~|dv~}k{|v~|d"
"v~}k{|v~|dv~}k{|v~|dv~}k{|v~|dv~}e{|u~p{}v~}f{|v~|m{}w~wv~}h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}^v~}x{}v"
"~Z{}w~}o{}v~}`w~}v{|w~|W{}u~v}s~}\\{}u~v}s~}\\{}u~v}s~}\\{}u~v}s~}\\{}u~v}s~}\\{}u~v}s~}f{}u~v}s~}{s~w}t~}cr~v}"
"v~|]{}t~v}t~[{}t~v}t~[{}t~v}t~[{}t~v}t~Tv~Lv~Lv~Lv~S{}h~|^w~}|u~x}t~}]{|s~x}s~|\\{|s~x}s~|\\{|s~x}s~|\\{|s~x}s~"
"|\\{|s~x}s~|U{}u~U{|s~x}q~|`{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|av~|m{|v~`w~}|v~w}t~}_v~|m{|v~ X{|w~"
"r{}w~rw~}h{|w~dw~}h{|w~y{|w~|t{|w~}yw~}h{|w~l{|w~}yw~}h{|w~dw~}Y{}x~}W{}w~}m{}w~} Xg|}v~s|e{|}x~}o{}y~&{}f~Y{|o"
"~}a{|V~f{|e~}_{|w~}p{|v~_w~}kw~}Z{}w~}v~Wv~|q{}w~}e{|w~ pc~} {{v~}R{|x}|v{|x}|^{}Z~f{|w~|v{|y~|`{|w~s{}x~}v"
"{|w~Wu~|F{|x}|O{}w~|H{|w~}U{|}w~|x~|w~}|R{}w~ c{}x~}Yv~|lv~|W{}w~}F{|v~N{|v~}Z{}w~u{}w~}\\{|k~}Z{}w~}x{|}u~y}|"
"L{}v~Zv~|pv~}a{|v~l{}v~|X{}v~M{}v~M{|}p~}|,{|}p~}|H{}v~|e{|w~q{|q~}y{}x~|v{|x~}fv~tv~]{}w~}n{}v~|c{|v~|N{}w~}f{"
"}v~d{}w~}L{}w~}T{}v~|L{}w~}hv~|Y{}w~}M{}w~}W{}w~}{|u~}S{}w~}V{}w~|xw~}rw~|xv~|h{}w~|x{|v~|rv~i{|v~|d{}v~d{}w~}n"
"{|v~|h{|v~|d{}v~f{}w~}n{}v~|`{}v~}|F{|v~|Z{|v~h{}w~}cv~|n{}v~i{}w~}rw~|ww~|s{|v~b{}q~}U{|v~|{|v~|N{}v~|U{|w~}K{"
"|w~G{|w~|^{}w~}f{|v~ V{}y~}|r{|u~|]r~|u{|u~}\\{}u~}s{|}y~|_{|u~|u{|}s~|_{}v~}|t{}v~}Vw~}T{|u~|u{|}s~|`r~|u{|u~|"
"Vv~Lv~Tw~}ru~|Tv~_r~|v{|}v~}{w~|u{}v~}gr~|u{|u~|^u~}|v{|}u~]r~|u{|u~|_{|u~|u{|}s~|Zr~}|v{|\\v~}|r{|}y~Wv~S{|w~|"
"m{}w~|a{}w~|m{|w~}g{}w~|rs~qw~}dv~}s{|v~|_{}w~}m{}w~|Nu~Uw~}Lw~|M{|w~| K{}r~u{|r~}a{|v~}|v{}v~yw~|`v~r{|u~|K{|w"
"~|]{}w~|xy|}t~}[u~}|s{|}~}]r~|u{|u~|ay|v~|n{}w~|X{|s~|Z{|w~|m{}w~|f{|v~dv~|e{|u~}|{|v~y|}v~}bx}u~q}u~x}|dv~t{}w"
"~t{|w~}_u~|u{|u~|_{|u~}|v{|}t~v}f{|q}u~p}b{}w~|l{|v~]v~tv~R{}v~}U{}w~}V{|v~|cv~}l{|v~}s{|v~s{|v~}h{}w~}hv~|i{}v"
"~r{|v~r{|v~|l{|v~|d{}v~fu~|C{}w~C{|u~|X{}w~W{}v~}m{}v~|X{}w~ sv~}T{|u~}|yy~}x{|}y~Z{|v~P{|g~}Y{}w~|xv~Pw~|T{|v~"
"}u~}*x~v{}w~ex~dw~qw~}U{|x~}t{}x~ Xx~sw~s{}x~}tx~,{|r~|O{}w~N{|w~|Dw~({|w~|m{}w~|a{|m~}w{|x~} H{}x~|T{}x~}qw~|]"
"x~}t{|x~|\\{}x~|nw~]{}x~|nw~|Xw~sw~|Ov~|Tv~tv~Xv~tv~Xv~tv~Xv~tv~Xv~tv~Y{|w~}tv~|a{|v~t{|v~Y{|v~|J{}w~}M{}w~}M{}"
"w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~f{|v~|h{}w~|x{|v~|rv~i{|v~|d{}v~k{|v~|d{}v~k{|v~|d{}v~k{|v~|d{}v~k{|v~|d{"
"}v~d{|u~r{}v~}e{|v~|n{}w~v{}v~h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}^{|v~|{|v~|Z{}w~}nu~`w~}v{}w~V{}y~}|r"
"{|u~|]{}y~}|r{|u~|]{}y~}|r{|u~|]{}y~}|r{|u~|]{}y~}|r{|u~|]{}y~}|r{|u~|g{}y~}|r{|o~}|u{|}v~}e{}u~}s{|}y~|^{}v~}|"
"t{}v~}]{}v~}|t{}v~}]{}v~}|t{}v~}]{}v~}|t{}v~}Uv~Lv~Lv~Lv~T{}u~}|v{|}v~}^r~|u{|u~|^u~}|v{|}u~\\u~}|v{|}u~\\u~}|v"
"{|}u~\\u~}|v{|}u~\\u~}|v{|}u~U{}u~Uu~}|u{}u~|_{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{}w~}m{}w~|`r~|u{"
"|u~|`{}w~}m{}w~| Xw~|r{}w~r{|w~hw~|d{|w~hw~|yu~|v{|u~y{|w~hw~|m{|u~y{|w~hw~|d{|w~Y{}x~}Vv~mv~| XZ~}g{}t~oy~}'{}"
"e~}Y{}p~_W~|fc~|`v~n{}w~|`w~}kw~}Zv~|}w~|X{}w~}qv~|e{}x~} q{|c~| {{v~} y{|x~}t{}x~}]{|w~}v{|y~|_w~|u{|w~|vw"
"~|Wt~ p{}w~|H{|v~V{}w~}yx~y{}w~}S{}w~ cw~|Z{|v~k{}w~}W{}w~}Fv~}Qy|u~}Z{|w~|u{}w~}\\{|i~|\\v~|y{}p~}|Nv~}Z{|v~|"
"s{|v~}`{|v~lu~|X{}v~M{}v~P{|}p~}|b{|Z~}b{|}p~}|L{}v~}d{}x~|r{|n~{}x~|uw~|h{}w~}t{}w~|^{}w~}q{|}u~}b{}v~M{}w~}f{"
"}v~d{}w~}L{}w~}T{}v~K{}w~}hv~|Y{}w~}M{}w~}W{}w~}|u~}R{}w~}V{}w~|x{|w~s{}w~wv~|h{}w~|w{}w~}rv~i{}v~c{}v~d{}w~}n{"
"}v~|h{}v~c{}v~f{}w~}o{|u~_{|t~}|H{|v~|Z{|v~h{}w~}c{}v~nv~}i{|v~s{|w~|w{}x~}s{}w~}b{|q~S{}v~|v~}N{}v~}T{|w~}K{|w"
"~|H{|w~| s{}|m{}w~}]t~}q{}v~|^{}v~}ny|_u~q{}t~|`{|v~|q{|v~|Ww~}Tu~q{|t~|`t~}r{|v~}Vv~Lv~Tw~}t{|u~Rv~_t~}r{}v~}"
"y~}r{}v~gt~}r{|v~}_{}v~|r{|v~}^s~q{}v~_{}v~|r{}t~|Zs~T{|w~}m{|Wv~S{|w~|m{}w~|a{|w~}mv~|g{|w~}s{|s~|s{|w~|d{|v~|"
"u{|v~}]v~mv~N{}v~Tw~}Lw~|M{|w~| L{}p~w{|p~}bv~}s{}w~y|w~_v~wx|}t~}J{|w~}^{}w~r{}u~|]{|v~|Ot~}r{|v~}_{|v~nv~W{}s"
"~}Z{|w~|m{}w~|f{}w~}d{}w~}eu~}x{|w~|x{}v~|`{|w~}q{|w~}`v~t{}w~t{|w~}`{}v~q{}v~_u~}r{|v~}V{|w~}Wv~|l{|v~^{}w~}t{"
"}w~|R{}v~}V{}w~}V{|v~bv~}l{|v~|s{|v~r{}v~h{}w~}hv~|i{}v~r{|v~r{}v~k{}v~c{}v~gu~|B{}w~B{|u~|Y{}w~X{}v~}k{}v~|Y{}"
"w~ sv~}Tu~|wy~}u{|Z{|v~O{|u~}|x{|}v~}_{|p~}y{|p~}Ww~|Tw~}y{|t~|,y~}vw~|e{}y~dw~|s{}w~}V{|w~}u{}w~ Xy~}sw~s{}x~}"
"t{}y~*y}x~}|[m|}w~l|^{}w~C{|x~}({|w~|m{}w~|`m~}w{|x~} H{}x~|T{|w~|s{}x~}\\w~}u{|w~|]{}x~|o{}x~}]{}x~|o{}x~}Ww~t"
"{}x~}Nv~|U{}w~}t{}w~|Z{}w~}t{}w~|Z{}w~}t{}w~|Z{}w~}t{}w~|Z{}w~}t{}w~|Z{}w~|t{|w~}av~}t{|v~Y{}v~I{}w~}M{}w~}M{}w"
"~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~f{|v~|h{}w~|w{}w~}rv~i{}v~c{}v~k{}v~c{}v~k{}v~c{}v~k{}v~c{}v~k{}v~c{}v~c{|"
"u~t{}v~}d{}v~n{|w~|v{|v~h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}]{}v~|v~}Y{}w~}n{|v~|aw~}vv~V{}|m{}w~}]{}|m"
"{}w~}]{}|m{}w~}]{}|m{}w~}]{}|m{}w~}]{}|m{}w~}g{}|m{}r~|q{|v~|g{}v~}ny|_{|v~|q{|v~|_{|v~|q{|v~|_{|v~|q{|v~|_{|v~"
"|q{|v~|Vv~Lv~Lv~Lv~U{|v~}q{|v~|_t~}r{|v~}_{}v~|r{|v~}^{}v~|r{|v~}^{}v~|r{|v~}^{}v~|r{|v~}^{}v~|r{|v~}V{}u~V{}v~"
"|r{|v~}_{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|`v~mv~_s~q{}v~_v~mv~ X{|w~q{}w~q{}x~|j{|w~b{}x~|j{|w~wu~"
"|x{|u~|x{}x~|j{|w~m{|u~|x{}x~|j{|w~b{}x~|Z{}x~}V{}w~|o{|v~ WZ~}gx~}w~|q{}y~|({|c~}_v|{}r~u|d{}X~f{}b~|b{|w~}mw~"
"}`w~}kw~}[{|v~{}w~}X{|w~}r{|v~d{}x~| q{}c~ yv~} y{}x~}t{}x~}\\v~}w{|y~|_{}w~|vw~}v{|x~}X{|r~ qv~Fv~X{}w~}|x"
"x~x{|}w~}U{}w~ d{|w~Y{|v~k{}w~}W{}w~}G{}v~|Xm~}Y{}x~}t{}w~}\\{|h~}]v~y|l~}P{|v~|Y{|u~u|}v~}_{|v~|n{|u~|X{}v~M{"
"}v~R{|o~}|`{|Z~}_{|}p~}|P{}v~}cw~r{|l~}x~|u{|x~|hv~|t{|v~^{}e~}a{}v~M{}w~}f{|v~|e{}d~|_{}g~|d{}v~K{}^~|Y{}w~}M{"
"}w~}W{}p~|Q{}w~}V{}w~|ww~|tw~}wv~|h{}w~|vv~|sv~i{}v~c{|v~|e{}w~}o{|u~g{}v~c{|v~|g{}w~}p{|u~|^{}q~y}|M{|v~|Z{|v~"
"h{}w~}c{|v~|p{|v~gv~|t{|w~v{|x~}sv~|a{|s~|Rq~}N{}v~}S{|w~}Jw~}H{|w~| bv~|^t~ov~}^v~}P{|v~|p{}u~|`v~|o{|v~Ww~}U"
"{|v~o{}u~|`u~}p{|v~Vv~Lv~Tw~}u{|v~}Qv~_u~}pt~}pv~|hu~}p{|v~`{|v~|p{|v~|_t~ov~}a{|v~|p{}u~|Zt~S{}w~Gv~S{|w~|m{}w"
"~|`v~|o{|v~ev~s{|x~y}x~}s{}w~|c{}v~uv~}\\{}w~|o{|w~}O{}v~|U{|w~}Lw~|M{|w~} M{|x~}x|}w~}xv~}x|}x~|d{}v~qw~y}x~}_"
"v~x{}q~}I{|w~}_{|w~|q{|u~]{}w~|Nu~}p{|v~^{}w~|p{|w~}X{|q~Z{|w~|m{}w~|fv~|d{|v~f{|v~}w{}w~|wu~`{|w~}q{|w~}`v~t{}"
"w~t{|w~}a{|v~ov~}a{|v~}p{}v~|W{|w~}Wv~}l|}v~^v~|t{|v~Q{}v~}W{}w~}V{|v~b{}w~}l{}v~r{|v~r{}v~|i{}w~}hv~|i{|v~|s{|"
"v~r{}v~k{}v~xi~}y{|v~|iu~|A{}w~A{|u~|Z{}w~Y{}v~}i{}v~|Z{}w~ sv}|U{}v~|vy~}S{|v~O{|w~}s{|v~_{|o~|{o~}Ww~|U{}x~}v"
"{}u~}.{|y~|w{|w~d{|y~|e{}w~t{}v~}W{|v~|v{}w~}cY|8{|y~|sw~sw~|t{|y~| `{|Z~}_{}x~}C{|w~}({|w~|m{}w~|`{|n~}w{|x~} "
"H{}x~|Sv~|u{}w~|\\{}v~v{|v~|^{}x~|p{|w~\\{}x~|p{|w~W{|x~}u{|w~Mv}|Uv~|t{|v~Zv~|t{|v~Zv~|t{|v~Zv~|t{|v~Zv~|t{|v~"
"Zv~rv~b{|v~s{|c~l{}v~I{}d~|`{}d~|`{}d~|`{}d~|W{}w~}M{}w~}M{}w~}M{}w~}Z{|v~ev~}h{}w~|vv~|sv~i{}v~c{|v~|l{}v~c{|v"
"~|l{}v~c{|v~|l{}v~c{|v~|l{}v~c{|v~|c{|u~v{}v~}c{}v~o{|w~|u{|v~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}\\q~"
"}X{}w~}mv~}aw~}vv~Ev~|Mv~|Mv~|Mv~|Mv~|Mv~|Ws~|o{}w~}gv~}Ov~|o{|v~_v~|o{|v~_v~|o{|v~_v~|o{|v~Vv~Lv~Lv~Lv~Uv~}o{}"
"w~}_u~}p{|v~`{|v~|p{|v~|`{|v~|p{|v~|`{|v~|p{|v~|`{|v~|p{|v~|`{|v~|p{|v~|Wt|W{|v~|q{}u~|`{|w~|m{}w~|a{|w~|m{}w~|"
"a{|w~|m{}w~|a{|w~|m{}w~|`{}w~|o{|w~}_t~ov~}`{}w~|o{|w~} X{}x~}q{}w~q{|x~}j{}x~}b{|x~}j{}x~}vu~|yu~|w{|x~}j{}x~}"
"mu~|w{|x~}j{}x~}b{|x~}Z{}x~}V{|v~o{}w~} WZ~}g{}|yw~}qx~'a~|c{|}t~}k~}|fY~}g{}`~b{|w~|m{}w~`w~}kw~}[{|w~}{|v~Wv~"
"r{}w~}dw~| lv~| kv~| yw~|tw~|\\{}v~}|y{|y~|^v~}y|}v~uw~X{|p~ rv~Fv~Xw~|vx~v{|w~U{}w~ d{}x~}Y{|v~k{}w~}W{}w"
"~}H{|v~}Wo~}|Y{|w~|t{}w~}\\{|v~x}|x}s~}^v~|j~}Q{}w~}V{}l~}]v~}n{}u~}X{}v~M{|v}U{|}p~}|]{|Z~}\\{}o~|S{}v~}c{|x~}"
"rv~}|w{|}t~|tx~}i{|v~rv~|_{}h~}|_v~}M{}w~}f{|v~|e{}d~|_{}g~|dv~}K{}^~|Y{}w~}M{}w~}W{}q~|P{}w~}V{}w~|w{}w~u{|w~|"
"wv~|h{}w~|v{}w~}sv~iv~}c{|v~|e{}w~}p{|u~|gv~}c{|v~|g{}w~}sy|}u~}\\{}m~}|Q{|v~|Z{|v~h{}w~}bv~}p{}w~}g{}w~}t{}x~}"
"v{|w~sv~|`{}u~}Q{|r~|O{|u~R{|w~}J{}w~H{|w~| b{|w~}^u~|o{|v~_{}v~Ov~}nu~|a{}w~}m{}w~|Xw~}Uv~|nu~|`u~nv~|Wv~Lv~T"
"w~}v{}v~}Pv~_u~o{}u~|p{}w~}hu~nv~|a{}w~}n{}w~}_u~|o{|v~a{}w~}nu~|Zu~|S{}w~Gv~S{|w~|m{}w~|`{}w~}o{}w~}e{}w~s{}x~"
"}|w~sv~a{}v~w{}v~[{|w~}ov~|P{}v~|T{|w~}Lw~|M{|w~}:{|4x~|v{|w~}{}x~}u{}x~dv~}q{}s~|_v~x{}r~}S{|y}~y}|w{|w~}_w~}o"
"{|v~}^{}w~Mu~nv~|_{|w~}pv~|X{}w~}v~|[{|w~|m{}w~|g{|v~bv~|g{}v~v{}w~v{|v~|a{|w~}q{|w~}`v~t{}w~t{|w~}a{}w~|o{|v~a"
"{}v~nv~}W{|w~}W`~_{|v~rv~|Q{}v~|X{}w~}V{|v~b{}w~}lu~r{|v~r{|v~|i{}w~}hv~|hv~}s{|v~rv~}kv~}xi~}y{|v~|ju~|@{}w~@{"
"|u~|[{}w~Z{}v~}g{}v~|[{}w~ Gv~}uy~}S{|v~Ow~}q{|w~|`{|n~}o~}Ww~|Uw~|t{}u~|0{|y~|w{|x~}d{|y~|e{|v~}w|t~}X{|v~|vv~"
"}c{|Z~}8{|y~|sw~t{}w~s{|y~| `{|Z~}`{}x~}M{|~}|v{|}v~'{|w~|m{}w~|_{}o~}w{|x~}Vv}| s{}x~|S{|v~}|{y|}w~}Z{}v~|w{|v"
"~}_{}x~|pw~|o{}w~m{}x~|p{}x~|vy|}w~y}|g{|w~|u{}x~|o{}w~3{|v~rv~|\\{|v~rv~|\\{|v~rv~|\\{|v~rv~|\\{|v~rv~|\\{}w~}"
"r{}w~|c{}w~}s{|c~lv~}I{}d~|`{}d~|`{}d~|`{}d~|W{}w~}M{}w~}M{}w~}M{}w~}_{}i~}nv~}h{}w~|v{}w~}sv~iv~}c{|v~|lv~}c{|"
"v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|b{|u~x{}v~}bv~}p{|w~}t{|v~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}\\{|r~|"
"X{}w~}mv~}aw~}v{}w~}F{|w~}M{|w~}M{|w~}M{|w~}M{|w~}M{|w~}W{|u~}m{}w~h{}v~O{}w~}m{}w~|a{}w~}m{}w~|a{}w~}m{}w~|a{}"
"w~}m{}w~|Wv~Lv~Lv~Lv~V{}v~n{|v~_u~nv~|a{}w~}n{}w~}`{}w~}n{}w~}`{}w~}n{}w~}`{}w~}n{}w~}`{}w~}n{}w~},{}w~}q{}t~}`"
"{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|`{|w~}ov~|_u~|o{|v~`{|w~}ov~| X{}x~|q{}w~q{|w~j{}x~|b{|w~j{}x~|u"
"u~|u~|v{|w~j{}x~|nu~|v{|w~j{}x~|b{|w~Zw~}Uv~|q{|v~ VZ~}c{}w~r{|y~}({}`~d{}^~|h{|Z~g{|_~}c{}w~l{|w~`w~}kw~}[{}w~"
"|yv~|X{}w~|sv~|dV~} 2v~| k{}w~| {{|w~t{|w~Zs~y}y~|^{|o~|v{}x~}rx|e{|v~y}u~n{|w~},{|v~Fv~|Y{|~}tx~t{}~|U{}w~ "
" dw~|Y{|v~k{}w~}W{}w~}Hu~Vp~}|Y{|w~}s{}w~}\\{|~}|q{}t~|`{|q~}|xy|t~|Rv~|U{|}p~|[{}v~|ot~} V{|}p~}|Z{|Z~}Z{|}p~}"
"|W{}v~|b{}x~|s{}w~|s{|u~|tw~i{}w~}r{}w~}_{}g~}|`v~}M{}w~}f{|v~|e{}d~|_{}g~|dv~}K{}^~|Y{}w~}M{}w~}W{}q~O{}w~}V{}"
"w~|w{|w~|v{}w~vv~|h{}w~|uv~|tv~iv~}c{|v~|e{}w~}sy|s~fv~}c{|v~|g{}f~}Z{}k~}S{|v~|Z{|v~h{}w~}b{|v~pv~|g{}w~}tw~|u"
"w~|u{|v~_{}u~O{}t~|O{|u~|R{|w~}J{|w~|I{|w~| aw~}^v~}m{}w~}`v~|P{|v~m{}v~|av~l{|w~}Xw~}V{|v~m{|v~|`v~}n{}w~|Wv~"
"Lv~Tw~}w{}v~}Ov~_v~}o{|v~}o{|w~}hv~}n{}w~|av~|n{|v~|`u~mv~|bv~m{}v~|Zv~}R{}w~Gv~S{|w~|m{}w~|`{|v~ov~d{}w~|tw~|{"
"w~|u{|w~}`v~}y{|v~|Z{}w~|q{|v~P{}v~|Sv~|Lw~|Lv~|W{|y}w~}|iy}5{|y~}sw~|x~}s{}y~|f{|v~|ps~^v~x{}q~}|W{|r~|y{|w~}`"
"{}w~m{}v~^{}w~Mv~}n{}w~|^{}w~q{|v~Wv~y|w~}[{|w~|m{}w~|g{}v~b{}w~}h{|v~|v{}w~u{}w~}a{|w~}q{|w~}`v~t{}w~t{|w~}av~"
"mv~|c{|v~|n{|v~W{|w~}W`~_{}w~}r{}w~}Q{|v~}X{}w~}V{|v~b{}w~}lv~}r{|v~r{|v~|i{}w~}hv~|h{}v~s{|v~s{|v~|kv~}xi~}y{|"
"v~|ku~|?{}w~?{|u~|\\{}w~[{}v~}e{}v~|\\{}w~ H{}v~ty~}S{|v~P{|w~o{}w~_s|}r~s|Vw~|V{|w~r{|u~0{|y~v{}x~}d{|y~|d{}o~"
"|x~}Y{}v~v{|v~|b{|Z~}8{|y~rw~u}v~|s{|y~| `{|Z~}a{}l~|X{|m~|'{|w~|m{}w~|^o~}w{|x~}W{|v~| xm~}W{|n~}X{|v~|vv~}e{}"
"n~}v{}x~}o{|v~m{}x~|q{|w~w{|o~|t{|~}y|w{|}v~u{|x~}o{|v~3{}w~}r{}w~}\\{}w~}r{}w~}\\{}w~}r{}w~}\\{}w~}r{}w~}\\{}w"
"~}r{}w~}\\v~|r{|w~}cv~|s{|c~lv~}I{}d~|`{}d~|`{}d~|`{}d~|W{}w~}M{}w~}M{}w~}M{}w~}_{}i~}nv~}h{}w~|uv~|tv~iv~}c{|v"
"~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|a{|u~|}v~}av~}pw~}s{|v~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}["
"{}t~|W{}w~}mv~}aw~}v{}v~|Fw~}Lw~}Lw~}Lw~}Lw~}Lw~}Vu~l{|w~|iv~|Ov~l{|w~}av~l{|w~}av~l{|w~}av~l{|w~}Wv~Lv~Lv~Lv~V"
"v~|mv~|`v~}n{}w~|av~|n{|v~|av~|n{|v~|av~|n{|v~|av~|n{|v~|av~|n{|v~|-v~|r{|x~}v~`{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{"
"}w~|a{|w~|m{}w~|_{}w~|q{|v~^u~mv~|`{}w~|q{|v~ Ww~p{}w~pw~jw~yd|yw~jw~t{|p~|tw~jw~nu~|tw~jw~pv~}qw~Zw~|U{}w~}q{}"
"w~} F{}w~}W{|w~|s{}y~|){|_~}f{}\\~|h{}\\~|g{}^~c{}w~l{|w~|aw~}kw~}[v~x{}w~}X{|w~}t{|v~cV~} 2v~| k{}w~| {{|x~"
"}t{|x~}Z{|o~}y|`{|}r~|v{|w~t{}u~}|hv~}y{}u~o{|w~|,{|v~F{}w~|X{|sx~s{|T{}w~ e{|w~X{|v~k{}w~}W{}w~}Iu~|Vm~|[{}w~"
"r{}w~}L{}u~`{|r~|s{|u~S{}v~V{|}m~}|\\u~p{}t~} Y{|}p~}|VY|W{|}p~}|[{|v~|aw~rw~}q{|v~|t{}x~iv~q{|v~_{}e~}av~}M{}w"
"~}f{|v~|e{}d~|_{}g~|dv~}m{}n~|h{}^~|Y{}w~}M{}w~}W{}q~}P{}w~}V{}w~|vw~}vw~}vv~|h{}w~|u{}v~tv~iv~}bv~|e{}e~|fv~}b"
"v~|g{}g~}X{|}k~}U{|v~|Z{|v~h{}w~}av~|r{|v~f{|v~u{|w~|u{}x~}u{}w~}`{|t~|O{}v~}Nu~|Q{|w~}Iw~}I{|w~| a{}w~^v~|m{|"
"w~}a{|v~O{|w~}lv~|b{|w~}kv~Xw~}V{|w~}lv~|`v~|n{|w~}Wv~Lv~Tw~}x{}v~|Nv~_v~|nv~|nv~hv~|n{|w~}b{|v~lv~|`v~}m{|w~}c"
"{|w~}m{|v~|Zv~|R{}w~|Hv~S{|w~|m{}w~|_{}w~|q{|w~}d{|w~}u{|w~y{}x~|u{|w~|`{|v~y|v~}Y{|w~}q{}w~|Q{|v~}S{}v~Kw~|L{}"
"w~}Y{|p~}|n{|y~}5{}y~r{|t~qy~}f{}v~ot~}^v~x{}o~}Y{}p~|{|w~|`w~}lv~|_{|w~}Nv~|n{|w~}^{|w~|r{}w~|X{}w~}yv~[{|w~|m"
"{}w~|gv~}b{}v~h{|v~u{}w~u{|v~a{|w~}q{|w~}`v~t{}w~t{|w~}b{|w~}m{|w~}c{|v~lv~|X{|w~}W`~_v~|r{|v~Qu~W{}w~}V{|v~b{}"
"w~}lv~}r{|v~qv~|i{}w~}hv~|h{|v~|t{|v~s{}v~jv~}xi~}xv~|lu~[|]{}w~\\\\|u~|]{}w~\\{}v~}c|u~|]{}w~ H{}w~}ty~}X{}g~|"
"[{}x~}nw~Vs~|Nw~|V{}x~}pv~}1{}y~v{}x~}d{|y~}c{}r~}{|x~}Z{}w~}v{|v~|a{|Z~}8{}y~rn~}q{|y~} `{|Z~}a{}l~|X{|o~}|&{|"
"w~|m{}w~|]{}q~}w{|x~}W{|v~| xm~}V{|}q~|V{|v~|v{}w~}fm~}vw~o{|u~rm~}vw~|w{}n~|u{|m~|uw~|p{|u~3v~q{|v~\\v~q{|v~\\"
"v~q{|v~\\v~q{|v~\\v~q{|v~]{|v~pv~|e{}w~}r{|c~lv~}I{}d~|`{}d~|`{}d~|`{}d~|W{}w~}M{}w~}M{}w~}M{}w~}_{}i~}nv~}h{}w"
"~|u{}v~tv~iv~}bv~|lv~}bv~|lv~}bv~|lv~}bv~|lv~}bv~|`{|p~}`v~}q{}x~}qv~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}"
"w~}Z{}v~}V{}w~}mv~}aw~}uu~}G{}w~L{}w~L{}w~L{}w~L{}w~L{}w~V{}w~}kw~}j{|v~O{|w~}kv~b{|w~}kv~b{|w~}kv~b{|w~}kv~Wv~"
"Lv~Lv~Lv~W{|v~l{}w~}`v~|n{|w~}b{|v~lv~|b{|v~lv~|b{|v~lv~|b{|v~lv~|b{|v~lv~|.{|v~r{|w~{}w~|a{|w~|m{}w~|a{|w~|m{}"
"w~|a{|w~|m{}w~|a{|w~|m{}w~|_{|w~}q{}w~|^v~}m{|w~}`{|w~}q{}w~| Ww~yd~|{w~jw~yd~|{w~jw~s{|r~|sw~jw~ou~|sw~jw~pv~}"
"qw~Zw~|U{|v~qv~| G{}w~}Uw~}sx~({}^~g{}Z~g]~}f{|_~|cw~}l{|w~|aw~}kw~}\\{|v~x{|v~Wv~t{}w~}cV~} 2v~| k{}w~| {{}"
"x~}t{}x~}Y{|}m~}`{|}w~}|tw~|v{|q~}j{}v~w{}u~p{}w~|,{|w~}F{}w~|Ox~Z{|Z~} t{}x~}X{|v~k{}w~}W{}w~}J{}v~|Ut|}t~}]{"
"|w~|r{}w~}K{}v~|a{|s~p{|v~}Tv~}W{}i~}]{}u~|t{|}s~} Z{|q~}| e{|}q~}\\v~}`x~}s{}w~ov~|t{}x~|k{|w~}p{}w~|`{}w~}p|}"
"t~|cv~}M{}w~}f{|v~|e{}w~}i|^{}w~}l|cv~}m{}n~|h{}w~}h|v~|Y{}w~}M{}w~}W{}w~}u~}Q{}w~}V{}w~|v{}w~w{|w~uv~|h{}w~|tv"
"~|uv~iv~}c{|v~|e{}f~|ev~}c{|v~|g{}i~}S{|}m~}V{|v~|Z{|v~h{}w~}a{}w~}rv~}ev~|v{|w~t{|w~uv~|`r~O{|v~|O{}v~}P{|w~}I"
"{}w~I{|w~| a{}w~^v~|lv~a{}w~}O{}w~|lv~|b{|w~|k{}w~Xw~}V{}w~|lv~|`v~m{|w~}Wv~Lv~Tw~}yu~|Mv~_v~mv~mv~hv~m{|w~}b{"
"}w~}l{}w~}`v~|m{|v~c{}w~|lv~|Zv~Q{}v~|Iv~S{|w~|m{}w~|_{|w~}q{}w~|cv~u{}x~}y{}x~}u{}w~^{}q~}Wv~qv~Q{|v~}Uy|}v~|K"
"w~|L{|u~}|^{|k~}|s{|}x~}5y~}q{}v~|q{}y~f{}w~}o{}u~|^v~ty|}s~[{|u~y}v~y|w~|a{|w~}l{}w~}^{}w~|Ov~m{|w~}]w~}rv~Wv~"
"|y{}w~}\\{|w~|m{}w~|gv~|b{|v~h{}w~}u{}w~tv~a{|w~}q{|w~}`v~t{}w~t{|w~}b{}w~|m{|v~c{}w~}l{}w~}X{|w~}W`~`{|w~}pv~|"
"S{}v~|W{}w~}V{|v~bv~}lv~}r{|v~r{|v~|i{}w~}hv~|gu~t{|v~t{|v~}jv~}xh|y{|v~|mT~]{}w~]T~|^{}w~]{}U~|^{}w~ Hv~|ty~}X"
"{}g~|[w~|nw~|W{}u~}Mw~|V{}w~ov~1{|y~v{}x~}d{|y~|ay}x~y}ww|[{}w~}v{|v~|`{|Z~}8{|y~ro~o{|y~| Q{}w~R{}l~|V{|y}v~y}"
"|${|w~|m{}w~|\\{|}s~}w{|x~}W{|v~| xm~}T{|y}w~}|S{|v~|v{}w~}gm~}w{}x~}oy~y}x~rm~}w{}x~}v{}~}y|w{|v~u{|o~}t{}x~}o",
"t~^v|V{|w~}p{}w~|^{|w~}p{}w~|^{|w~}p{}w~|^{|w~}p{}w~|^{|w~}p{}w~|^{}w~}p{}w~}ev~|r{|v~h|lv~}I{}w~}i|_{}w~}i|_{}"
"w~}i|_{}w~}i|V{}w~}M{}w~}M{}w~}M{}w~}_v}u~r}nv~}h{}w~|tv~|uv~iv~}c{|v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|"
"_{|r~}_v~}r{}w~q{|v~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}Z{|v~|V{}w~}mv~}aw~}u{|t~|I{}w~L{}w~L{}w~L{}w~"
"L{}w~L{}w~V{}w~|kv~j{}w~}O{|w~|k{}w~b{|w~|k{}w~b{|w~|k{}w~b{|w~|k{}w~Wv~Lv~Lv~Lv~W{}w~}l{|w~}`v~m{|w~}b{}w~}l{}"
"w~}b{}w~}l{}w~}b{}w~}l{}w~}b{}w~}l{}w~}b{}w~}l{}w~}eY|f{}w~}rw~y{|w~}a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|"
"m{}w~|^v~qv~]v~|m{|v~_v~qv~ Vw~yd~|{}x~|kw~yd~|{}x~|kw~r{|t~|r{}x~|kw~pu~|r{}x~|kw~pv~}q{}x~|[w~|T{}w~|s{|v~ G{"
"}v~T{}w~t{|y~}(]~|i{|Y~}h{|_~}d{|a~}bw~}kw~|aw~}kw~}\\{}w~}wv~|Xv~|u{}w~|cV~} 2v~| k{}w~| {{w~|tw~|W{|}m~}T{"
"}x~}v{|o~}l{|v~|v{}u~q{}w~+{|w~}F{}w~|Ox~Z{|Z~}+m| ww~|X{|v~k{}w~}W{}w~}K{}v~}K{|}v~}^w~}q{}w~}Ju~a{|t~|o{}v~U{"
"|v~|X{}u~}|wy|u~}]t~}y|{y|}q~} Z{|t~}| _{|}t~}\\v~`{|x~}s{}x~}o{|w~|t{}x~|kv~|p{|w~}`{}w~}n{|u~cv~}M{}w~}f{|v~|"
"e{}w~}L{}w~}Tv~}m{}n~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}|u~}R{}w~}V{}w~|v{|w~|x{}x~}uv~|h{}w~|t{|v~uv~iv~}c{|v~|e{}h~"
"}cv~}c{|v~|g{}h~}Qy|y}p~W{|v~|Z{|v~h{}w~}a{|v~s{|v~|e{}w~}v{}x~}t{|w~uv~|a{}r~}P{|v~|P{}v~}O{|w~}I{|w~|J{|w~| "
"n{|y}l~^v~kv~a{}w~|Ov~|l{}w~|b{}w~|k{}w~|Yw~}Vv~|l{}w~|`v~m{|w~}Wv~Lv~Tw~}|u~Kv~_v~mv~mv~hv~m{|w~}b{}w~|l{|v~`v"
"~kv~c{}w~|l{}w~|Zv~Pu~}|Kv~S{|w~|m{}w~|^v~qv~b{}w~u{}x~|y{|w~uv~]{}r~V{}w~|s{|w~}R{|v~}X{|q~}Jw~|K{|q~}c{}g~}w|"
"}u~}5y~}pw~}p{}y~fv~|o{}u~]v~p{|t~\\v~}w{|w~}w~|a{}w~|l{|w~}]{}w~}y|Rv~m{|w~}]{}w~s{}w~}X{}w~}x{|v~\\{|w~|m{}w~"
"|h{|v~|b{|v~|i{}w~|u{}w~tv~|b{|w~}q{|w~}`v~t{}w~t{|w~}bv~kv~c{}w~|l{|w~}X{|w~}Wv~jv~`v~|p{}w~}T{}v~|V{}w~}V{|v~"
"|cv~|lv~}r{|v~r{|v~|i{}w~}hv~|g{}v~}u{|v~tu~|jv~}c{|v~|n{|T~]{}w~]T~}^{}w~]T~}^{}w~ I{|v~sy~}X{}g~|[w~m{}x~|Vu~"
"|#{|w~|p{|w~|2{|y~|w{|x~}d{|y~|3v~}v{}v~|Aw~}8{|y~|sw~x{|w~}p{|y~| Q{}w~ p{|w~|m{}w~|Y{|}v~}w{|x~}W{|v~| jv~}"
"v{}v~|W{|w~o{}y~{}x~r{}n~}x{|w~uy|rw~|ty|t}|s{|w~o{}y~|}x~^{}w~|Wv~|p{|w~}^v~|p{|w~}^v~|p{|w~}^v~|p{|w~}^v~|p{|"
"w~}^v~|p{|v~f{|v~q{|v~Yv~}I{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~ev~}h{}w~|t{|v~uv~iv~}c{|v~|lv~}"
"c{|v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|^{|t~}^v~}s{}w~p{|v~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}Z{|v~|V{}w"
"~}n{|v~|aw~}t{}t~}W{|y}l~Y{|y}l~Y{|y}l~Y{|y}l~Y{|y}l~Y{|y}l~c{|y}l~j{}w~j{}w~|O{}w~|k{}w~|c{}w~|k{}w~|c{}w~|k{}"
"w~|c{}w~|k{}w~|Xv~Lv~Lv~Lv~W{}w~|l{|v~`v~m{|w~}b{}w~|l{|v~b{}w~|l{|v~b{}w~|l{|v~b{}w~|l{|v~b{}w~|l{|v~f{|Z~}f{}"
"w~|s{}x~|y{|w~}a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|^{}w~|s{|w~}]v~kv~_{}w~|s{|w~} Vw~yd~|{}x~|kw~yd"
"~|{}x~|kw~qt~|r{}x~|kw~qu~|q{}x~|kw~pv~}q{}x~|[w~|T{|w~}s{}w~} H{|v~|T{|w~|u{}y~({|]~}i{}X~g{|`~b{}b~aw~}kw~}aw"
"~}kw~}\\v~|w{}w~}X{}w~}uv~bw~}Z| 5x|v~}p| v{}w~| {|w~t{|w~S{|}n~|Vw~uv~|y{|}w~}m{}w~}t{}u~rw~}+{|w~}F{}w~|Ox"
"~Z{|Z~},{|m~ x{|w~|X{|v~k{}w~}W{}w~}L{}v~}H{}v~}`{}w~p{}w~}J{}v~`t~n{|v~|V{}v~X{}v~}q{}v~}^{|j~|v~| Z{|t~| ]{|}"
"u~}]{|w~}`{|x~|sw~|o{|w~|t{}x~|l{|v~nv~`{}w~}lv~}dv~}M{}w~}f{|v~|e{}w~}L{}w~}Tv~}m{}n~|h{}w~}hv~|Y{}w~}M{}w~}W{"
"}w~}{|t~S{}w~}V{}w~|u{}x~}y{|w~|uv~|h{}w~|sv~|vv~iv~}c{|v~|e{}k~}|av~}c{|v~|g{}w~}t|y}u~}M{|}s~}X{|v~|Z{|v~h{}w"
"~}`v~}t{}v~d{}w~}vw~|sw~|w{|v~a{|v~}v~|Q{|v~|Q{|u~N{|w~}Hw~|J{|w~| p{}h~|_v~k{}w~|bv~|Ov~k{}w~|bv~j}v~|Yw~}Vv~"
"k{}w~|`w~}m{|w~}Wv~Lv~Tq~}Jv~_w~}mv~mv~hw~}m{|w~}bv~|l{|v~`v~kv~|dv~k{}w~|Zv~P{}r~}y|Pv~S{|w~|m{}w~|^{}w~|s{|w~"
"}b{|w~|vw~|xw~|w{|w~}\\s~|Uv~sv~|Ru~W{|s~}|Iw~|I{|}t~}d{|u~}w|}g~}5{|y~|p{|x~|p{}y~fv~|o{|v~}]v~n{}v~|^{}w~|ts~"
"`v~|l{|v~\\{}p~}Xw~}m{|w~}]{|w~|tv~|Xv~|wv~|]{|w~|m{}w~|h{|v~|q{}x~}q{|v~|iv~|u{}w~t{}w~|b{|w~}q{|w~}`v~t{}w~t{"
"|w~}bv~kv~|dv~|l{|v~X{|w~}Wv~|l{|v~a{|v~nv~U{|v~}U{}w~}Uv~}d{|v~|l{}v~r{|v~r{|v~|i{}w~}hv~|fu~|v{|v~u{}v~}iv~}c"
"{|v~|n{|T~]{}w~]T~}^{}w~]T~}^{}w~ rw|V{|w~}sy~}X{|w}u~q}Zw~m{}x~|V{}v~\"{|v~ow~|2{|y~|w{|w~d{|y~|4{}w~}v{|v~?w~"
"}8{|y~|sw~vw~}q{|y~| Q{}w~ p{|w~|m{}w~|Ux~}w{|x~}W{|v~| i{}w~|v{|v~Ww~|p{|y~|{}x~`{}x~|j{|x~}bw~|p{|y~}{}x~^{"
"}w~|X{|v~nv~_{|v~nv~_{|v~nv~_{|v~nv~_{|v~nv~_{|w~}nv~|g{}w~}q{|v~Yv~}I{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}"
"M{}w~}Z{|v~ev~}h{}w~|sv~|vv~iv~}c{|v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|lv~}c{|v~|]{}u~|^v~}t{|w~|p{|v~|i{|v~h{}w~}"
"f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}Z{|v~|V{}w~}n{}v~|aw~}s{|s~|[{}h~|\\{}h~|\\{}h~|\\{}h~|\\{}h~|\\{}h~|f{}h~j}v~"
"jv~|Ov~j}v~|cv~j}v~|cv~j}v~|cv~j}v~|Xv~Lv~Lv~Lv~Wv~|l{|v~`w~}m{|w~}bv~|l{|v~bv~|l{|v~bv~|l{|v~bv~|l{|v~bv~|l{|v"
"~f{|Z~}fv~|t{}x~|wv~a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|]v~sv~|]v~kv~|_v~sv~| Vw~yd~|{w~jw~yd~|{w~j"
"w~rr~|sw~jw~ru~|pw~jw~pv~}qw~Zw~|Sv~sv~ H{|v~|Rw~}uy~}({|]~}i{}X~|g{}b~|a{}d~|aw~}kw~}aw~}kw~}]{|v~v{|v~X{|v~v{"
"|w~}b{}x~} pf~ v{|w~ {{|w~t{|x~}P{|y~}r~W{}x~|v{}w~u{}w~mv~r{}u~t{|w~|+{|v~F{}w~|Ox~Z{|Z~},{|m~ x{}w~W{|v~k"
"{}w~}W{}w~}M{}v~}F{}v~a{|w~|p{}w~}Iv~|au~}mv~}Vv~|Y{|v~}o{|v~|]{}m~|{v~| Z{|r~}| c{|}r~}]{|w~}`{|x~|sw~|nw~|t{}"
"x~k{}w~}n{}w~}a{}w~}l{|v~|e{}v~M{}w~}f{}v~d{}w~}L{}w~}T{}v~mr|v~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}y{|t~T{}w~}V{}w~|u"
"{|w~y{}w~tv~|h{}w~|s{|v~vv~i{}v~c{|v~|e{}w~}r|]{}v~c{|v~|g{}w~}q{}v~}K{|t~|Y{|v~|Z{|v~h{}w~}`{}v~tv~|d{|v~w{|w~"
"|s{}x~}w{}w~}av~}{}v~Q{|v~|R{|u~M{|w~}H{}x~}J{|w~| r{|f~|_w~}k{}w~|bv~|Ov~k{}w~|b`~|Yw~}Vv~k{}w~|`w~}m{|w~}Wv~"
"Lv~Tq~Iv~_w~}mv~mv~hw~}m{|w~}bv~jv~`v~k{}w~|dv~k{}w~|Zw~}O{}o~}|Sv~S{|w~|m{}w~|^{|w~}s{}w~|b{|w~}w{|w~w{}x~}w{|"
"w~|\\{|u~}T{}w~|u{|w~}Ru~V{|s~}|Iw~|J{|}s~}d{|w~|s{|}k~|3y~}p{|x~}p{}y~fv~mv~|]v~m{}v~_{|w~}rt~`v~jv~Z{}r~}Xw~}"
"m{|w~}\\w~}u{|w~}X{|w~}v{}w~}]{|w~|m{}w~|h{|v~|q{}x~}pv~|iv~t{}w~t{}w~|b{|w~}q{|w~}`v~t{}w~t{|w~}bv~k{}w~|dv~jv"
"~X{|w~}W{}w~|l{|v~a{}w~}n{}w~}W{|u~T{}w~}U{}w~}d{}v~k{}v~|s{|v~r{}v~h{}w~}hv~|f{|u~|w{|v~v{}u~h{}v~c{|v~|n{|T~]"
"{}w~]T~|^{}w~]{}U~}^{}w~ s{|w~V{|w~}sy~}S{|v~Pw~|nw~|V{|w~}!{}v~|q{}x~|1y~}vw~|e{}y~ci|]{}w~u{|w~|?w~}7y~}sw~v{"
"|w~|r{}y~ P{}w~ p{|w~|m{}w~|Ux~}w{|x~}W{|v~| Fi|U{|w~|u{}w~X{}x~}p{|y~}y{}x~a{|w~i{|x~}c{}x~}p{|y~}y{}x~^{}w~|"
"X{}w~}n{}w~}`{}w~}n{}w~}`{}w~}n{}w~}`{}w~}n{}w~}`{}w~}n{}w~}`{}w~|n{}w~}h{|v~p{|v~Y{}v~I{}w~}M{}w~}M{}w~}M{}w~}"
"D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~f{|v~|h{}w~|s{|v~vv~i{}v~c{|v~|l{}v~c{|v~|l{}v~c{|v~|l{}v~c{|v~|l{}v~c{|v~|^{}s~|_"
"{}v~u{|w~|o{|v~|i{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}Z{|v~|V{}w~}o{|u~`w~}q{}t~|^{|f~|^{|f~|^{|f~|^{|f~|"
"^{|f~|^{|f~|h{|P~jv~|O`~|c`~|c`~|c`~|Xv~Lv~Lv~Lv~Wv~jv~`w~}m{|w~}bv~jv~bv~jv~bv~jv~bv~jv~bv~jv~f{|Z~}fv~|u{}x~}"
"vv~a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|]{}w~|u{|w~}\\v~k{}w~|_{}w~|u{|w~} Uw~yq}w~r}yw~jw~yd|yw~jw~"
"sp~|tw~jw~su~|ow~jw~pv~}qw~Zw~|S{}w~}u{|w~} Hv~|Q{}w~|w{|y~|({|\\~iW~|f{}d~|_e~|`w~}kw~}aw~}kw~|]{}w~}uv~Wv~|w{"
"}w~|b{}x~} q{|g~| v{|w~({}Z~X{|y~|{|}u~}Y{|w~uw~|tw~}o{|w~}q{}u~u{}w~*{|v~F{}w~|*m|}w~l|,{|m~ xw~}W{|v~k{}w"
"~}W{}w~}N{}v~}Dv~|bw~}o{}w~}Iv~|au~|m{}w~}W{|v~X{}v~m{}v~\\{|p~}xv~| Y{}p~}| i{|}p~}|]{}w~}`{|x~|sw~mw~|t{}x~kv"
"~}n|}v~a{}w~}kv~}e{}v~M{}w~}f{}v~d{}w~}L{}w~}T{}v~dv~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}x{|t~U{}w~}V{}w~|tw~|{w~}tv~|"
"h{}w~|rv~}wv~i{}v~c{}v~d{}w~}T{}v~c{}v~f{}w~}p{}v~|Ju~}Y{|v~|Z{|v~h{}w~}_v~|v{|v~bv~|x{|w~r{}w~wv~|b{}v~xv~}R{|"
"v~|Ru~|M{|w~}H{|w~J{|w~| s{|q~t}v~|_w~}k{}w~|bv~Nv~k{}w~|b`~|Yw~}Vv~k{}w~|`w~}m{|w~}Wv~Lv~Tp~Jv~_w~}mv~mv~hw~}"
"m{|w~}bv~jv~`w~}k{}w~|dv~k{}w~|Zw~}N{|m~|Uv~S{|w~|m{}w~|]v~t{|v~`v~w{}x~}w{|x~}w{}w~[{|u~|T{|w~}u{}w~|S{}v~|V{|"
"x}t~}Jw~|K{|s~y}|d{|y~}n{|}p~}1y~}p{}w~p{}y~fv~mv~\\v~lv~|`{}w~|r{|v~}`v~jv~\\{|p~}Xw~}m{|w~}\\{}w~u{}w~|Xv~|v{"
"|v~]{|w~|m{}w~|h{|v~p{}w~pv~}iv~t{}w~t{}w~|b{|w~}q{|w~}`v~t{}w~t{|w~}bw~}k{}w~|dv~jv~X{|w~}W{}w~|l{|w~}av~|n{|v"
"~Wu~|T{}w~}U{}v~dv~}k{|v~}s{|v~s{|v~}h{}w~}hv~|e{}u~|x{|v~w{}u~|h{}v~c{}v~l{|u~}\\|]{}w~][|u~|]{}w~\\{}v~}c|u~}"
"]{}w~ s{|w~V{|w~}sy~}S{|v~P{}x~}o{|w~`{|a~}+u~|rw~|1y~}v{}w~ex~d{|j~}]{}w~}v{|v~|@w~}7y~}sw~u{}w~rx~ P{}w~ p{|"
"w~|m{}w~|Ux~}w{|x~} w{|j~}V{|v~|v{}w~}Xw~oy~}x{}x~aw~|i{|x~|cw~ox~x{}x~^{}w~|Xv~}n|}v~`v~}n|}v~`v~}n|}v~`v~}n|"
"}v~`v~}n|}v~a{|b~h{}v~p|}v~Y{}v~I{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~f{|v~|h{}w~|rv~}wv~i{}v~c{"
"}v~k{}v~c{}v~k{}v~c{}v~k{}v~c{}v~k{}v~c{}v~^{}q~|`{}v~v{|w~}n{}v~h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}Z{"
"|v~|V{}w~}p{|u~|`w~}p{|t~}`{|q~t}v~|_{|q~t}v~|_{|q~t}v~|_{|q~t}v~|_{|q~t}v~|_{|q~t}v~|i{|q~t}`~|kv~N`~|c`~|c`~|"
"c`~|Xv~Lv~Lv~Lv~Wv~jv~`w~}m{|w~}bv~jv~bv~jv~bv~jv~bv~jv~bv~jv~f{|Z~}fv~u{|x~}uv~a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m"
"{}w~|a{|w~|m{}w~|]{|w~}u{}w~|\\w~}k{}w~|_{|w~}u{}w~| U{}x~|q{}w~q{|w~j{}x~|b{|w~j{}x~|uu~|u~|v{|w~j{}x~|uu~|o{|"
"w~j{}x~|qv}|r{|w~[{|w~|S{|v~uv~| TZ~}a{|w~}wx~'{|\\~iW~|ee~|^{|g~}_w~}kw~}aw~}kw~|]v~|u{}w~|X{}w~}wv~|b{|w~| "
" r{}g~ u{|w~({}Z~X{|y~|w{}v~|Zw~|v{|w~s{|w~o{|w~}p{}u~vw~})v~Fv~| w{}w~ x{|m~ y{|w~|Vv~|lv~|W{}w~}O{}v~}C{}w~}"
"c{|w~n|}w~}v|N{}w~}au~l{|v~Wv~}Xv~}m{|v~|[{|y}w~y}|x{|v~ V{|}p~}|XY|X{|}q~}|Z{}w~}`{|x~|sw~mw~|tw~l{|b~|b{}w~}k"
"{}v~e{|v~|N{}w~}fv~}d{}w~}L{}w~}T{|v~|ev~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}w{|t~V{}w~}V{}w~|t{}w~|w~|tv~|h{}w~|r{|v~"
"wv~i{|v~|d{}v~d{}w~}T{|v~|d{}v~f{}w~}o{}v~J{|u~Y{|v~|Z{|v~h{}w~}_{}w~}v{}w~}b{}w~}x{}x~}r{|w~wv~b{|v~|x{|v~|S{|"
"v~|S{}v~|L{|w~}Gw~|K{|w~| t{|u~}|q{}w~|_v~k{}w~|bv~Nv~k{}w~|b`~|Yw~}Vv~k{}w~|`w~}m{|w~}Wv~Lv~Tw~}|u~Kv~_w~}mv~"
"mv~hw~}m{|w~}bv~jv~`w~}k{}w~|dv~k{}w~|Zw~}L{|}o~}Vv~S{|w~|m{}w~|]{}w~}u{}w~}`{}w~|xw~|w{|w~wv~\\{|s~Sv~uv~S{}v~"
"|O{}v~}Kw~|L{|v~}|_{|~|j{|y}x~y}|/x~q{|v~}qx~fv~m{}x~}\\v~l{}w~|`v~pv~}`v~jv~]n~}Xw~}m{|w~}\\{|w~|vv~X{|v~t{}w~"
"|^{|w~|m{}w~|h{|v~p{}w~pv~|iv~t{}w~t{}w~|b{|w~}q{|w~}`v~t{}w~t{|w~}bw~}k{}w~|dv~jv~X{|w~}W{}w~}l{}w~}b{|v~lv~|Y"
"{}v~|S{}w~}U{|v~}f{|v~|ju~|t{|v~s{}v~|h{}w~}hv~|dt~}y{|v~y{|t~|g{|v~|d{}v~k{|u~|?{}w~>u~|b{|v{}w~[{}v~|e{}v~}\\"
"{}w~ s{|w~V{|w~}sy~}S{|v~P{|w~o{}x~}`{|a~}+{|u~}|u{|w~0{}y~v{|w~}g{|y~}d{|j~}\\{}v~|w{|v~}Aw~}7{}y~sw~tw~}t{|y~"
"} P{}w~ p{|w~|m{}w~|Ux~}w{|x~} w{|j~}W{|v~|vv~}X{}x~|p{}y~|x{}x~b{}x~}hw~c{}x~}p{}y~|x{}x~^v~X{|b~|b{|b~|b{|b"
"~|b{|b~|b{|b~|b{}b~}id~Y{|v~|J{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~f{}v~g{}w~|r{|v~wv~i{|v~|d{}v"
"~k{|v~|d{}v~k{|v~|d{}v~k{|v~|d{}v~k{|v~|d{}v~_{}v~}u~|a{|v~|ww~}m{}v~h{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w~}f{|v~h{}w"
"~}Z{|v~|V{}w~}sy|s~_w~}n{}u~|b{|u~}|q{}w~|`{|u~}|q{}w~|`{|u~}|q{}w~|`{|u~}|q{}w~|`{|u~}|q{}w~|`{|u~}|q{}w~|j{|u"
"~}|q{}a~|kv~N`~|c`~|c`~|c`~|Xv~Lv~Lv~Lv~Wv~jv~`w~}m{|w~}bv~jv~bv~jv~bv~jv~bv~jv~bv~jv~.v~v{|w~tv~a{|w~|m{}w~|a{"
"|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|\\v~uv~[w~}k{}w~|^v~uv~ T{}x~}q{}w~q{|x~}j{}x~}b{|x~}j{}x~}vu~|{|u~|w{|x~}j{}"
"x~}vu~|n{|x~}j{}x~}b{|x~}[{|w~Qv~|w{|v~ SZ~}`v~x{|y~}'{|]~}iW~|e{|g~}\\{}i~}^w~}kw~}aw~}l{|w~|^{|v~t{|w~}X{|v~x"
"{|v~`w~} m{|v~ jw|({}Z~X{|y~|v{}w~}[{}x~}u{}x~}s{|w~o{}w~}o{}u~x{|w~|)v~Fv~ v{}w~ g{}w~Uv~|lv~|W{}w~}P{}v~"
"}B{|v~c{|_~|O{}w~}a{}v~l{|v~X{|v~|Y{|v~|lv~|N{|v~ S{|}p~|[{|Z~}[{|}p~}|X{}w~}`{|x~|sw~|nw~|u{|x~}l{}b~}b{}w~}k{"
"|v~e{|v~}N{}w~}g{|v~}d{}w~}L{}w~}T{|v~}ev~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}v{|t~W{}w~}V{}w~|t{|r~sv~|h{}w~|q{}w~}xv"
"~i{|v~}dv~}d{}w~}T{|v~}dv~}f{}w~}nv~}J{}v~Y{|v~|Z{|v~|i{}w~}_{|v~vv~|b{}w~}xw~|qw~|y{|v~bv~}v{}v~S{|v~|T{}v~}K{"
"|w~}G{}x~}K{|w~| tv~}n{}w~|_v~kv~|bv~|Ov~k{}w~|bv~Bw~}Vv~k{}w~|`w~}m{|w~}Wv~Lv~Tw~}{|u~|Mv~_w~}mv~mv~hw~}m{|w~"
"}bv~|kv~`v~k{}w~|dv~k{}w~|Zw~}Iy|}q~Wv~S{|w~|m{}w~|]{|v~uv~_{|w~|xw~uw~|y{|w~}\\r~}T{|w~|w{}w~}T{}v~|M{|v~Kw~|L"
"{}w~} O{}y~|rt~|s{|y~}fv~|nw~}\\v~l{|w~}`w~}p{}w~|`v~|kv~^u~}|Qw~}m{|w~}[w~}w{}w~}X{}w~|t{|w~}^{|w~|m{}w~|h{|v~"
"pv~pv~|iv~t{}w~t{}w~|b{|w~}q{|w~}`v~t{}w~t{|w~}bv~k{}w~|dv~|l{|v~X{|w~}W{|w~}l{}w~|b{}w~}l{}w~}Z{|v~}R{}w~}T{}v"
"~f{}v~i{|u~t{|v~t{|u~g{}w~}hv~|cr~}v~}s~}f{|v~}dv~}j{|u~|@{}w~?u~|b{}~|w{}w~vy~a{}v~|g{}v~}b{}~|w{}w~vy} {{}w~|"
"W{|w~}sy~}S{|v~Ow~}q{|w~|`{|a~}){}u~}vw~}0{|y~}v{}w~}p{|t{}y~|d{|j~}[{|v~|vv~}Bw~}7{|y~}tw~t{|w~|u{}y~| P{}w~ "
"p{|w~|m{}w~|Ux~}w{|x~} w{|j~}X{}v~v{|v~}X{|w~p{|y~|w{}x~bw~h{}x~|d{|w~p{|y~}w{}x~^v~X{}b~}b{}b~}b{}b~}b{}b~}b{"
"}b~}b`~j{}d~Y{|v~}J{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~fv~}g{}w~|q{}w~}xv~i{|v~}dv~}k{|v~}dv~}k"
"{|v~}dv~}k{|v~}dv~}k{|v~}dv~}`{}v~|{|u~|b{|v~}x{}x~}lv~}h{|v~|i{}w~}f{|v~|i{}w~}f{|v~|i{}w~}f{|v~|i{}w~}Z{|v~|V"
"{}e~|_w~}m{|u~bv~}n{}w~|`v~}n{}w~|`v~}n{}w~|`v~}n{}w~|`v~}n{}w~|`v~}n{}w~|jv~}n{}w~Tv~|Ov~Lv~Lv~Lv~Av~Lv~Lv~Lv~"
"Wv~|l{|v~`w~}m{|w~}bv~|kv~bv~|kv~bv~|kv~bv~|kv~bv~|kv~.v~vw~|u{|v~a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}"
"w~|\\{|w~|w{}w~}[v~k{}w~|^{|w~|w{}w~} T{|w~q{}w~q{}x~|j{|w~b{}x~|j{|w~wu~|x{|u~|x{}x~|j{|w~wu~|m{}x~|j{|w~b{}x~"
"|[{|w~Q{|w~}w{}w~} SZ~}`{}w~|y{}y~|'{|n~y}~|n~}i{}k~x}k~c{|i~}Z{}j~]w~}kw~}a{}w~l{|w~|^{}w~}sv~Wv~|y{}w~}`{}w~|"
" mv~| o{}Z~X{|y~|v{|w~}\\{|w~t{}x~|rw~|p{}w~}n{}u~yw~}(v~|Gv~ v{}w~ gw~}U{}w~}m{|v~V{}w~}Q{}v~}A{|v~c{|_~"
"|O{}w~}a{}v~l{|v~X{}v~X{|v~k{}w~}N{}w~} Q{|}p~}|^{|Z~}^{|}p~}|U{}w~}`{|x~}sw~|o{|w~|u{}x~|l`~b{}w~}k{|v~|eu~N{}"
"w~}g{}v~|d{}w~}L{}w~}Su~ev~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}u{|t~X{}w~}V{}w~|ss~}sv~|h{}w~|q{|v~|yv~hu~e{|v~|d{}w~}"
"Su~e{|v~|f{}w~}n{}v~|K{|v~|Z{|v~|Yv~|i{}w~}^v~|x{}v~a{|v~y{|w~|q{}x~}y{}w~}c{}v~tv~}T{|v~|U{|v~}J{|w~}G{|w~K{|w"
"~| u{|v~m{}w~|_v~kv~a{}w~|O{}w~|l{}w~|bv~|Cw~}V{}w~|l{}w~|`w~}m{|w~}Wv~Lv~Tw~}y{|u~|Nv~_w~}mv~mv~hw~}m{|w~}bv~"
"|l{|v~`v~kv~cv~|l{}w~|Zw~}D{|}u~}Xv~S{|w~|m{}w~|\\{}w~|w{|w~}^w~}y{|w~u{}x~}y{}w~|]{}q~|Tv~wv~|U{|v~}K{}w~|Lw~|"
"Lv~ N{|x~s{}x~{w~|tx~|fv~|o{|v~\\v~l{|w~}a{|w~|p{}w~_{}w~|l{|v~_{}v~|Ow~}m{|w~}[{}w~|xv~X{|v~rv~|_{|w~|m{}w~|h{"
"|v~|qv~pv~|iv~|u{}w~t{}w~|b{|w~}q{|w~}`v~t{}w~t{|w~|bv~kv~c{}w~|l{|v~X{|w~}Vv~l{}w~|bv~|l{|v~[{|v~}Q{}w~}T{|v~}"
"h{|v~|hu~}u{|v~u{|u~|g{}w~}hv~|b{}f~|du~e{|v~|i{|u~|A{}w~@u~|b{}x~|x{}w~ww~a{}v~|i{}v~}b{}x~|x{}w~w{}y~} {}w~|W"
"{|v~sy~}S{|v~O{|w~}s{}w~}^q|}v~q|'{}t~|{|w~}.x~u{}v~}|wy|}y~tx~/{|v~|v{}w~}Cw~}6x~tw~s{}w~ux~ O{}w~ p{|w~|m{}w"
"~|Ux~}w{|x~} B{}w~}v{|v~|Ww~|q{|y~}v{}x~c{}x~|i{}x~}cw~|q{|y~}v{}x~_{|v~X`~b`~b`~b`~b`~c{|`~|kc~Xu~J{}w~}M{}w~"
"}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~g{|v~}g{}w~|q{|v~|yv~hu~e{|v~|ju~e{|v~|ju~e{|v~|ju~e{|v~|ju~e{|v~|a{}"
"v~|x{|u~|bu~y{}w~l{|v~|gv~|i{}w~}ev~|i{}w~}ev~|i{}w~}ev~|i{}w~}Z{|v~|V{}f~|^w~}l{|v~|d{|v~m{}w~|a{|v~m{}w~|a{|v"
"~m{}w~|a{|v~m{}w~|a{|v~m{}w~|a{|v~m{}w~|k{|v~m{}w~T{}w~|Ov~|Mv~|Mv~|Mv~|Bv~Lv~Lv~Lv~W{}w~|l{|v~`w~}m{|w~}bv~|l{"
"|v~bv~|l{|v~bv~|l{|v~bv~|l{|v~bv~|l{|v~.v~|x{}x~|t{|v~a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|a{|w~|m{}w~|[v~wv~|[v"
"~kv~\\v~wv~| Sw~|r{}w~r{|w~hw~|d{|w~hw~|yu~|v{|u~y{|w~hw~|yu~|m{|w~hw~|d{|w~Z{|w~Pv~wv~| SZ~}_w~}yx~%n~{|~{|o~|"
"i{|l~}|}|l~}b{}j~Xk~|]w~}kw~}a{}w~l{}w~]v~|s{}w~|X{}w~}yv~|_w~} mv~} g{}x~}t{}x~}O{|y~|uw~}\\{}x~|t{}x~|rw"
"~|p{|w~}m{}u~}w~|({}w~|H{|w~} v{}w~ h{|w~|U{}w~}m{|v~V{}w~}R{}v~}@{|v~c{|_~|Ov~|a{|v~l{}w~}Xv~}X{|v~k{}w~}Nv~|"
" N{|}p~}|a{|Z~}a{|}p~}|R{|w}|_x~}s{}x~}o{}w~|v{|w~l{}`~|c{}w~}k{|v~|e{}v~|O{}w~}gu~c{}w~}L{}w~}S{}v~|fv~|h{}w~}"
"hv~|Y{}w~}M{}w~}W{}w~}t{|t~Y{}w~}V{}w~|s{}t~rv~|h{}w~|p{}w~}yv~h{}v~|f{}v~c{}w~}S{}v~|f{}v~e{}w~}mv~}K{|v~|Z{|v"
"~|Yv~|iv~|^{}w~}xv~}`v~|{|w~p{}w~yv~|d{|v~|t{|v~|U{|v~|V{|u~I{|w~}Fw~|L{|w~| u{}w~|mv~|_v~|m{|v~a{}w~}O{}w~|lv"
"~|b{}w~|Cw~}V{}w~|lv~|`w~}m{|w~}Wv~Lv~Tw~}x{|u~|Ov~_w~}mv~mv~hw~}m{|w~}b{}w~|l{|w~}`v~kv~c{}w~|lv~|Zw~}B{|u~Xv~"
"S{|w~|m{}w~|\\{|w~}w{}w~|^v~y{}x~}u{|x~}y{}w~]{|v~|}v~T{}w~|y{|w~}U{|v~}J{|w~}Lw~|M{|w~} Mx~}v{|w~|{|w~|v{}x~e{"
"}w~|o{}v~\\v~l{|w~}a{|w~|pw~}_{}w~|l{|w~}_v~Mw~}m{|w~}[{|w~}y{|w~}X{}w~|r{}w~}_{|w~|m{}w~|h{|v~|qv~|r{|v~|i{}w~"
"|u{}w~tv~|b{|w~}q{|w~}`v~t{}w~t{}w~|bv~kv~c{}w~|l{|w~}X{|w~}Vv~lv~b{}v~jv~|\\u~P{}w~}S{}v~|iu~g{|t~|w{|v~v{}u~}"
"f{}w~}hv~|a{}h~|c{}v~|f{}v~g{|u~|B{}w~Au~|b{}v~|y{}w~xu~a{}v~|k{}v~}b{}v~|y{}w~x{}w~}!{}w~|Vv~sy~}S{|v~O{|u~}y|"
"{y|u~}T{|w~}Lw}|P{|}p~}-{|y~}u{}l~u{}y~|.{|v~|v{}w~}Dw~}6{|y~}uw~rw~}w{}y~| O{}w~ p{|w~|m{}w~|Ux~}w{|x~} C{}w"
"~}v{|v~|W{}x~}px~u{}x~d{|w~i{}x~}c{}x~}px~u{}x~_{}w~}Y{}`~|d{}`~|d{}`~|d{}`~|d{}`~|d{}w~}j|}w~}l{|c~X{}v~|K{}w~"
"}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~gu~|g{}w~|p{}w~}yv~h{}v~|f{}v~i{}v~|f{}v~i{}v~|f{}v~i{}v~|f{}v~"
"i{}v~|f{}v~a{}v~|v{|u~|c{}v~|}w~|l{}v~fv~|iv~|ev~|iv~|ev~|iv~|ev~|iv~|Z{|v~|V{}h~}\\w~}k{}w~|d{}w~|mv~|a{}w~|mv"
"~|a{}w~|mv~|a{}w~|mv~|a{}w~|mv~|a{}w~|mv~|k{}w~|mv~|U{}w~}O{}w~|M{}w~|M{}w~|M{}w~|Bv~Lv~Lv~Lv~W{}w~}l{}w~}`w~}m"
"{|w~}b{}w~|l{|w~}b{}w~|l{|w~}b{}w~|l{|w~}b{}w~|l{|w~}b{}w~|l{|w~}.{}w~|y{}x~|s{|w~}a{|w~|m{}w~|a{|w~|m{}w~|a{|w"
"~|m{}w~|a{|w~|m{}w~|[{}w~|y{|w~}Zv~kv~\\{}w~|y{|w~} R{|w~r{}w~rw~}h{|w~dw~}h{|w~y{|w~|t{|w~}yw~}h{|w~y{|w~|lw~}"
"h{|w~dw~}Z{|w~P{}w~|y{|w~} Rs}v~g}|_{}w~{|y~}%{|p~|{|~yp~}g{}m~{}~{}m~|a{}l~|X{|m~}\\w~}kw~}a{|w~|mv~]v~r{}w~}X"
"{|v~{|v~^{}w~} n{}v~ gw~|tw~|O{|y~|uw~}]{|x~}sw~|rw~|p{|v~l{}r~}'{|w~}H{|w~} v{}w~ h{|w~T{|v~m{}w~}V{}w~}"
"S{}v~}?{|v~c{|_~|Ov~|`v~|m{}w~}Y{|v~W{|v~k{}w~}O{|v~ J{|}p~}|d{|Z~}d{|}p~}|-w~s{|w~ov~|v{}x~|lv~|j{|v~c{}w~}k{}"
"v~cv~}O{}w~}h{}v~|c{}w~}L{}w~}Rv~}fv~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}rt~Z{}w~}V{}w~|ru~}rv~|h{}w~|p{|v~|{v~h{|v~}g"
"{|v~}c{}w~}Rv~}g{|v~}e{}w~}m{|v~|L{|v~|Z{|v~|Y{}w~}j{|v~|^{|v~|{|v~_{}w~}{}x~}p{|w~yv~cv~}r{}v~U{|v~|W{|u~|I{|w"
"~}F{}x~}L{|w~| u{}w~|n{|v~|_v~}m{}w~}a{|w~}O{|w~}m{|v~|b{}w~}Cw~}V{|w~}m{|v~|`w~}m{|w~}Wv~Lv~Tw~}vu~|Pv~_w~}mv"
"~mv~hw~}m{|w~}b{|w~}l{}w~}`v~|m{|w~}c{|w~}lv~|Zw~}@v~|Yv~S{|w~}mv~|[v~wv~]{}w~|{w~|u{|w~yw~}]v~}y{}v~U{|w~}y{}w"
"~|V{|v~}I{|w~}Lw~|M{|w~} M{|w~x}v~}x{}v~x}w~|e{}w~}ou~|]v~l{|w~|a{|w~p{}w~|_{|w~}l{}w~}`{|w~}Mw~}m{|w~}Zv~y{}w~"
"|Y{|v~q{|v~_{|w~}m{}w~|gv~|r{|v~|r{|v~h{}w~}u{}w~tv~a{|w~}q{|w~}`v~t{}w~t{}w~|bv~|m{|w~}c{|w~}l{}w~}X{|w~}V{}w~"
"|n{|w~}bv~}j{}v~]{}v~|P{}w~}Ru~j{}v~|f{|t~}|y{|v~x{|t~}e{}w~}hv~|`{|}l~}`v~}g{|v~}f{|u~|C{}w~Bu~|`u~|{}w~yu~|`{"
"}v~|m{}v~}a{|u~|{}w~y{}v~}!{}w~|Vv~|ty~}S{|v~P{|g~}U{|w~}Lw~|N{|r~}+{}y~|u{|}o~}v{|y~}+v~}v{}v~Ew~}5{}y~|vw~r{|"
"w~|y{|y~} N{}w~ p{|w~}m{}w~|Ux~}w{|x~} Dv~}v{}v~|W{|w~p{}y~|u{}x~dw~|j{}w~c{|w~p{}y~|u{}x~`{}v~|Yv~|j{|v~dv~|"
"j{|v~dv~|j{|v~dv~|j{|v~dv~|j{|v~dv~|j{|v~l{}w~}n{|v~Wv~}K{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~h{"
"|v~}f{}w~|p{|v~|{v~h{|v~}g{|v~}i{|v~}g{|v~}i{|v~}g{|v~}i{|v~}g{|v~}i{|v~}g{|v~}b{}v~|t{|u~|cq~|l{|v~}f{}w~}j{|v"
"~|e{}w~}j{|v~|e{}w~}j{|v~|e{}w~}j{|v~|Z{|v~|V{}k~}|Zw~}k{}w~}d{}w~|n{|v~|a{}w~|n{|v~|a{}w~|n{|v~|a{}w~|n{|v~|a{"
"}w~|n{|v~|a{}w~|n{|v~|k{}w~|n{|v~}U{|w~}O{}w~}M{}w~}M{}w~}M{}w~}Bv~Lv~Lv~Lv~W{|v~lv~|`w~}m{|w~}b{|w~}l{}w~}b{|w"
"~}l{}w~}b{|w~}l{}w~}b{|w~}l{}w~}b{|w~}l{}w~}Xt|X{}w~}{}x~}r{}w~}a{|w~}mv~|a{|w~}mv~|a{|w~}mv~|a{|w~}mv~|[{|w~}y"
"{}w~|Zv~|m{|w~}\\{|w~}y{}w~| Qw~}s{}w~s{}w~fw~}f{}w~fw~}y{|y~|r{|y~}y{}w~fw~}y{|y~|l{}w~fw~}f{}w~Y{|w~P{|v~y{}w"
"~| Kv~}J{|w~|}y~|${}r~}y{}~y{|q~f{|n~|{}~yn~}_m~|V{|o~}[w~}kw~}`w~}n{|w~}^{|w~}r{|v~Wv~{}w~}]v~| o{|v~| hw"
"~t{|w~N{|y~|uw~}]w~|s{}x~|rw~|ov~|l{}s~&{|w~}H{}w~| v{}w~ h{}x~}Sv~|nv~|V{}w~}T{}v~}>{}w~}Q{}w~}J{}v~_{}w~}mv~"
"}Y{}w~}Vv~|lv~|Ov~} G{|}p~}|0{|}o~}*{}x~rw~}q{}v~|w{}w~l{|v~hv~|d{}w~}ku~c{}v~}P{}w~}i{}u~b{}w~}L{}w~}R{}v~|gv~"
"|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}qt~[{}w~}V{}w~|r{}v~|rv~|h{}w~|o{}w~}{v~g{}v~|hu~|c{}w~}R{}v~|hu~|e{}w~}lv~}L{}v~Y"
"{|v~|Y{}v~j{}v~\\{}w~}{}w~}_{|v~{w~|ow~y|v~d{}v~pv~}V{|v~|Wu~|H{|w~}F{|w~L{|w~| u{}w~m{}v~|_u~mv~|a{|v~Nv~|n{}"
"v~|b{|v~Cw~}Uv~|n{}v~|`w~}m{|w~}Wv~Lv~Tw~}uu~|Qv~_w~}mv~mv~hw~}m{|w~}b{|v~lv~|`v~}m{}w~}c{|v~m{|v~|Zw~}@{}w~|Yv"
"~S{|w~}mv~|[{}w~|y{|w~}]{|w~}{w~sw~y|w~}^{}w~}wv~}U{}w~yv~Uv~}Gw~}Lw~|M{|w~| L{|q~}v{}q~|d{|w~}p{|u~|]v~l{}w~|a"
"{|w~pv~^{|v~lv~|`{|w~|Mw~}m{|w~}Z{}w~y|v~X{}w~}pv~|`{|w~}mv~|gv~}r{|v~}r{}v~h{|v~u{}w~u{|w~}a{|w~}q{|w~}`{}w~|u"
"{}w~tv~av~}m{}w~}c{|v~lv~|X{|w~}V{|w~}n{}w~|c{|v~i{|v~|_{}v~}O{}w~}R{|v~}l{}v~|d{|r~y}v~y}s~}d{}w~}hv~|]{|}s~y}"
"|^{}v~|hu~|e{|v~}C{}w~C{}v~|^u~|}w~{}v~|^{}v~n{|v~}_{|u~|}w~{}v~} {}w~|V{}w~}ty~}S{|v~Q{}e~}V{|w~}Lw~|L{|t~*{|x"
"~|t{|y}u~}|u{|x~|*{}w~|v{|v~Fw~}5{|x~|ww|qw|y{|x~| >{|w~}mv~|Ux~}w{|x~} Ev~}v{|v~U{}x~|q{|y~}t{}x~e{}x~}j{}w"
"~b{}x~|q{|y~}t{}x~a{}v~}Y{|v~hv~|f{|v~hv~|f{|v~hv~|f{|v~hv~|f{|v~hv~|f{}v~hv~|n{|v~|n{|v~W{}v~}L{}w~}M{}w~}M{}w"
"~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~i{|u~|f{}w~|o{}w~}{v~g{}v~|hu~|h{}v~|hu~|h{}v~|hu~|h{}v~|hu~|h{}v~|hu~|c{}"
"v~|r{|u~|d{}s~|ku~|f{}v~j{}v~d{}v~j{}v~d{}v~j{}v~d{}v~j{}v~Y{|v~|V{}w~}r|Vw~}k{|w~|d{}w~m{}v~|a{}w~m{}v~|a{}w~m"
"{}v~|a{}w~m{}v~|a{}w~m{}v~|a{}w~m{}v~|k{}w~m{}u~U{|v~O{|v~M{|v~M{|v~M{|v~Bv~Lv~Lv~Lv~Vv~|n{|v~_w~}m{|w~}b{|v~lv"
"~|b{|v~lv~|b{|v~lv~|b{|v~lv~|b{|v~lv~|X{}u~X{|v~|x~}qv~|a{|w~}mv~|a{|w~}mv~|a{|w~}mv~|a{|w~}mv~|Z{}w~yv~Yv~}m{}"
"w~}[{}w~yv~ P{|w~}t{}w~t{|w~}f{|w~}h{|w~}f{|w~}yy|p{|}y{|w~}f{|w~}yy|l{|w~}f{|w~}h{|w~}Y{|w~Ov~y|v~ K{}w~}Hw~}y"
"~}\"{}t~}x{}~x{|s~d{|p~}y{}~y{|p~}]o~|T{}p~Zw~}kw~}`{}w~|o{}w~|^{}w~|qv~|X{}w~|v~|]{|v~| o{}v~j{} {|x~}t{|"
"x~}N{|y~|v{}w~}^{}x~}r{}x~}rw~|o{}v~k{}u~|%v~Hv~ u{}w~ hw~|S{}v~o{}v~U{}w~}U{}v~}>{|v~}Q{}w~}Ju~_{|v~n{|v~|Z{|"
"v~|Vv~}m{|v~|P{}v~ C{}o~}4{|o~}|({|x~}s{}w~}s{}u~|x{}w~|l{}w~}h{}w~}d{}w~}l{|v~}bu~|g{|}g{}w~}j{}u~|b{}w~}L{}w~"
"}R{|u~|hv~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}pt~\\{}w~}V{}w~|r{|v}qv~|h{}w~|nv~|v~g{|u~|j{}v~}b{}w~}R{|u~i{}v~}d{}w~}"
"l{|v~|M{}v~Y{|v~|Y{|v~|kv~}\\{|v~{v~|_{|v~|w~|o{}x~y}w~}e{|v~|p{|v~|W{|v~|X{}v~}G{|w~}F{|w~|M{|w~| u{}w~|nu~|_"
"u~}o{}v~_v~}O{}w~}o{|u~|av~}Dw~}U{}w~}o{|u~|`w~}m{|w~}Wv~Lv~Tw~}t{}v~|Rv~_w~}mv~mv~hw~}m{|w~}av~|n{|v~_u~mv~|bv"
"~|n{}v~|Zw~}@{}w~|Yv~Rv~n{}v~|[{|w~}y{}w~|\\w~}|x~}s{}x~y}w~|_{}v~v{|v~|V{|w~y}w~}Vu~Fw~}Lw~|M{|w~| K{|s~}t{}s~"
"|bv~p{}u~}]v~|mv~`{|w~q{}w~}]v~}n{}v~_{|w~|Mw~}m{|w~}Yw~y}w~|Xv~o{|w~}`{|v~n{|v~|g{}v~r{}u~rv~}gv~|v{}w~uv~|a{|"
"w~}q{|w~}`{|w~}u{}w~u{|v~au~mv~|bv~}n{}v~Vv~Uv~nv~b{}w~}hv~}`{|v~}N{}w~}Q{|v~}n{}v~}b{|c~}c{}w~}hv~|Z{|v~Z{|u~|"
"j{}v~}c{|w~B{}w~B{}x~|\\u~}w~}v~|\\{}x~|m{}x~}]{|u~}w~}v~} {{v~|V{|v~|uy~}S{|v~R{}v~y|q~}|u~W{|w~}Lw~|J{}u~*{|x"
"~|e{|x~|({}x~}u{|w~F{|x}|4{|x~|e{|x~| ={|v~n{|v~|Ux~}w{|x~} Ew~|u{|x~}U{|x~}p{}j~}iw~j{}w~b{|x~}p{}j~}f{}v~}"
"X{}w~}h{}w~}f{}w~}h{}w~}f{}w~}h{}w~}f{}w~}h{}w~}f{}w~}h{}w~}fv~}h{}w~}n{}w~}m{|v~Vu~|g{|}c{}w~}M{}w~}M{}w~}M{}w"
"~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~j{|u~}e{}w~|nv~|v~g{|u~|j{}v~}g{|u~|j{}v~}g{|u~|j{}v~}g{|u~|j{}v~}g{|u~|j{}v~}c{"
"}v~|p{|u~|e{|t~}k{}v~}e{|v~|kv~}d{|v~|kv~}d{|v~|kv~}d{|v~|kv~}Y{|v~|V{}w~}Mw~}k{}w~|d{}w~|nu~|a{}w~|nu~|a{}w~|n"
"u~|a{}w~|nu~|a{}w~|nu~|a{}w~|nu~|k{}w~|nt~|Uv~}Ov~}Mv~}Mv~}Mv~}Cv~Lv~Lv~Lv~V{}v~nv~}_w~}m{|w~}av~|n{|v~`v~|n{|v"
"~`v~|n{|v~`v~|n{|v~`v~|n{|v~W{}u~Wr~q{|v~_v~n{}v~|`v~n{}v~|`v~n{}v~|`v~n{}v~|Z{|w~y}w~}Yu~mv~|[{|w~y}w~} O{}w~}"
"u{}w~u{}w~}d{}w~}j{}w~}d{}w~}j{}w~}d{}w~}j{}w~}d{}w~}j{}w~}X{}w~O{|w~y}w~} L{}w~}G{}u~|!{|}x~}|w{}~v{}w~}b{|r~|"
"x{}~w{}s~|\\{|q~}Rq~|Zw~}kw~}`{|v~p{|v~]v~p{}w~}X{|q~[{}v~} p{|v~}ly}$v}|\"{}x~}t{}x~}Yy}|s{|y~|w{|v~|_{|w~"
"q{}x~}s{|w~n{|v~}l{|u~}%{}w~|Iw~} u{}w~L{}w~} tv}|P{|w~R{|v~|pv~}U{}w~}V{}v~}={}v~|Q{}w~}K{}v~|^v~|o{}v~Y{}v~U{"
"}v~m{}v~P{|v~}U{|v}M{}w~}F{|}q~}6{|q~}|G{|w}|^w~ru~y|x{|}t~y|}v~|kv~|h{|v~d{}w~}m{|u~|b{|u~|i{|~}g{}w~}l{|}u~}a"
"{}w~}L{}w~}Q{}u~|iv~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}ot~]{}w~}V{}w~|bv~|h{}w~|n{}q~f{}u~k{}u~a{}w~}Q{}u~k{|u~c{}w~}"
"kv~}c{|}h{|v~}Y{|v~|X{}v~l{}v~|[v~}v~]v~}w~n{}r~|ev~}n{}v~W{|v~|Y{}v~}F{|w~}Ew~}M{|w~| u{}w~|o{}u~|_t~|q{|v~}_"
"{|v~|P{|v~}pt~|a{|v~|Ew~}U{|v~|pt~|`w~}m{|w~}Wv~Lv~Tw~}s{}v~|Sv~_w~}mv~mv~hw~}m{|w~}a{}v~nv~}_u~}o{}v~a{}v~o{|u"
"~|Zw~}@{}w~|Y{}w~|Sv~|p{|u~|Zv~{|v~[v~}x~}s{|r~_{|v~|u{}v~Uq~V{}v~|Fw~}Lw~|M{|w~| I{|y}~y}|r{|}x~}|`{}w~}qs~]u~"
"n{|v~`{|w~r{|v~\\{|v~nv~}_{|w~}Mw~}m{|w~}Y{}r~X{}w~}nv~`{|v~|o{}v~|g{|v~|st~|t{|v~|g{}v~v{}w~v{|v~`{|w~}q{|w~}_"
"v~|v{}w~uv~}au~}o{}v~a{|v~nv~}Vv~U{|w~}p{}w~}bv~|h{|v~`u~M{}w~}P{|u~|q{}v~}_{}g~}|b{}w~}hv~|Z{|v~Y{}u~k{}u~a{|y"
"~A{}w~A{}~|Zl~|Z{}~|k{}~}[{|l~} yv~}Uv~}uy~}S{|v~S{}v~|x{|y}x~}|wu~X{|w~}Lw~|I{|v~}*{}x~|g{|x~}&{}y~}t{|x~ T{}x"
"~|g{|x~} <{|v~|o{}v~|Ux~}w{|x~} Ex~|t{|y~}Tw~|p{}j~}j{}x~|k{}x~}aw~|p{}j~}g{}v~}Wv~|h{|v~fv~|h{|v~fv~|h{|v~f"
"v~|h{|v~fv~|h{|v~g{|v~g{|v~|ov~|m{|v~V{|u~|i{|~}c{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~k{}t~d{}w~"
"|n{}q~f{}u~k{}u~e{}u~k{}u~e{}u~k{}u~e{}u~k{}u~e{}u~k{}u~c{}v~|n{|u~|e{}u~|l{}u~c{}v~l{}v~|c{}v~l{}v~|c{}v~l{}v~"
"|c{}v~l{}v~|Y{|v~|V{}w~}Mw~}kv~c{}w~|o{}u~|a{}w~|o{}u~|a{}w~|o{}u~|a{}w~|o{}u~|a{}w~|o{}u~|a{}w~|o{}u~|k{}w~|o{"
"}s~U{|v~|P{|v~|N{|v~|N{|v~|N{|v~|Dv~Lv~Lv~Lv~Uv~}p{}v~^w~}m{|w~}a{}v~nv~}`{}v~nv~}`{}v~nv~}`{}v~nv~}`{}v~nv~}W{"
"}u~W{}t~|qv~}_v~|p{|u~|`v~|p{|u~|`v~|p{|u~|`v~|p{|u~|Yq~Xu~}o{}v~Yq~ M{}w~}|w{}x~}v{}v~b{}w~}|m{}v~b{}w~}|m{}v~"
"b{}w~}|m{}v~b{}w~}|m{}v~W{}x~}Nq~| M{|v~F{|u~ py~|V{|}y~y}|vy~|w{|y}y~y}Y{|s~}Q{|s~|Yw~}kw~}_{}v~|s{}v~|^{|w~}p"
"{|v~X{|r~}Z{}u~} q{}v~}o{|y~}$v~}\"w~|tw~|Y{}y~}|u{|y~|x{|u~^{}x~|q{|w~s{}x~}mu~}n{|s~}&{|w~|J{|w~| u{}w~L{"
"}v~ u{|v~|P{}x~}Q{}v~|r{}v~T{}w~}W{}v~}O{}|k{}v~}P{}w~}]{}|l{}u~]{|v~|q{}v~|Yv~}U{|v~}o{}v~}Q{|v~}T{}v~M{}v~C{|"
"}t~}6{|t~}|D{}w~}^{}x~|s{|m~y}q~|k{|v~fv~|e{}w~}n{|u~}`{}u~|l{|}y~}g{}w~}n{|}t~}`{}w~}L{}w~}P{}u~}jv~|h{}w~}hv~"
"|Y{}w~}M{}w~}W{}w~}nt~^{}w~}V{}w~|bv~|h{}w~|mq~e{}u~|n{}u~|a{}w~}P{}u~|n{}u~|c{}w~}k{|v~|d{|y~}k{|u~|Y{|v~|X{|u"
"~n{|u~Z{}r~}]{}s~}n{|r~e{}v~lv~}X{|v~|Z{|u~E{|w~}E{}w~M{|w~| u{|v~p{|t~|_s~|s{|u~]u~|P{}v~}s{|s~|`u~|k{|Ww~}T{"
"}v~}s{|s~|`w~}m{|w~}Wv~Lv~Tw~}r{}v~}Tv~_w~}mv~mv~hw~}m{|w~}`v~}p{}v~|_t~|q{|v~|`v~}q{|t~|Zw~}Q{|kv~|Y{}w~}S{}v~"
"pt~|Z{}w~y}w~}[{}s~|rs~}_v~}s{}w~}V{}s~}W{}v~|Ew~}Lw~|M{|w~| r{|v~|s{}s~}^u~}ov~|_w~|s{}w~|[v~}pu~]v~|Nw~}m{|w"
"~}Y{|s~}Xv~m{}w~|a{|u~p{|u~|fv~}t{}x~}x~}t{}v~ev~}w{}w~w{|v~}`{|w~}q{|w~}_{}v~|w{}w~v{}v~`t~|q{|v~|`v~}p{}v~U{}"
"w~|Uv~|r{|v~b{|v~fv~|bu~|M{}w~}O{|u~}t{|u~}\\{|k~}|`{}w~}hv~|Z{|v~X{}u~|n{}u~|`{|@{}w~@{|Xn~|X{|i{|Y{|n~} xv~}U"
"{|v~}vy~}S{|v~T{|v~|jv~}Y{|w~}Lw~|H{|v~|*{}x~}i{}x~}${}~}s{|y~ S{}x~}i{}x~} ;{|u~p{|u~|Ux~}w{|x~} Ey~|s{|~}T"
"{}x~}o{}j~}k{|w~k{}x~}a{}x~}o{}j~}h{}v~}W{|v~fv~|h{|v~fv~|h{|v~fv~|h{|v~fv~|h{|v~fv~|h{}w~}f{}w~}p{|v~l{|v~U{}u"
"~|l{|}y~}c{}w~}M{}w~}M{}w~}M{}w~}D{}w~}M{}w~}M{}w~}M{}w~}Z{|v~n{|}s~c{}w~|mq~e{}u~|n{}u~|d{}u~|n{}u~|d{}u~|n{}u"
"~|d{}u~|n{}u~|d{}u~|n{}u~|d{}v~|l{|u~|et~|n{}u~|c{|u~n{|u~b{|u~n{|u~b{|u~n{|u~b{|u~n{|u~X{|v~|V{}w~}Mw~}x{|p{}v"
"~c{|v~p{|t~|a{|v~p{|t~|a{|v~p{|t~|a{|v~p{|t~|a{|v~p{|t~|a{|v~p{|t~|k{|v~p{|q~j{|gu~|Pu~|k{|_u~|k{|_u~|k{|_u~|k{"
"|Vv~Lv~Lv~Lv~U{|v~}r{}v~}^w~}m{|w~}`v~}p{}v~|_v~}p{}v~|_v~}p{}v~|_v~}p{}v~|_v~}p{}v~|W{}u~Vu~|q{}v~|_{}v~pt~|`{"
"}v~pt~|`{}v~pt~|`{}v~pt~|Y{}s~}Xt~|q{|v~|Y{}s~} Lu~}p{}u~|au~}p{}u~|au~}p{}u~|au~}p{}u~|au~}p{}u~|W{}x~}N{}s~} "
"M{|v~|Ev~} py~|Jy~|M{}t~O{|u~}Xw~}kw~}_{|t~}w|}u~}]{}w~}ov~|Xr~|Y{}t~}y| tt~|r{}x~}$v~}\"w~t{|w~X{}v~}y|y{|"
"y~y|}t~|_{|x~}ow~}tw~|m{|t~|r{|}q~}&w~}J{}w~ t{}w~L{}v~ u{|v~|Pw~|Pu~|t{}v~|\\s|}w~}r|a{}v~}Nx~}|p{}t~O{}w~}]{}"
"y~}|q{}t~|\\{}v~|s{}u~Y{|v~|T{}u~|r{}u~|_{~}|r{|}u~|T{}v~M{}v~@{|}w~}6{|w~}|A{}w~}^{|w~r{|o~}{}s~}iv~}f{}w~}e{}"
"w~}q|y}s~|_{}t~|p{|}w~}g{}w~}r|y}q~}_{}w~}g|`{}w~}O{}t~}o{|}u~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}mt~_{}w~}h|i{}w~|bv~"
"|h{}w~|m{}r~dt~}|r{|t~|`{}w~}Ot~}q{|t~}b{}w~}jv~}d{|w~}|p{|}u~}X{|v~|W{}u~|q{}u~|Z{|r~|]{|s~|mr~f{|v~|l{|v~|Y{|"
"v~|[{|u~}b|^{|w~}E{|w~|N{|w~| tv~}r{}s~|_w~y}x~}|w{|}u~|]{|u~|p{|}|^t~y|x{|}w~}w~|`{|u~|n{|y~|Xw~}St~y|x{|}w~}"
"w~|`w~}m{|w~}Wv~Lv~Tw~}q{}v~}Uv~_w~}mv~mv~hw~}m{|w~}`{}v~}r{}v~}^s~}s{|v~}_{}v~}s{|s~|Zw~}Qy~}|o{}w~}X{|v~}|U{|"
"v~}s{|s~|Z{|q~Z{|s~qs~|`{}w~}qv~}Vs~|X{}v~|Dw~}Lw~|M{|w~| qu~|u{}w~|v~}_s~|s{|u~^{}w~t{}w~}Z{|v~}|t{|}v~|]{}v~"
"|ny|^w~}m{|w~}Xs~|Y{}w~}m{|w~}a{|t~|s{}t~}f{}v~}v{|w~{w~|v{}v~}e{}v~}x{}w~x{}u~_{|w~}q{|w~}^u~}|y{}w~x{}u~}`s~}"
"s{|v~}_{|v~}|t{|}v~|U{|v~}|W{|v~|t{|v~|bu~f|v~}c{}v~}h|_{}w~}Vs}t~}v{}t~s}`{|y}t~y}|]{}w~}hv~|Z{|v~Wt~}|r{|t~|#"
"{}w~ vp~| {|p~} wv~}T{}v~}wy~}v{}~Z{|v~S{}x~|hx~}X{|w~}Lw~|G{}w~}){|w~|m{|w~|\"{|}q{} R{|w~|m{|w~| XY| ${|u~}r{"
"|t~}Ux~}w{|x~} E{}qy|T{|w~c{}x~gw~|lw~}a{|w~c{}x~e{}v~}Vv~}f{}w~}hv~}f{}w~}hv~}f{}w~}hv~}f{}w~}hv~}f{}w~}hv~|f"
"{|v~pv~}l{|v~}h|h{}t~|p{|}w~}c{}w~}g|a{}w~}g|a{}w~}g|a{}w~}g|X{}w~}M{}w~}M{}w~}M{}w~}Z{|v~r|x}q~b{}w~|m{}r~dt~}"
"|r{|t~|bt~}|r{|t~|bt~}|r{|t~|bt~}|r{|t~|bt~}|r{|t~|d{|v~|j{|v~}f{}s~}|r{|t~|a{}u~|q{}u~|a{}u~|q{}u~|a{}u~|q{}u~"
"|a{}u~|q{}u~|X{|v~|V{}w~}Mw~}xy~}y|wy|u~|bv~}r{}s~|`v~}r{}s~|`v~}r{}s~|`v~}r{}s~|`v~}r{}s~|`v~}r{}s~|jv~}r{}w~}"
"|u~|o{|}y~g{|u~|p{|}|_{|u~|n{|y~|`{|u~|n{|y~|`{|u~|n{|y~|`{|u~|n{|y~|Wv~Lv~Lv~Lv~T{}u~}|x{|}u~}]w~}m{|w~}`{}v~}"
"r{}v~}^{}v~}r{}v~}^{}v~}r{}v~}^{}v~}r{}v~}^{}v~}r{}v~}V{}u~V{|v~}r{}v~}^{|v~}s{|s~|`{|v~}s{|s~|`{|v~}s{|s~|`{|v"
"~}s{|s~|Xs~|Xs~}s{|v~}Ws~| K{}u~}x|{x|}t~^{}u~}x|{x|}t~^{}u~}x|{x|}t~^{}u~}x|{x|}t~^{}u~}x|{x|}t~U{}x~}N{|s~| M"
"{|w~|D{}w~| q{|y~}K{|y~}L{}v~|N{}v~Ww~}kw~}^{|j~}\\v~|o{}w~}X{}s~W{|^~} -s~}v|}v~}$v~}#{|w~t{|x~}X{}e~|^w~|o"
"{|w~|v{}w~k{|s~}v|}t~y}v~}'{}w~Jw~} t{}w~L{}v~ u{|v~|Q{|w~O{|u~}w|}u~}\\{|e~|ab~`u~w}|x}r~|O{}w~}]{}v~w}|x}s~}Z"
"t~}w|}t~X{}w~}S{|t~y}v|}t~}^v~y}y|y}s~|S{}v~M{}v~={|}~}6{|y~}|?{}w~}]w~}q{}r~|y{}u~}h{|v~|f{|v~e{}c~|]{}s~y}v|y"
"}t~}g{}b~|^{}c~}`{}w~}N{}r~y}v|y}r~|h{}w~}hv~|Y{}w~}M{}w~}W{}w~}lt~`{}d~}i{}w~|bv~|h{}w~|lr~cr~}v|}s~}_{}w~}Ns~"
"y}v|}s~}a{}w~}j{|v~|e{|s~}u|}r~W{|v~|Vs~}v|y}t~|Xs~}\\{|s~|m{}t~}fv~}j{}v~Y{|v~|[{}\\~}^{|w~}Dw~}N{|w~| t{}u~y"
"|x{|}w~y}w~|_w~}{k~|[{|t~}|wy|}x~|^{|k~y|w~|_{|t~}|vy|y}w~|Xw~}S{|k~y|w~|`w~}m{|w~}Wv~Lv~Tw~}p{}v~}Vv~_w~}mv~mv"
"~hw~}m{|w~}_{}u~}|x{|}u~}]w~y}w~y|yy|}u~|^{}u~}|x{|}w~}w~|Zw~}Qv~}y|v{|}u~|Wm~[{}u~}w|}v~}w~|Y{}s~}Yt~}q{}t~|a{"
"}v~p{|v~|W{}t~W{}d~Uw~}Lw~|M{|w~| q{|u~}|y{|}v~{|s~br~}y|yy|}u~|^{|w~}v{}v~X{}u~}y|{y|}u~}\\{|t~}|vy|y}y~}^w~}"
"m{|w~}X{}t~Xv~|lv~|b{|s~}v|}q~x}hu~}|{y|w~}{}w~}|{|}u~c{}u~}|}w~|}t~|_{|w~}q{|v~}_{|s~}v~}s~}_w~y}w~y|yy|}u~|^{"
"}u~}y|{y|}u~}S{}r~}Z{}v~}|x{|}v~}b{|Z~c{}c~}_{}w~}Vk~v{}l~|^{|v~Y{}w~}hv~|Z{|v~Vr~}v|}s~|\"{}w~ ur~| y{|r~} vv~"
"}St~}y|y~}{y|}x~`{}b~}a{}~|f{~}W{|w~}Lw~|G{|w~}({|v~}|s{|}v~| E{|v~}|s{|}v~| X{|Z~} ${|s~}y|{y|}q~}|}Xx~}w{|x~"
"} l{}x~|c{}x~h{}x~}m{|w~|`{}x~|c{}x~f{|v~}V{|v~|f{|v~i{|v~|f{|v~i{|v~|f{|v~i{|v~|f{|v~i{|v~|f{|v~i{|v~dv~|r{|"
"v~k{|b~g{}s~y}v|y}t~}c{}c~}a{}c~}a{}c~}a{}c~}X{}w~}M{}w~}M{}w~}M{}w~}Z{|b~}a{}w~|lr~cr~}v|}s~}`r~}v|}s~}`r~}v|}"
"s~}`r~}v|}s~}`r~}v|}s~}b{|x~|h{|x~}f{}o~}v|}s~}_s~}v|y}t~|_s~}v|y}t~|_s~}v|y}t~|_s~}v|y}t~|W{|v~|V{}w~}Mw~}xk~}"
"a{}u~y|x{|}w~y}w~|`{}u~y|x{|}w~y}w~|`{}u~y|x{|}w~y}w~|`{}u~y|x{|}w~y}w~|`{}u~y|x{|}w~y}w~|`{}u~y|x{|}w~y}w~|j{}"
"u~y|x{|}u~y{|t~}|vy|}v~f{|t~}|wy|}x~|^{|t~}|vy|y}w~|_{|t~}|vy|y}w~|_{|t~}|vy|y}w~|_{|t~}|vy|y}w~|Wv~Lv~Lv~Lv~S{"
"}j~}\\w~}m{|w~}_{}u~}|x{|}u~}\\{}u~}|x{|}u~}\\{}u~}|x{|}u~}\\{}u~}|x{|}u~}\\{}u~}|x{|}u~}U{}u~V{}t~}|x{|}u~}\\{"
"}u~}w|}v~}w~|_{}u~}w|}v~}w~|_{}u~}w|}v~}w~|_{}u~}w|}v~}w~|X{}t~Ww~y}w~y|yy|}u~|W{}t~ I{}h~}\\{}h~}\\{}h~}\\{}h~"
"}\\{}h~}T{}x~}Ms~ K{|y~}C{|w~ p{}x~K{}x~Kw~|L{}x~|Ww~}kw~}]{|l~}\\{|v~n{|w~}X{|s~U{}`~} -{|h~|$v~}#{}x~}t{}x"
"~}X{|}g~|^{}x~}m{}w~}y|}v~|j{|g~}y{}v~}({|w~|L{|w~| t{}w~L{}v~ u{|v~|Q{}x~}N{}k~}[{|e~|ab~`e~|N{}w~}]{}g~}Y{|i~"
"|Xv~|R{|g~}]i~|R{}v~M{}v~;y|5{|<{}w~}]{|w~|p{|v}|w{|x}|e{}v~dv~}f{}e~}|[{}d~|g{}d~}\\{}c~}`{}w~}M{}c~}|g{}w~}hv"
"~|Y{}w~}M{}w~}W{}w~}kt~a{}d~}i{}w~|bv~|h{}w~|l{|s~b{}f~|^{}w~}M{}f~|`{}w~}iv~}e{|c~V{|v~|Uf~}W{}t~|[s~l{}t~|g{}"
"v~hv~}Z{|v~|[{}\\~}^{|w~}D{}w~N{|w~| sj~{}w~|_w~}{|m~|Y{}i~|]{|m~|{|w~|^{|f~|Xw~}R{|m~|{}w~|`w~}m{|w~}Wv~Lv~Tw"
"~}o{}v~}Wv~_w~}mv~mv~hw~}m{|w~}^h~\\w~}{k~|\\k~y|w~|Zw~}Qg~}V{|n~Zk~{}w~|Y{|s~|Y{}u~}q{|t~a{|v~|o{}v~W{|u~|W{}d"
"~Uw~}Lw~|M{|w~| p{|l~|ys~be~}\\{}v~x}u~V{}j~}Z{|h~}^w~}m{|w~}X{|u~|Y{|w~}k{}w~}b{|w~}m~|s~h{|m~xm~|b{}g~|^{|w~"
"}pr~a{|f~}^w~}{k~|\\{}j~}R{|r~}Y{}l~}a{}Z~}d{}c~}_{}w~}Vk~v{}l~|^{|v~Y{}w~}hv~|Z{|v~U{}f~|!{}w~ tt~| w{|t~} uv~"
"}R{}i~`{}b~}`{|?{|w~}Lw~|Fw~}&{}t~w}t~} A{}t~w}t~} V{|Z~} ${|w~}m~|s~Xx~}w{|x~} m{|x~}b{}x~hw~lk~k{|x~}b{}x~"
"fv~}U{}v~dv~}j{}v~dv~}j{}v~dv~}j{}v~dv~}j{}v~dv~}j{}w~}d{}w~}r{}w~}k{|b~f{}d~|c{}c~}a{}c~}a{}c~}a{}c~}X{}w~}M{}"
"w~}M{}w~}M{}w~}Z{|d~}|`{}w~|l{|s~b{}f~|^{}f~|^{}f~|^{}f~|^{}f~|`{|~|f{|~}f{|w~|}f~|]f~}]f~}]f~}]f~}V{|v~|V{}w~}"
"Mw~}xl~}_j~{}w~|_j~{}w~|_j~{}w~|_j~{}w~|_j~{}w~|_j~{}w~|ii~w{|f~e{}i~|]{|f~|^{|f~|^{|f~|^{|f~|Wv~Lv~Lv~Lv~R{}l~"
"}[w~}m{|w~}^h~Zh~Zh~Zh~Zh~){|f~Zk~{}w~|^k~{}w~|^k~{}w~|^k~{}w~|X{|u~|Ww~}{k~|V{|u~| H{|j~|Z{|j~|Z{|j~|Z{|j~|Z{|"
"j~|S{}x~}M{}u~} I{}Ax~} pw~|Lw~|L{|y~|Jy~|Vw~}kw~}[{}o~|[{}w~}mv~Wt~}T{|}b~} +{}l~}\"v~}#w~|tw~|U{|}l~}]{|w~"
"ko~|h{|j~}|w{}u~({}w~L{}w~ s{}w~Lv~| u{|v~|Qw~}M{|m~}Z{|e~|ab~`g~}|M{}w~}]{}h~|W{|k~W{}v~P{|i~|\\k~}P{}v~Mv~| "
"i{}w~}\\{}w~Jv~}d{}v~f{}g~}|X{|}h~}e{}g~}|Z{}c~}`{}w~}L{|}g~}|e{}w~}hv~|Y{}w~}M{}w~}W{}w~}jt~b{}d~}i{}w~|bv~|h{"
"}w~|ks~a{|i~}\\{}w~}L{|i~}^{}w~}i{|v~|e{}f~}U{|v~|T{}i~|Ut~Z{}u~}l{|t~g{|v~|h{|v~|[{|v~|[{}\\~}^{|w~}D{|w~N{|w~"
"| s{|l~|{}w~|_w~}x{}q~}|W{|j~|[{}p~|y{|w~|]{|g~|Xw~}P{}q~}|y{}w~|`w~}m{|w~}Wv~Lv~Tw~}n{|v~}Xv~_w~}mv~mv~hw~}m{"
"|w~}]{}l~}[w~}{|m~|Zm~|{|w~|Zw~}Qh~|T{|o~Z{|m~|{}w~|Xs~X{}u~|pu~}av~}m{}w~}Wu~V{}d~Uw~}Lw~|M{|w~| o{|n~|w{}u~b"
"f~}Z{}p~}T{}l~}X{|i~}^w~}m{|w~}Wu~Xv~|k{|v~b{|w~y|o~|{}t~g{|o~|x{|o~}`{}i~|]{|w~}p{}s~_{}j~}|]w~}{|m~|Z{}l~}P{|"
"s~}X{}n~}`X~d{}c~}_{}w~}Vk~v{}l~|^{|v~Y{}w~}hv~|Z{|v~T{|i~} {{}w~ sv~| u{|v~} tv~}Q{}j~`{}b~}#{|w~}Lw~|G{|w~}${"
"}m~} ={}m~} T{|Z~} ${|w~y|o~|{}t~Xx~}w{|x~} mw~|b{}x~i{}x~|lk~kw~|b{}x~g{|v~Tv~}d{}v~jv~}d{}v~jv~}d{}v~jv~}d"
"{}v~jv~}d{}v~k{|v~|d{|v~rv~|k{|b~e{|}h~}a{}c~}a{}c~}a{}c~}a{}c~}X{}w~}M{}w~}M{}w~}M{}w~}Z{|g~}|]{}w~|ks~a{|i~}["
"{|i~}[{|i~}[{|i~}[{|i~}/{|w~|y{|i~}Z{}i~|[{}i~|[{}i~|[{}i~|U{|v~|V{}w~}Mw~}xm~|^{|l~|{}w~|_{|l~|{}w~|_{|l~|{}w~"
"|_{|l~|{}w~|_{|l~|{}w~|_{|l~|{}w~|i{|l~}u{|g~d{|j~|\\{|g~|]{|g~|]{|g~|]{|g~|Wv~Lv~Lv~Lv~Q{|}p~}|Zw~}m{|w~}]{}l~"
"}X{}l~}X{}l~}X{}l~}X{}l~}){|w~}l~}Y{|m~|{}w~|^{|m~|{}w~|^{|m~|{}w~|^{|m~|{}w~|Wu~Vw~}{|m~|Tu~ E{|}p~}|V{|}p~}|V"
"{|}p~}|V{|}p~}|V{|}p~}|Qw~}Lu~| i{}y~| q{|w~}M{|w~}K{|}I{|}Uw~}kw~}Y{|y}w~y}|Yv~|m{}w~|X{}u~|Q{|}e~} *{|}p~"
"}|!v~}#w~t{|w~Py|x}y~x}y|[w~|j{}r~|e{|n~}|t{}u~){|w~|N{|w~| s{}w~Lv~ t{|v~|R{|w~|L{|}p~|Y{|e~|ab~`y|}l~}|K{}w~}"
"]{|}k~|S{}o~|Vv~}N{|m~}Z{}n~}|O{}v~Mv~ h{}w~}[v~L{|v~|d{|v~|g{}k~y}y|T{|}m~}|c{}m~x}y|W{}c~}`{}w~}J{|}k~}|c{}w"
"~}hv~|Y{}w~}M{}w~}W{}w~}it~c{}d~}i{}w~|bv~|h{}w~|k{|t~_{|m~}|[{}w~}J{|l~|]{}w~}h{}w~}c{|}k~}|T{|v~R{|}m~|S{}v~}"
"Z{|u~|kt~gv~}f{}v~[{|v~|[{}\\~}^{|w~}Cw~|O{|w~| q{}p~}x{}w~|_v}vy}w~y}|S{}m~}Xy}w~y}|w{|w}|[{|l~}|Vw~}N{|}w~y}"
"|w{}w~|`v}lw}|Wv~Lv~Tv}m{|u}Yv}_w~}mv~mv~hw~}m{|w~}\\{|n~|Zw~}x{}q~}W{}q~}|y{|w~|Zw~}Q{|}l~}P{|y}s~X{}q~}x{}w~|"
"X{}u~}X{|u~o{}v~|b{}w~}kv~}X{}w~}V{}d~Uv~Lw~|M{|w~| n{|}q~}u{|}w~bv~{}o~}|X{|r~|R{|}p~}|U{}l~}|^w~}m{|w~}W{}w~"
"}Xw}|i{|w}b{|w~|{|q~|y{|t~f{|q~|v{|q~|^{|l~}[{|w~}os~]{|}o~}|[w~}x{}q~}W{|}p~}|M{|}v~}W{|p~|`{|X~|e{}c~}_{}w~}V"
"k~v{}l~|^{|v~Y{}w~}hv~|Z{|v~R{|m~}| y{}w~ rx~| s{|x~} sv~}P{|}n~}|`{}b~}#{|w~}Lw~|Ty|pv~|\"y|}u~}y| 9y|}u~}y| "
"R{|Z~} ${|w~|{|q~|y{|t~Xx~}w{|x~} y}| q{}x~}aw}j{|w~kk~l{}x~}aw}gv~}U{|v~|d{|v~|l{|v~|d{|v~|l{|v~|d{|v~|l{|v~|"
"d{|v~|l{|v~|d{|v~|l{|v}bv}|t{}w~}j{|b~c{|}m~}|_{}c~}a{}c~}a{}c~}a{}c~}X{}w~}M{}w~}M{}w~}M{}w~}Z{|m~x}y|Z{}w~|k{"
"|t~_{|m~}|X{|m~}|X{|m~}|X{|m~}|X{|m~}|.w~}v{|}n~}|X{|}m~|X{|}m~|X{|}m~|X{|}m~|S{|v~|V{}w~}Mv|wy|}u~y}|Z{}p~}x{}"
"w~|]{}p~}x{}w~|]{}p~}x{}w~|]{}p~}x{}w~|]{}p~}x{}w~|]{}p~}x{}w~|g{}o~|r{|l~}|a{}m~}Y{|l~}|Y{|l~}|Y{|l~}|Y{|l~}|U"
"v~Lv~Lv~Lv~O{|y}v~y}|Xw~}m{|w~}\\{|n~|V{|n~|V{|n~|V{|n~|V{|n~|(w~|{|n~|V{}q~}x{}w~|\\{}q~}x{}w~|\\{}q~}x{}w~|\\"
"{}q~}x{}w~|W{}w~}Vw~}x{}q~}R{}w~} B{|t}|P{|t}|P{|t}|P{|t}|P{|t}|Nw~} 3{|~} ;f| '{|y}w~}y| 8{|y~|X{|x~}"
"h{|}w~}|ay|y}w~y}| rw~}N{}w~ ?{|w~| D{}w~I{|y}w~y}|%b|\\{|x}u~y}|!y|y}u~y}y|O{|y}w~y}| {{y|}u~y}|Vy|y}v~}y| u{|"
"w~| B{|v~| 1{|y}u~y}| o{|x}u~y}y| Fv~| 7y|y}v~y}| {{y|y}q~|#y|y}u~y}y| {{|y}v~y}y| a{|w~}C{}x~}O{|w~| oy}"
"v~}|vv|!{|}t~y}|!{|y}t~y}|Sv|Av~\"v|Lv~ Rv|mv|mv|hv|lv|Z{|y}u~}|Xw~}v{|}w~y}|T{|}w~y}|w{|w~|Zv|Ny|y}u~y}| {{|y}"
"w~}|uw|W{|u}|Wv}|o{|v}av|ju|Xv~| sv~Lw~|M{}w~| ly|}v~}|Uv~yy|}v~y}|S{|y}~y}|N{|y}v~y}|Qy|y}v~x}|[v|m{|w~}W{|w~"
"|#{|w~|x{|}w~}|v{|}y~y}c{|y}x~y}ry}x~y}|Z{|y}s~}y|G{}w~}|Zy|v~}|Ww~}v{|}w~y}|T{|y}v~y}| x{|y}w~}| Ry|y}v~y}|"
" Zy| rv~}M{|y}u~}|]`| Iw~|T{|y~}|u{|u~ 5{|w~|x{|}w~}|v{|}x~}Wx~}w{|x~} {}y~} r{|y}|Kw~|L{|y}|Hv~| E"
"{|y}u~y}| qy|y}v~y}|Sy|y}v~y}|Sy|y}v~y}|Sy|y}v~y}|Sy|y}v~y}|+{|y~}r{|y}v~y}|R{|y}v~y}y|S{|y}v~y}y|S{|y}v~y"
"}y|S{|y}v~y}y| oy}v~}|vv|Zy}v~}|vv|Zy}v~}|vv|Zy}v~}|vv|Zy}v~}|vv|Zy}v~}|vv|d{|}v~y}|n{|y}u~y}y|\\{|}t~y}|U{|y}"
"t~y}|T{|y}t~y}|T{|y}t~y}|T{|y}t~y}|Rv|Lv|Lv|Lv|!v|lv|Z{|y}u~}|R{|y}u~}|R{|y}u~}|R{|y}u~}|R{|y}u~}|'{}x~|w{|y}u~"
"}|S{|y}w~}|uw|Z{|y}w~}|uw|Z{|y}w~}|uw|Z{|y}w~}|uw|Vv~|Vw~}v{|}w~y}|Qv~| Mw~| K{|y~| e{|w~Nw~"
"| ?{}w~ Cw~} .{}w~ @{|v~|d{}| Kv~| !u~| J{|w~}C{|w~O{|w~| 9w~} Iv~ bw~}9{|w~| X{|v~ rv"
"~Lw~|M{}w~| w~| D{|w~| .w~| ?{|v~}g{|x~| M{|v~ {|u~| K{|w~}Bw~|P{|w~| :{}w~} Iw~} bw~}9{"
"|w~| X{}w~| r{}w~|Mw~|Mv~ ;v~ S{|w~}W{|w~|#{|w~| j{}w~ s{}w~Uw~} )v~}Iy~} gw~|T{|l~| 4{|w~"
"|Ax~}w{|x~} {{}y~} /v~| ?x~| f{|x~ M{} %{}w~|Uw~}D{}w~| Lw~| K"
"{|y~| d{|w~Pw~| ?{|w~ C{}w~ .{|w~ ={|u~}|l{|u~| N{}v~ {{|u~| L{|q~}H{}x~}V{}q~| :v~| Iw~}"
" bw~}9{|w~| Xv~ q{}w~}Mw~|N{|v~ ;v~ S{|w~}W{|w~|#{|w~| j{}w~ s{}w~Uw~} )v~}Iy~} gw~|T{|}o~}| "
" 3{|w~|Ax~}w{|x~} {{|x~| 0v~}m{} N{|x~ e{}y~} Rv~Tw~}Dv~ S{}x~x{|w~| "
" K{|y~| c{}x~}R{}x~} >{|x~| Cw~} .{|x~| ;{}t~}|sy|}t~| N{|v~} y{|u~| M{|q~}H{|w~V"
"{}q~| ;{}v~ I{|w~} bw~}9{|w~| Y{}w~} q{|v~}|Ow~|P{|}v~} ;v~ S{|w~}W{|w~|#{|w~| j{}w~ s{}w~Uw~} "
" )v~}Iy~} gw~|Q{|y}v~y}| 1{|w~|Ax~}w{|x~} yx~| 0{}v~|p{|~} N{|x~| f{|x~ "
" S{}w~}Tw~}E{}w~} S{}x~|y{|w~ J{|y~| bw~|Sw~| >{}y~} K{}y~} 9{|p~x}q~}| N{|u~"
"| x{|u~ M{|q~} y{}q~| K{|}|p{|u~| I{}w~| bw~}9{|w~| Z{|v~ o{}q~}Tw~|U{|p~ :v~ S{|w~}W{|w~|#{|"
"w~| j{}w~ s{}w~Uw~} )v~}Iy~} gw~| W{|w~|Aw|vx| y{|x~} 0{|u~|s{}x~} N{|x~| "
" f{|x~| U{|v~Sw~}F{|v~ R{|x~}y{}w~ J{|y~| b{|x}|T{|x}| w{}g~}| Q"
"x|y}u~} v{|u~ N{|p} yp}| K{|x~}y|wy|}u~} J{|}v~ aw~}9{|w~| \\{|}v~} nq~}Tw~|U{|q~| :v~ S{|w~}"
"W{|w~|#{|w~| j{}w~ s{}w~Uw~} )v~}Iy~} gw~| W{|w~| :{|}w|}w~| /t~y}x|y}v~} U{|}|x{|w~| "
" f{}x~| W{|}v~}Sw~}H{|}v~} Qq~| J{|y} *{|}l~}| O{}q"
"~ tt| `{|i~} Lr~| aw~}9{|w~| `{}q~ l{}s~}Tw~|U{|s~}| 9v~ S{|w~}W{|w~|#{|w~| j{}w~ s{}w~Uw~"
"} )v~}Iy~} gw~| W{|w~| :{|q~ .{|i~} U{|q~ ly}w|}w~| [{}q~Rw~}"
"L{}q~ P{}r~ M{|y}u~y}y| L{}r~| R{|j~} Ks~} `w~}9{|w~| "
" `{}r~| jy|v}|Tw~|U{|u}| 6v~ S{|w~}W{|w~|#{|w~| j{}w~ s{}w~Uw~} )v~}Iy}| gw~| W{|w~| :{|r~| "
" -{|k~}| U{|r~} l{}r~} Z{}r~|Rw~}L{}r~| O{}t~ "
" k{}t~} -{|`}| `{|}m~}| Jt~} _w~}9{|w~| `{}s~| :w~| cv~ S{|w~}W{|w~|#{|w~| j{}w~ s{}"
"w~Uw~} )v~} d{|w~| 9y}w~y} ){}o~}| S{|}u~}| k{}r~ Y{}s~|Qw~"
"}L{}s~| M{}w~} j{}w~}| +{}`~} ]{|x}v~y}| Gw~y} ]w~}9{|w~"
"| `{}v~}| 8w~| cv~ S{|w~}W{|w~|#{|w~| j{}w~ s{}w~Uw~} g{|w~| 8{|}v~y}| Ly| "
" g{|y}w~}| X{}v~}|Ow~}L{}v~}| Iy| "
"l{}`~} Ww~| "
" L{}`~} Ww}| "
" r{" };
// Define a 104x128 binary font (huge sans).
static const char *const data_font_huge[] = {
" "
" "
" "
" "
" "
" "
" "
" "
" FY AY "
"'Z ;W @Y @Y 'Z Y @Y (Z :Y ?Y (Z 0Y ?Y (Z >X "
" "
" "
" "
" "
" )X AX '\\ )XAV 7YDY -] BY BY '[ +YEY 2X AY (\\ -YDY 'XAU 3Y AY (\\ )XAV 8YD"
"Y LY AY (\\ ,YEY #Y "
" "
" "
" "
" (X CX '^ +[CU 6ZEY .` C"
"X CY '] -ZEZ 2X CY (^ .ZEZ )[CU 2Y CY (] *[CU 7ZEZ LY CY (] -ZEZ %Y "
" "
" "
" "
" "
" 'Y EY '^ ,^FV 6ZEY /b CX DX '_ .ZEZ 2Y DX '_ /ZEZ +_FV 1X CX (_ ,^FV 7ZEZ "
" KX CX (_ .ZEZ &Y "
" "
" "
" "
" %Y GY '` .aHV 6ZEY 1e DY FX"
" 'a /ZEZ 1Y FX '` /ZEZ +aHV 0X EX '` .aHV 7ZEZ JX EX (a /ZEZ &X "
" "
" "
" "
" "
" #X GX 'XNX 0dKW 6ZEY 1f DY HX &WMX 0ZEZ 0X GX 'XMW 0ZEZ ,dLX /X GX 'WMX 0dLX 7ZEZ"
" IX GX 'WMX 0ZEZ 'X :T "
" "
" "
" "
" ;X IX 'XLX 1o 5ZEY 2ZLY "
" CX IX &WKW 0ZEZ /X HX (XLX 1ZEZ ,o .Y HX (WKX 1o 6ZEZ IY IY (WKW 0ZEZ (X X MX &WH"
"W 3VHa 4ZEY 3WDW CX LX 'WGW 2ZEZ -X LX 'WHW 2ZEZ -VHa +X KX (XHW 3VHa 5ZEZ GX KX (WGW 2ZEZ )X "
" ?b "
" "
" "
" "
" ?W MW &WFW 4VF^ 3ZEY 4WBV BW MX 'WEW 3ZEZ ,W M"
"X 'WFW 3ZEZ -VF^ )X MX 'WFW 4VF^ 4ZEZ FX MX 'WFW 3ZEZ *X ?d "
" "
" "
" "
" "
" ?W X 'WDW 5UC[ 2ZEY 4VAV AW X &WDW 4ZEZ +W NW 'WDW 4ZEZ -UC[ 'W MW 'WDW 5UC[ 3ZEZ "
"EW MW 'WDW 4ZEZ +X ?f "
" "
" "
" "
" @X \"X 'WBW 6UAW 0ZEY 4V@V B"
"X !W &WBV 4ZEZ +X !W 'WBW 5ZEZ .VAW $W W 'WBW 6UAW 1ZEZ DW W 'WBV 4ZEZ +W >f "
" "
" "
" "
" "
" ?X #W 'W@W U?V AX #W &W@V NX #W &V@W 9W \"W 'W@V .W "
"\"W 'W@V !W >XHX "
" 3Y "
" "
" "
" 6W $W &V>V U?V @W $W &W>V "
" NW $X 'V>V 8W $X (W>V /X $W 'W>V #W >XFX "
" 5Z "
" "
" ,Z "
" GZ "
" #U?V NY 7Z ,X CVCW MY "
" 7Z ,X $Z 7Z ,X >Z 6Y ,X 4Z 7Y +W 7Y @Z "
" "
" +Z "
" "
" HY \"U?V "
" MY 8Y ,Y CVBV LY 9Z ,Y #Z 9Z ,Z >Z 8Y ,Y 3Y 8Z ,Y 9Y "
" ?Z "
" *Y "
" "
" IY !U?V "
" LY :Y ,[ $R>U ,V@V MZ :Y +Z #Y 9Y +Z ?R"
">U 8Y 9Y +Z %S?U HY :Z ,[ ;Y ?[ "
" "
" )Y "
" 8U "
" 9Y V@U JY Y @Y /X 0Y K` .X "
" ^ =ZEY @Y "
" NVAV