From 48c55af5c1d39e9a29cdb2e0c8203e6767f76c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Mon, 16 Mar 2015 19:30:08 +0100 Subject: [PATCH] fix sprites for pixel ratios that are not 1 and 2 - OpenGL ES 2 doesn't allow NPOT textures with wrap-around - The Sprite object reported the map's pixelRatio, even though it loaded @2x assets - Copying icons from the sprite into the atlas now uses bilinear scaling to scale up to the actual size --- .gitignore | 1 + gyp/cache-sqlite.gypi | 3 +- include/mbgl/platform/platform.hpp | 4 +- platform/default/sqlite_cache.cpp | 2 +- scripts/travis_before_install.sh | 3 + src/mbgl/geometry/sprite_atlas.cpp | 111 +++++++++--------- src/mbgl/map/map.cpp | 2 +- src/mbgl/map/sprite.cpp | 7 +- src/mbgl/map/sprite.hpp | 2 + .../default => src/mbgl/util}/compression.cpp | 2 +- .../default => src/mbgl/util}/compression.hpp | 0 src/mbgl/util/scaling.cpp | 111 ++++++++++++++++++ src/mbgl/util/scaling.hpp | 23 ++++ test/fixtures/sprites/atlas_reference.bin | Bin 0 -> 8137 bytes test/fixtures/sprites/atlas_reference.png | Bin 0 -> 9109 bytes test/fixtures/sprites/bright.bin | Bin 0 -> 68824 bytes test/fixtures/sprites/convert_sprite.js | 19 +++ test/miscellaneous/bilinear.cpp | 53 +++++++++ test/test.gyp | 1 + 19 files changed, 283 insertions(+), 61 deletions(-) rename {platform/default => src/mbgl/util}/compression.cpp (96%) rename {platform/default => src/mbgl/util}/compression.hpp (100%) create mode 100644 src/mbgl/util/scaling.cpp create mode 100644 src/mbgl/util/scaling.hpp create mode 100644 test/fixtures/sprites/atlas_reference.bin create mode 100644 test/fixtures/sprites/atlas_reference.png create mode 100644 test/fixtures/sprites/bright.bin create mode 100644 test/fixtures/sprites/convert_sprite.js create mode 100644 test/miscellaneous/bilinear.cpp diff --git a/.gitignore b/.gitignore index 59c180c5d..d8959d4f3 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ /ios/app/build /test/build /test/node_modules +/test/fixtures/*/*_actual.* /include/mbgl/shader/shaders.hpp /src/shader/shaders_gl.cpp /src/shader/shaders_gles2.cpp diff --git a/gyp/cache-sqlite.gypi b/gyp/cache-sqlite.gypi index 53af8dab5..a9d21924c 100644 --- a/gyp/cache-sqlite.gypi +++ b/gyp/cache-sqlite.gypi @@ -10,12 +10,11 @@ '../platform/default/sqlite_cache.cpp', '../platform/default/sqlite3.hpp', '../platform/default/sqlite3.cpp', - '../platform/default/compression.hpp', - '../platform/default/compression.cpp', ], 'include_dirs': [ '../include', + '../src', ], 'variables': { diff --git a/include/mbgl/platform/platform.hpp b/include/mbgl/platform/platform.hpp index ea630c095..ac90d0d3d 100644 --- a/include/mbgl/platform/platform.hpp +++ b/include/mbgl/platform/platform.hpp @@ -24,10 +24,10 @@ const std::string &applicationRoot(); const std::string &assetRoot(); // Shows an alpha image with the specified dimensions in a named window. -void show_debug_image(std::string name, const char *data, size_t width, size_t height); +void showDebugImage(std::string name, const char *data, size_t width, size_t height); // Shows an alpha image with the specified dimensions in a named window. -void show_color_debug_image(std::string name, const char *data, size_t logical_width, size_t logical_height, size_t width, size_t height); +void showColorDebugImage(std::string name, const char *data, size_t logical_width, size_t logical_height, size_t width, size_t height); } } diff --git a/platform/default/sqlite_cache.cpp b/platform/default/sqlite_cache.cpp index 522b23f22..b8d47159c 100644 --- a/platform/default/sqlite_cache.cpp +++ b/platform/default/sqlite_cache.cpp @@ -5,10 +5,10 @@ #include #include #include +#include #include #include "sqlite3.hpp" -#include "compression.hpp" #include diff --git a/scripts/travis_before_install.sh b/scripts/travis_before_install.sh index 7b0b7ea87..f837e7416 100755 --- a/scripts/travis_before_install.sh +++ b/scripts/travis_before_install.sh @@ -31,6 +31,9 @@ if [[ ${TRAVIS_OS_NAME} == "linux" ]]; then x11proto-xf86vidmode-dev libxxf86vm-dev \ libxcursor-dev libxinerama-dev \ llvm-3.4 # required for mesa + + mapbox_time "install_mesa" \ + mason install mesa 10.4.3 fi mapbox_time "install_awscli" \ diff --git a/src/mbgl/geometry/sprite_atlas.cpp b/src/mbgl/geometry/sprite_atlas.cpp index 077550ff7..dce772f2e 100644 --- a/src/mbgl/geometry/sprite_atlas.cpp +++ b/src/mbgl/geometry/sprite_atlas.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -66,34 +67,6 @@ bool SpriteAtlas::resize(const float newRatio) { return dirty; } -void copy_bitmap(const uint32_t *src, const int src_stride, const int src_x, const int src_y, - uint32_t *dst, const int dst_stride, const int dst_height, const int dst_x, const int dst_y, - const int width, const int height, const bool wrap) { - if (wrap) { - - for (int y = -1; y <= height; y++) { - int dst_y_wrapped = (y + dst_y + dst_height) % dst_height; - int src_y_wrapped = ((y + height) % height) + src_y; - int srcI = src_y_wrapped * src_stride + src_x; - int dstI = dst_y_wrapped * dst_stride; - for (int x = -1; x <= width; x++) { - int dst_x_wrapped = (x + dst_x + dst_stride) % dst_stride; - int src_x_wrapped = (x + width) % width; - dst[dstI + dst_x_wrapped] = src[srcI + src_x_wrapped]; - } - } - - } else { - dst += dst_y * dst_stride + dst_x; - src += src_y * src_stride + src_x; - for (int y = 0; y < height; y++, src += src_stride, dst += dst_stride) { - for (int x = 0; x < width; x++) { - dst[x] = src[x]; - } - } - } -} - Rect SpriteAtlas::allocateImage(const size_t pixel_width, const size_t pixel_height) { // Increase to next number divisible by 4, but at least 1. // This is so we can scale down the texture coordinates and pack them @@ -176,25 +149,53 @@ void SpriteAtlas::allocate() { void SpriteAtlas::copy(const Rect& dst, const SpritePosition& src, const bool wrap) { if (!sprite->raster) return; - const uint32_t *src_img = reinterpret_cast(sprite->raster->getData()); - if (!src_img) return; - allocate(); - uint32_t *dst_img = reinterpret_cast(data); - copy_bitmap( - /* source buffer */ src_img, - /* source stride */ sprite->raster->getWidth(), - /* source x */ src.x, - /* source y */ src.y, - /* dest buffer */ dst_img, - /* dest stride */ width * pixelRatio, - /* dest height */ height * pixelRatio, - /* dest x */ dst.x * pixelRatio, - /* dest y */ dst.y * pixelRatio, - /* icon dimension */ src.width, - /* icon dimension */ src.height, - /* wrap padding */ wrap - ); + const uint32_t *srcData = reinterpret_cast(sprite->raster->getData()); + if (!srcData) return; + const vec2 srcSize { sprite->raster->getWidth(), sprite->raster->getHeight() }; + const Rect srcPos { src.x, src.y, src.width, src.height }; + + allocate(); + uint32_t *dstData = reinterpret_cast(data); + const vec2 dstSize { static_cast(width * pixelRatio), + static_cast(height * pixelRatio) }; + const Rect dstPos { static_cast(dst.x * pixelRatio), + static_cast(dst.y * pixelRatio), + static_cast(dst.originalW * pixelRatio), + static_cast(dst.originalH * pixelRatio) }; + + util::bilinearScale(srcData, srcSize, srcPos, dstData, dstSize, dstPos); + + // Add borders around the copied image if required. + if (wrap) { + // We're copying from the same image so we don't have to scale again. + const uint32_t border = 1; + // Left border + if (dstPos.x >= border) { + util::nearestNeighborScale( + dstData, dstSize, { dstPos.x + dstPos.w - border - 1, dstPos.y, border, dstPos.h }, + dstData, dstSize, { dstPos.x - border, dstPos.y, border, dstPos.h }); + } + // Right border + util::nearestNeighborScale(dstData, dstSize, { dstPos.x, dstPos.y, border, dstPos.h }, + dstData, dstSize, + { dstPos.x + dstPos.w, dstPos.y, border, dstPos.h }); + + // Top border + if (dstPos.y >= border) { + util::nearestNeighborScale( + dstData, dstSize, { dstPos.x - border, dstPos.y + dstPos.h - border - 1, + dstPos.w + 2 * border, border }, + dstData, dstSize, + { dstPos.x - border, dstPos.y - border, dstPos.w + 2 * border, border }); + } + + // Bottom border + util::nearestNeighborScale( + dstData, dstSize, { dstPos.x - border, dstPos.y, dstPos.w + 2 * border, border }, + dstData, dstSize, + { dstPos.x - border, dstPos.y + dstPos.h, dstPos.w + 2 * border, border }); + } dirty = true; } @@ -236,8 +237,10 @@ void SpriteAtlas::bind(bool linear) { #ifndef GL_ES_VERSION_2_0 MBGL_CHECK_ERROR(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0)); #endif - MBGL_CHECK_ERROR(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)); - MBGL_CHECK_ERROR(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)); + // We are using clamp to edge here since OpenGL ES doesn't allow GL_REPEAT on NPOT textures. + // We use those when the pixelRatio isn't a power of two, e.g. on iPhone 6 Plus. + MBGL_CHECK_ERROR(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); + MBGL_CHECK_ERROR(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); first = true; } else { MBGL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, texture)); @@ -255,7 +258,7 @@ void SpriteAtlas::bind(bool linear) { allocate(); if (first) { - glTexImage2D( + MBGL_CHECK_ERROR(glTexImage2D( GL_TEXTURE_2D, // GLenum target 0, // GLint level GL_RGBA, // GLint internalformat @@ -265,9 +268,9 @@ void SpriteAtlas::bind(bool linear) { GL_RGBA, // GLenum format GL_UNSIGNED_BYTE, // GLenum type data // const GLvoid * data - ); + )); } else { - glTexSubImage2D( + MBGL_CHECK_ERROR(glTexSubImage2D( GL_TEXTURE_2D, // GLenum target 0, // GLint level 0, // GLint xoffset @@ -277,12 +280,14 @@ void SpriteAtlas::bind(bool linear) { GL_RGBA, // GLenum format GL_UNSIGNED_BYTE, // GLenum type data // const GLvoid *pixels - ); + )); } dirty = false; - // platform::show_color_debug_image("Sprite Atlas", reinterpret_cast(data), width, height, width * pixelRatio, height * pixelRatio); +#ifndef GL_ES_VERSION_2_0 + // platform::showColorDebugImage("Sprite Atlas", reinterpret_cast(data), width * pixelRatio, height * pixelRatio, width * pixelRatio, height * pixelRatio); +#endif } }; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 29521f949..d12afc914 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -374,7 +374,7 @@ std::string Map::getStyleJSON() const { util::ptr Map::getSprite() { const float pixelRatio = state.getPixelRatio(); const std::string &sprite_url = style->getSpriteURL(); - if (!sprite || sprite->pixelRatio != pixelRatio) { + if (!sprite || !sprite->hasPixelRatio(pixelRatio)) { sprite = Sprite::Create(sprite_url, pixelRatio, *env); } diff --git a/src/mbgl/map/sprite.cpp b/src/mbgl/map/sprite.cpp index 114e8f45f..8883ee092 100644 --- a/src/mbgl/map/sprite.cpp +++ b/src/mbgl/map/sprite.cpp @@ -32,7 +32,7 @@ util::ptr Sprite::Create(const std::string &base_url, float pixelRatio, Sprite::Sprite(const Key &, const std::string& base_url, float pixelRatio_) : valid(base_url.length() > 0), - pixelRatio(pixelRatio_), + pixelRatio(pixelRatio_ > 1 ? 2 : 1), spriteURL(base_url + (pixelRatio_ > 1 ? "@2x" : "") + ".png"), jsonURL(base_url + (pixelRatio_ > 1 ? "@2x" : "") + ".json"), raster(), @@ -41,6 +41,11 @@ Sprite::Sprite(const Key &, const std::string& base_url, float pixelRatio_) future(promise.get_future()) { } +bool Sprite::hasPixelRatio(float ratio) const { + return pixelRatio == (ratio > 1 ? 2 : 1); +} + + void Sprite::waitUntilLoaded() const { future.wait(); } diff --git a/src/mbgl/map/sprite.hpp b/src/mbgl/map/sprite.hpp index cb0c274de..6c1b3ba8e 100644 --- a/src/mbgl/map/sprite.hpp +++ b/src/mbgl/map/sprite.hpp @@ -43,6 +43,8 @@ public: const SpritePosition &getSpritePosition(const std::string& name) const; + bool hasPixelRatio(float ratio) const; + void waitUntilLoaded() const; bool isLoaded() const; diff --git a/platform/default/compression.cpp b/src/mbgl/util/compression.cpp similarity index 96% rename from platform/default/compression.cpp rename to src/mbgl/util/compression.cpp index c8b38e742..3a1658b8f 100644 --- a/platform/default/compression.cpp +++ b/src/mbgl/util/compression.cpp @@ -87,7 +87,7 @@ std::string decompress(const std::string &raw) { inflateEnd(&inflate_stream); if (code != Z_STREAM_END) { - throw std::runtime_error(inflate_stream.msg); + throw std::runtime_error(inflate_stream.msg ? inflate_stream.msg : "decompression error"); } return result; diff --git a/platform/default/compression.hpp b/src/mbgl/util/compression.hpp similarity index 100% rename from platform/default/compression.hpp rename to src/mbgl/util/compression.hpp diff --git a/src/mbgl/util/scaling.cpp b/src/mbgl/util/scaling.cpp new file mode 100644 index 000000000..a554b2e13 --- /dev/null +++ b/src/mbgl/util/scaling.cpp @@ -0,0 +1,111 @@ +#include "scaling.hpp" + +namespace { + +using namespace mbgl; + +inline uint8_t bilinearInterpolate(uint8_t tl, uint8_t tr, uint8_t bl, uint8_t br, double dx, double dy) { + const double t = dx * (tr - tl) + tl; + const double b = dx * (br - bl) + bl; + return t + dy * (b - t); +} + +template +inline const uint8_t& b(const uint32_t& w) { + return reinterpret_cast(&w)[i]; +} + +template +inline uint8_t& b(uint32_t& w) { + return reinterpret_cast(&w)[i]; +} + +vec2 getFactor(const Rect& srcPos, const Rect& dstPos) { + return { + double(srcPos.w) / dstPos.w, + double(srcPos.h) / dstPos.h + }; +} + +vec2 getBounds(const vec2& srcSize, const Rect& srcPos, + const vec2& dstSize, const Rect& dstPos, + const vec2& factor) { + if (srcPos.x > srcSize.x || srcPos.y > srcSize.y || + dstPos.x > dstSize.x || dstPos.y > dstSize.y) { + // Source or destination position is out of range. + return { 0, 0 }; + } + + // Make sure we don't read/write values out of range. + return { std::min(uint32_t(double(srcSize.x - srcPos.x) / factor.x), + std::min(dstSize.x - dstPos.x, dstPos.w)), + std::min(uint32_t(double(srcSize.y - srcPos.y) / factor.y), + std::min(dstSize.y - dstPos.y, dstPos.h)) }; +} +} + +namespace mbgl { +namespace util { + +void bilinearScale(const uint32_t* srcData, const vec2& srcSize, + const Rect& srcPos, uint32_t* dstData, const vec2& dstSize, + const Rect& dstPos) { + const auto factor = getFactor(srcPos, dstPos); + const auto bounds = getBounds(srcSize, srcPos, dstSize, dstPos, factor); + + double fractSrcY = srcPos.y; + double fractSrcX; + uint32_t x, y; + size_t i = dstSize.x * dstPos.y + dstPos.x; + for (y = 0; y < bounds.y; y++) { + fractSrcX = srcPos.x; + const uint32_t srcY0 = fractSrcY; + const uint32_t srcY1 = std::min(srcY0 + 1, srcSize.y - 1); + for (x = 0; x < bounds.x; x++) { + const uint32_t srcX0 = fractSrcX; + const uint32_t srcX1 = std::min(srcX0 + 1, srcSize.x - 1); + + const uint32_t tl = srcData[srcSize.x * srcY0 + srcX0]; + const uint32_t tr = srcData[srcSize.x * srcY0 + srcX1]; + const uint32_t bl = srcData[srcSize.x * srcY1 + srcX0]; + const uint32_t br = srcData[srcSize.x * srcY1 + srcX1]; + + const double dx = fractSrcX - srcX0; + const double dy = fractSrcY - srcY0; + uint32_t& dst = dstData[i + x]; + b<0>(dst) = bilinearInterpolate(b<0>(tl), b<0>(tr), b<0>(bl), b<0>(br), dx, dy); + b<1>(dst) = bilinearInterpolate(b<1>(tl), b<1>(tr), b<1>(bl), b<1>(br), dx, dy); + b<2>(dst) = bilinearInterpolate(b<2>(tl), b<2>(tr), b<2>(bl), b<2>(br), dx, dy); + b<3>(dst) = bilinearInterpolate(b<3>(tl), b<3>(tr), b<3>(bl), b<3>(br), dx, dy); + fractSrcX += factor.x; + } + i += dstSize.x; + fractSrcY += factor.y; + } +} + +void nearestNeighborScale(const uint32_t* srcData, const vec2& srcSize, + const Rect& srcPos, uint32_t* dstData, + const vec2& dstSize, const Rect& dstPos) { + const auto factor = getFactor(srcPos, dstPos); + const auto bounds = getBounds(srcSize, srcPos, dstSize, dstPos, factor); + + double fractSrcY = srcPos.y; + double fractSrcX; + size_t i = dstSize.x * dstPos.y + dstPos.x; + uint32_t srcY; + uint32_t x, y; + for (y = 0; y < bounds.y; y++) { + fractSrcX = srcPos.x; + srcY = srcSize.x * uint32_t(fractSrcY); + for (x = 0; x < bounds.x; x++) { + dstData[i + x] = srcData[srcY + uint32_t(fractSrcX)]; + fractSrcX += factor.x; + } + i += dstSize.x; + fractSrcY += factor.y; + } +} + +} +} \ No newline at end of file diff --git a/src/mbgl/util/scaling.hpp b/src/mbgl/util/scaling.hpp new file mode 100644 index 000000000..d2625e921 --- /dev/null +++ b/src/mbgl/util/scaling.hpp @@ -0,0 +1,23 @@ +#ifndef MBGL_UTIL_SCALING +#define MBGL_UTIL_SCALING + + +#include +#include + +#include + +namespace mbgl { +namespace util { + +void bilinearScale(const uint32_t* srcData, const vec2& srcSize, + const Rect& srcPos, uint32_t* dstData, const vec2& dstSize, + const Rect& dstPos); + +void nearestNeighborScale(const uint32_t* srcData, const vec2& srcSize, + const Rect& srcPos, uint32_t* dstData, + const vec2& dstSize, const Rect& dstPos); +} +} + +#endif diff --git a/test/fixtures/sprites/atlas_reference.bin b/test/fixtures/sprites/atlas_reference.bin new file mode 100644 index 0000000000000000000000000000000000000000..57eb28bd931670a06b8781d5f79edaef6c1eeb31 GIT binary patch literal 8137 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

+E%Q#eg^nfc5rd3bw%VM-*3-GIee8>l z_jd*56*EeHQvA@J!ZN6_*9P%;&C8SEU|s&}3;M$+BcU8Ep&knX*2Zfui!`kQ6W16& zA-XFhmzL-bLA|gu9OrzX5l!IS<_O4wGJt{239xz80sSY$q5>!2QbecD;2ofIlDF$V zrUZSc1GKTiAp%8E?Fx7n#s|1ZxfMC8Np&X^ zOKi6%5u5S^JKJ5M8}`HvN`0c80_jm?gRon*YHcykXSS5KjA@6I!8zuX7=g5Xr>_xg z4{|a8^%9D(7V5mSjFQ#(=!GSq>k17}7q}B~^e5mpjhl^mu{!RV$~k?_tK%YK3o062 zx}R6#Yb57Bn};4gzj|U+p~xP{HA7CsZB!))8FrH?n8s)*3yMsp91y4Iim(Ac@94Q z)%hUisav0k{(wtmACRLZ3S1H#IJxQ1St3c0tvZ$~RQE9Ao8?LZ#j?zJayEmafCnsa z#ULtEEdV^A8CfUh-IpkZv*EYc=r!6$afYvLF4Csu%k95Pr29etYw3YOSId5C}>tgg0X8tcfPBBN!h<@NSlid@)$Ff3^j4*?Vp z1<4J7+Yg;=UUTgC$9v^%-Sh>dOae2@V0$>%PnqG!&1p$HV6mHk50x_jo;3*nDf6BWF z!5Z8n2+;1rxvUHo?V>N<{<95+v9{qbFOz^fpi=6gv|CA_I@s0m7SJZ%wuG{2UI0Kf z*qdOL^0iwdWB|^RBw8cQj~_qk{kJ4@yPAe9zn&H2nD7#O>3Srz4a!_O%{^I6!w^N7 z*1|klx*qFvA$=)dvTrvJOyy-qr8z5T!H`Cz0tE{MswB6@xdM<%V=Fr3BvZ|=P3u^} z^XkBHq}*z6eSCZX?40_iVSx|J6>_a=*viAs3K^eeKU*-bcTUp&QvI{`AJWGU(|{187tz>NL(*SP!dOR1_t(dk zO?_TV7ZKh=St^vcL-1!IR#)-d!pDO_-*v|~&~iGO3HaYP0vU@wmx==eO=_NiG`PIm z%4bIElcny{BHR^zxB|O`{f8WT?Kz;n!M%^Na0+kO~HTT*M!0!1b_t?JH6tE zjFM~qlMObd=CB6CTjiUwh(HhnFOY{z7Xh5;rbP@$zA_2%gxBy`<`{l{%kI##_n8R0 zx@a~Vq$G?oQ@cU;Nc&rV9y;qu#bn1dYN>|*hZ&P;)!~NTA0nb!hppFgw%jL{`ZjK$ zc$&c(d}ZW+eDSJ`8!DY&|0A&@?Y(W^rVUwIHIuAtL;-r%ZNCYB{IsVmaw@hBvtL!n zk$Yl`C1kuexN+l^jNLr)BwS|a3uk#yjxv>$r$_-+H~E+Qvy-;$UOKNj`XdZ1`d%A3 z=^Hw%s@w}|oiqEZbj;+u7ceF07g3UWgBXdvi47P%t2`DUj?muQT-qs#gWcdlR?Y#k z!OzeBK$g|MYWQ*QGg$f@E$`50$z$mH-}WJ9{Nu*YDYwqkI^<^@HyugRDJ!K``IS+9 zcjJZx4^X)9N{!OMLtT8;jB`((2s+P2m=;rhq`7k6+YSaD5;=`g(#g5-K9_I_pXp~u zVI8dcmIfvhQ1D763L@=T0ey*mrnMQOvYa&Ew#6Zarg4a?MCDf3t8jmZ*mJE^b=k6< zlpMy@*ey%X(R#CoYYv&}er^VQ=PC%w=`N~tUsY*n+2aD~>DOpr!Ar!&UEAg)gB&UBBpu)RfP8sy2_q$q)yi#uJY$7-V%4;lYaq-k-m4c8@V|;F5%=3ma za|AL<8RB)vs7hDDf6F&#xJ>Mg;Y>D>e<|n#ilGZ^LjHFj;{xOu4|v=7T_V4xA-1V$ zK|4SjP{SlZ@mEL3D>;fEhIW$M0xvP9UEE;!?g9IPfvyfhR9tvw-}Qr()_79#Y94a@ zAply5NmPcg2;6+Fdpc|IN++sib_c(a)GH@BL5UXo<`!doIV_#+kaX2y{7o~-_6Usq zIyScX_a4c%_;kD62e%8u*C`sZHxZ1kLpZdK_SI`1m&66w*9NgrvLsyJxJ90GDD*fz z98XVu9N&rf4c7YAH%2y%@a&4_q5C8_1mVE>`jEEv;yTTX>)u-+Z+pT1R1~7TB9*?m zoj+lpzW{ZF|MKEIvoTK|YXePG1+E@7(tt>HSy)X2(l1hw)BIOz5Vp zA&3Ay1}?Yt&NqfKY7=1F<>+;#J+SoiDkuJ zdoHNwQgoXQV=rjT`bn$W+6!ArfeN=(t}4%EIOSyspeDZyPgeknpouP8Z!-w60sW&j z-j&(RT%)|@v2$of@RW1Pv%2dss(%Uw^41%9$yJw%X_H~e4Ac}4C2^?e|d%3 z;gEH|SoEbv5Eo#lO=}oOhYydvPd2*x?XIBQH9n`b-Ei%q%Wu9i-zws!LJKl?B6!(% zqaesgrIskF=gqL{BDmEz{F>U6Lt{}fE8|9HcR)#?^<;i?Uy1A*`AJinH=8TXD-r)8 z(QGIExBC0JQ-0~kZ3SyQcL0yhgmryDcZE&OOU>!J|BNvngar%QX4Qvl<}`8Jfr2n) zgTPBehJjR@HjaBwFZ+*hKzAh4AM9HN;p~`Y(y`X*rMnl%*Xg0%7Dm+LAF!j2r9dsO zd%yOL4HA>(us~*w^)Xh@VO5K0S}t!Mr*XeK`F~iMz1nSmL4Mo--U}Aj3_3p<^C?j#&b&-`s*@!-fvArgq7xM`;Cwt*t)v)I5Q^BepyA6_kU0!o@Jq4EOf@EU=R7rrOaJe~@3{v-0zYE$wYP%d zJS5xlEqs(MEjL&WMVt#_DeAqDe-Z&3{zk_5ROt8AB-0L;rT&{x{*s?JE#4EDUfDgQ2ev>$E7?5f=2o2b+YsK5lOi{1>?=>>2zp% z9~bGyd1QU*$6r{!^266H%I73F>`_~vg>Sn?w-uQQGI|GeEdorohgVV+4+Nqv1e9y^ zoJ(PomVyrts_;Y4BVRJ3+%Q`KVD*hu!yb?@#2L@G3yfMX{ngY6OyhEJ_|S8U0J#B39VTke3u*Y(8cRr^cU^F%kOl}xST5r z_+Daz7|JWgfmQV$zr{>F_j#+Y_2o7>_4A+is}J81a=l^w@$ zRl_msmY-{(;ypxW$hkkr=)U#~3rr4j*P+*Jc~n4tDQgQi+}mG6&eq__tZUhO1(%UG zHrC0_q5gT>n>$_y;E7hhnIL#8-Mz1(#+&%}-(CC7H>S_8P{*{R>z=MoJwx`Mhq_a} zyn<+-o_eiX+yeyQ<$Y)-LsN~m=f^JB(sYHGAme!eUqDs@=x}ymx>1#<9^bf1cty4L z>}gdS-8Klb6}?MFX>&JkZs-E(uh`M=KDLQd)^mD;RFeVL1Xb7gFXhFbjjTtGZdatb z2n(Nmwh?_FcC-K}5R>Xidgc?%wSu3(m}?!qw%LV^bl8y7LG{d@2VlR8r`y_wfDF9V znK5QFrw>n*%un^dTS0?|E7rdJ_t*Y6&!pw2yH%~tQC;k}$K96|sfY$(J54`4-)Au@ zSgI0lEl4MP;E;XqYHTroRza0Mjynh)bR?>h9 z6NCn<)tz#Y?k%Oj_UN4Ohs?=+tTPrM)A|HdZLVJ7(v%C3z@D-iIxg*WvG{h0U-X*!c0lG>lgCEhVOMUULs5|MJ4HDV<2P$RSLHFMdg_empSLJ2AN~Ty z9!`tNzlWCz``H@FgnP)lyrJMCeYCA$dqix)HNOFqNoqEr4!N-101R3K5ZEinT%x^N zN#I~hJc%|WerW-p+`dZe5a0g9OGsBIuf~#QgLLVGMCKxrXSxl7`4a_}ydOViF#q67 zM8l+G&87qn8zj5>*aFNlIX!E(PEHf&aKj+YQlxZ}2*#nRwt30G@r~2AV4KJ=d4OTg;{(BlI%o3iLS_ z6_!j!j59sdjMb7;YufZ)$9b90yXFXN{-#lk8;wdAl*g({p7rx4eHQ_W*5^{b?4yj06BxPrbUf*RktxDjss-_McQw&I0Q-9&TAFbIQlP)x`w!u7FaJXDI$NE_w>*OD%o&lJ9HfBe{`AO2Bbl*Y zC-;Z=2@UFL%-2v6mt$}WyZpgbi1*x+duSOun#0lYY;lh4J-XMr`rr4%ofY{dESk)>mGC1WaaO+LR;NP367kyibws^4Nxb3;%H}E#$^P zSZOctFHqjuMu0ySa}(2lpV<@Q+14q*JekW6J&n&$go#*oTSBJDMLp=k zI*#hnnmtnQEi5Am?cVFU?+_~9>rsbzHH@9 zZws2{UeC5ZQJZ+Xqxj#qty&N$+BD1AZ(b#hv~3$5Q(dR3$Bq*IIrhy&Zx@vAyUEDS z{;sqXA^kR`u5(~XBb5a{d)-p$c2aJDlqs*MLFs6gy>apIpPnnXqqEEDB|b&g7q0u+ z)6ZoDYz#96nN*2qanfruvY_=JavHyax&t~e%B?{KBj}f_%!rGhCCE1iZczFfCqtWo zO!=2u(r*hGBJE@jr`!tTl+vuz4bf%1VnS7}X+K{$d2av}0cHAl_|RI~Ba8EOK8Zbp zNIHgw04r&l31L6rq+|6qewq)eZ6XE_Q^QdCq&|XbVoj?HxZg0vAut8hR*gbafo!#e>R9q8XNp4@}3luWMVql*HoNQH$c9Ss}lLqGud^b#Cp=k z@PVc=y!|#)-x}@i|0r(B<+A!l>iU(&MdQyU&w=xE7G(x&`<*aojew z+F>}n>(q2}LNF8%FTgn5$KD1hC<1EoA9TG5<=6kK=7oO{J_HO|VIG#9fB1U`w$#e> z8KL`tCO}Tpb7}H<40^BN67O72_V_7*1vIF7vEVB@Xt@wybBLOoVW2(z6x;Nt=3~R%H)+x4vV*(|o6JOu|X8J@@a)LXaZS z3(!Q$>*I8=-46`R-c6efw!6)x=L$RwEH{e|uSM7E%Dt>|_0&uz@~!OwIaGKoAhT^l z{{TUNOaprBF)m|U_Xjo4s`di(@8o+w9=@lQQ@`uu3sQeQy7sF+s?mPg1JpfP#EPwF z$4~4nCp)F#XdDOE!J7=yLq7><54KJ9Z>XSpb~gz14DxI7QDa;gKIrG;WJ6pvuX%`l z`BjI|7J^Ht$;qWmmUqv28}|IFa17IuPKXaHV$}Gg6||H~>wiR#Eebfp9hp)f$h-@| z?RLX({MkO?o`?Wu{AS+_^J>rA5K!{fHqGGOcHDK|^!kfBiELToSH~T5w_Z$?N=O%O z<}b_zNv_4pPWC2C;lK9Pv?ZJmd(bqq;e{jcu{xiPu2=qYLL;N ztRTy;NWQ=8ckcmsWx^%m$i!9<_n3p@J#vq@vw)RZ2o-mXG)Id0rTVVtRNlhlR?SuPX*cjy(*Dv%(FK7elh zUO02ftmY0jroVo;+bhhRX5q&22hsnG&Da;HdAb?`!}Trdm0KT=w*Gp+`8MsKZV@=f za07chJ@{w_$daTIB2W|_*WBdnGQBp(XEPML$9_#la`{$H`#2!xihd#|#`qjU1%%^J zU4o0R37?tB=RkgkZ3}nF){M_HK)HUEvRYWa%>=iP78`Z`X0ucmW6ZYoLnKa$?tO68 zHY>!}GI$rWc)mxV*j90g);xD6RvQf7c4y|LPx&-V7z5!@w~5!Yg=sasGPpu!CC+j|ATZYmg;=(`3;c=ov_m=gC7y{=NKcqALb~TLEI(WUag<@D(hso;&C}-9s z%{#{vC;{3P@rg+iFeghX>vTn_JDb)>!9bAmsV-fL<+HRYAn7$szrR{6gjl zs@gp-0E7k!tG%WsjFrr&t1CXag_-OsXN#4Lme~?*D0p%~XNdW|anEIs7LejF-bApz z0mihx;nR4Ie=7L^AYfIMAxFQ0yGk`=II>eYD9>dS)KvxzuS;DN^DF2C^bPU3VdSL> zjqbfGF1$Mi-B-UM~+eJ$2gv^-uA-}8HW^e|?ZZ`Y@w3~Q`2akPHy zQ;Ke;Mv=K}uI5-jtbrt!vPvaFNXd8F?_?ZX}q=e=m6RhvdQ{`E@xGTKi@Ut;CJo9mRjn)sM4zga!4PX~5;b(|O1c2hwgETl`QBRgNqf#uKI`sxCdEVlk5;0yF3VUtzm zm+45^LD_xh-DCOA;NK~F@~{X{Q_a2q;-pybTUy_&Cyn74W}bMs%6q=oV28EjJdvn9 zX`%SkZG3Sv(CHri1ur+EeTjw3V@NC1R5)Tdc6@olu24Y=mpq)UH$(G6OF&+qubtvA zbeh;&Ngozfrs%N=v;70rSpiuS{Fdo;pO(b{eM(AZU&9NUjkDjmH{WU?Lv;AwaRD2^ zFh#O574`p;`g$2QLOR<(EraA=BtGfP@0{tZ?9H}wTFC>D5I5gZeOi<|)WZ?`v0j$* zOrOtf(Hx30`>LL;srR`a7>!J-S7sod&yPM-Hn9*aG*Q@Tx@FV)tR;DOsMDr2=%Dbt zc+DkDYXPADWFo-oMr5JI5Gl(IDeb$du|Qj z5I}$aRvh#xg1EenfM&^QxQ^_r8k9(I-LfY#^%}HnY-s_pRzDsq~}6^d%~TXkH*9&lmWZq!K!N*6cpgdgnGDd&SKVq}_I(clT^a5=Dc~j_ zN@|;&q9|g{ne+lyh7;6xztXB^PVg&+47%L3#B3U8fp7Kx$y(gYmfE&GZQH*g_cu-- z`9sFZ@qG9!{7u9`1E*G!R%wI3iuhJVK?h2rM#3Of#}>CB9tTuqCF;0L)4>obTBXEd^}?+ z*^pO`=-Z|K0Ytf>y%$hbB4^D9j_)!qj;}bQ1oqC`pGa%n4|5eQ`WL$v25YS)#NwkZ z6RIr{k5@`@C%FH}R3Z#rUgJn+Q+W^cT1dnfJK$3uf3c<(5pR8hQ+~dN}JJzR15Xrm)ivZ1~dKdhHRMiAHRlhh{-A^snN;5nad5LY1Q~xnqGIPvymRuoOA0Y`$ zw`-Tm$v!p`O4q#rs$J#7;;1rC`#H2x){!t9G>*~H)r{j4{ z)wVfn34``)S5z_=rIfsMM$^jcZ9HxS_y%ur1_-aup9&FgivWlnF{WacjO1#`z9e^3 znLCV9M64k{rKs~bz@fe|P}fNLKS2p?HpfYnHzKeqa>Dm5r0@3W#+$6Yp=!R%RsP79 zg4z%CwvLgYJWlITSjH8Fifs}a@|qG6WgI|cW$2FL%@1WtdZh{3>aAoZ_Y7U6>fnJtb?mLX?bz3{N z&n@-*+_VV@Z2x|CBm@vf(8BWij7^&bO`W{QFH@Ox9C_aP{k@XHGp61c@siu43^neH z6tS?ibnF2z{lA|bwl7x)E`9qAE1c%*2iwJO>?wxS+MgxJ5h3NFqq>n8rL@7`Jh92s zq)NRBZb6~-86Y|MWo+6%2v^D}=B2z$*%Adl88G9~9sdf(Bgxa0Ha7uh$+wV;|6BjqiEyg# z!uR^7>{)PYN2fLvcK7p&_AI4Ges*KlWE}M*Tin~@BpkU!U&)WqrP_|1EW1m*(q^MS z{>U2fZXL!nv1PY3xgkF)8Zz+Oo)`H`#c%6|FDZLcrdK*5yyVZ5dgve~%m*VyV3XEK zQaD%ke(`zanVZT$4@Nyq;-~MK!3d!-m7@~b%-8(xA+f$fe(Frn4=gGr6BLPT`DHW+9#(|{OCaC-$M+q!e-4@Hn;^G zDj4w`{$>@*SjvOrUWQE)ouNNNbv$GB1;MQB&<>r#wi~N8eTv`{_`tZhF3~=5F=LG2b~3nbFAj=RPmi z<_QU>EdFGj_HJQ?tisuo9)&NDv$2Ypz)x6@0LE(EEmh)8^q}=>oP)}-D=_tig*h_4 zGa}E|hSH{IO!wUDn`df1(-o4|R`n7OxUilsLu@+LCU!MR|A0+6K5)z_OQ`vRuJr>0 zx^c;oQu><~TC1$A2sthlHoqPDUO=bUZ06Bvh+5QvrcZnEc-)@mYL;T=2S|lLsZ8~m zg2H!F(S?#>ItTY;??{*oqL#ahufSHJCj-zej)y_A+w z$TDGcRMNquX3tPw!6v_E=Xh-cws=RMh-iuWnnscw%eF@yf?_1b^~G3jlS>x`_>gPQaU1^*Hf4YmMnRx4&Go*1d25N zTP#m~H^z!Xit+qsY!3bh&Got9y7{)^_a14R8C_*{hgtgXd-&}CweNZ;>Qhc=K0ahd zoj%sD_eKUuANO*ez;LZl+Rlse<|)lB%>Vwa!c%?9clX!c6+FdF%HzoZR`cSL&)fQ( zB4`27lF)i`m1|9?d55}S?B+xM*+q!nF0>;&OWfn8;0@@XBpVC6_PKsz=g1Mf#$Niq zOXXXM+LaH_g23r z1J6WPO!2vKh7z&Ok)PAQbs1l+uksfPp4K|j&*@jm;oZHiF;lOyoN>3lG`cNv=s{5b zl_x6~O4z9uD{wBX!po(;mMkMC-=!$2jki02yd}Zp-(2`Y*(GA3K2pN(p1sq6U78c2 zkU~4Gr_0iG6vp%Ty-_0*D_j^2lL6A!kKNyJD8ZvO^X~`b*hK=hJxaG`mnt^l=r5C@ z%teH9=c(pr9C*U~wR|9N7^@H-BR`SI;Y^k z6b_nIvSLYjSjx|xT&gnb^HZU*&C8(}I0RM6t}v;G?M_FJb=~AF?Y$bO(_8JkL>?M<)8-RxCU5E zwo~zV1othHQ0$7D0Xgk!Azyz8d)~r3{NA?WTi;OVPf~r03@J!d@&}{7k8|AKmb;&y zWdQHWFO8BBw_r)TU3^NvBMbSG`N+hJoRAc~-#y>)4BhHF!lP2jqsV%oWwpfw7a9HW zM|sGKsUrD7kL%$Z$p`>MeY59t^oGh|xn!mJL9f`vBn?269%;=QW!JqzSl1B5M)D)T zl9=TryB-T@AeVIjf6|BE)ms)!aZU{tz+@Mjo&Rk1Yhjarm_kgwN*!r!_|iO6s&zMH z<4j@Jria2&^LP4Xa8T8s2aM1!EO)k>m?;*`QTbRE1BZaqhax{D$p94ch@sLcQ>c#T zC6n(^I6x?$xE;jpYZF4N_5%lir*;nU;w@Rzi2(3e%hRpK_k@TUZXTew)W38v8G6AM zB}??`v8gE%GRxk=oS}}cth)lDx6k<@bAlVI5A-J443|b72bsNZCV>cfDt={+{Ylu$ z5&FCJ!xBPudjGxDpO-Nn69#OPN^Q@7VbjN})3hDl{IL_-r4+RQd*PUQHdBq^fAVYy zrv7Z({W;r^&Sl#e7)q<=Mh>LY?sH9g)n{X7E<9J=u4(7sldcZ|kLHR2K5sO2(b?HQ z&Dvmx!Pc(V_78FB_OSNNR`I?*n#OM?fcd68mLyj@bBh~q z7Mi$svp)3-I8?SPKx02+{XIt!KnI(Dft*OqO?!s9!%mAUo6#+qrwpq>fs+()))n&X z0(wt9F_z6og4d;3n?VNFN@)(dHk#3mZZ86^Tbe07n9}e=&liiD90~Qx;cI`(UV#1^ zNO&>xK^|JlE>YGDT30JWGTH8S z?;*aX2xf-UQpIPAgCoGZq@`i-M}@lDD&@=+rHR0YON75FM!&cYxDwRr&z23(SBBC< zr===|2BNo5O9_cNYEI5lgfynuZeDlj0qh~+H{@+P>_1G)tJ9smS?zMD-KcSRb6ALg zNVvoO!aBgZ*$Z&!kZ}jtt-3>#9%0)u`~a~b=(;{N)CV1o#veL45Uhb~cp3VL75cKR z&T2O3o}5)WCZ4_bCRT6n=(d%k??J`IIVRi4OK%R1$F9YH=v5YCg5Ho3C3tH1@=b?} zq)0h->DW|F(dnD1m%2=z#kB_P@)dc=FbRUP`wRDvbEqTA)g4}0qNx>A9w&?Q4>*}ER>1xi9$FN~YLmzXQR!T^pV zG6*P)ni>BCTgMURCbe_le!g@xT!{3rd|{2qOu=avTxdtt+O&pqC45|Kr-{u7#$>19 zruffTsm0MR8Q<7irCeLQnT`e>XvG{%=Jd{P_}m;@0%D(izaM zuxbh{d)=l^fX`P}$a>rs_2SflEA(6Jb>&8NCAU7y zTf0BJt8C)~-C``!4W@ivQvlPZ@yJ$oGUJHH2%q+Dtoo;6KK2I@Ox)gPs-X^;#Z%6Bm zf6Gz4^%)&{xlkrF7M*0b0$Bu4Z1pyL2W=KWwar!um6uSvT5{dxPcF{fh9_M75ES{m zU}dtvJ!7Zm7|Ub5b@=Po47q{EI5_&AZRzVJ8tqrw5frlM6AUa$9c#L2KLkF<`;ErU(-$pN@Q40}!IDbe5@(&Y-;n>Ma>L z`tDdmQKTEO1@yLeZ)%caF!S)+QlO3=aO07-ivn)7#t_p1~TsV-5KiNU7f3} zraW%}jRG03RHZ-oTa6c1y*a-5nyz~dA56WcKOT|vav=VA7Q)>K7NeYe6F~gx15mp# zv$(xvu>u#+p|;8?^zD9eSc`~$Tt!ZuX3q2%Al&Btbnpn87gg9Rx_L)u;r5r;aM%4$ zkU03iWp&xUPEU`X*9ytg#~V`|v2U;U6?kVw*IQYIFqoGhP^H}N{eE)m748us>PZUc zk{e`(2zD5UsWZTRuT&`3I?P~o{|Ly89E*q31{boNsm7q5V7V9IK4~HA08a9*BdFG~(S?4Z74(o2)d{ax84_P>-{I-EHn~b7m;E4}$lp*A8b$-p zvQLjs-sH}q2Yddzf|Q0-SVf0?ku@N+j><9T=59pE4iCAH^nx_|NR+tQb8e?s+YbKJ z4^<&r0n6VlmAp@>Em0 z+&<3AWJ%_}=a8zH-(yAr4urct0D2?B02h1 zl~#QT(oR)Q8~!YwZ8Dj{aM)rUt<*6A@A+(rbO9=#;0Ie2$uyt5jFT~QEMsyt<-4HF zMPTS7`fQ3in74Q8&XPG1^uT9EdZVb)eth>R67nHN98izfC$xo2?SyhKF+~PM`0F|E zuS14k-+WdLjLgd4v&s3>>pV9NY+zvmra`h7pGI0yNBT=zA;S-#eIH}d-R^K*9zRNl zL2>FzN-%<^)P#yo5JKP#u?F`y7tA?-mik#uH{Urn_0)sD^8=ia`Xrety|C9Zn> z0xrqRpyNC9|M@ZX^x9uN)BpL!+$^&;pd*?pzPK0U_7bjcZYudi2Tplikrk!e^=sp( z>Keh`nsJBt6(5XXXFeakX~wh(LNUu%yhwPQgqT9AbyAL=TbfpKRUAkt{1#RS8I@e> z>2kwx6C=P0R`qFM@CKbV1y}hzb}>oe#Q# z{*oDe*gOdkBu8l{I0W1mRNK}4NIxJsw3p^sPSTTQCj>$(Jv3 z31Kd}K`yfNN|&Cep5H>jiX6R`NTRt?k^|4UldIU07Yi;2j2E7Kf|!|h)fN7%84U)< zIT(H6+-auaKW?+nqWm^UUGnSI z0Iw75hC3x`fWFr>1`#-#~n*D07EaNt21OfcMlvMN?+~!a&|Iv$|6e4DiBjg~jXH z7I|7LXKhYMZvZ|MQuut`fqBpzff3Y?1YT{P%vC__9DM_*;i*{@v6Sdq-l72nT91q4 zN!^2G_acbFmo5pSnhG>_ryrG^)_I!XEu9ict58zZ=@LfT3uQzpY zqUR2ELMKDC?KaHH2aTcNJnq9(v=t3#qk9%D3~TELHnl%GerMNhK9$(OzdWK^-aqhW6)@4tp0p2Q%z$6ptCiOPKAJ|g>0MbY2(CyTm z-;nIzW_P$7NK36*b_?Js0|FLcKg(inL`ZCb56TM>n@_yxj+G{u&6d{lIkPdH@A>zB zs>$VxGMH|xxS8ikbbF1k6|ppV+!e(d5(A~$yk=#qJh>A`)?I?iv@@qC_T6ot8X!W>3hMnwqD78uslHxX znGg$CYvDZu_V5R{?$m4xW{iS@*WWS(UR*GqGYUXCQ^)>t-v5Snn7ip&EgZZHvh;h2 ztIMOygG@LLA8+xzo~ad41ViR*7IjAa?y)tklwKSAY&ge(0W@C12Zz0>a)&#>-b*%R zG#uJFO~1?Nc^i8Y+29KXwwp^A$@N_9gD2LS_{a8|30sREA~px=D7o}=Z|fdHzwD>G zq#XdT-Kp8ts$hl;>C>XZW$n<|F!6-?KX*_=i`ln+VPW7^5Z*~ibj^U!raksE+_Sdj zK7cN&JwDYJ$Id=#*&Hgbk}_)2*?hnu9$Y-I2FD+`-=c7>=-@&j3mIlbbKvfsjT8;= zGqp5V)s)vb-z!@l-3JYo;%`j-6dZ0{vT+D8YFg^Gq^IIo3PSuZ2z|EC*|{X;IOUzu z3A;1wWZiMaXuQ2ll(Rk*MaWOXtf9UvN$N=1k2$lfReRv#iB1Q=Ox>iJnD-Z2))wn# zefjFxT2@PNrf3A&Cqr_r>3RL=*Db6@RVGz9WsdlvzIaB_=VQg;?C)^T?d~zAt2-9k zt3d90Tpc$u{NHkO&~2TP8I|LQxK69yZwd>t*{@$fG(28ydPk@jp>E@~=VQ#kJD@>d zU*D1&`#B!LyNRfxjvu~UsfC{o6cBG}y?0C(Si-Q!%y%}m`HeS2Ti0t*OH#BIU?xj5 zZ}%O+YT}b&?xyUq-!}IV-M+5fk47mx5;=`;zReOO3zsk_NBMRQWnPj_2szh|T5n4g z)($@u0xPGv7N~#Mx!ugoAwR@&hvfV*-q89-7-i3tt9*;; zo6SrkdzlWt0u6cx1qpZ-3N683m`|7de7i3`(P(r7kGOvH z+~lj+C9J>+=D58&<>QGC>uz|B`j|K1Ihcq-d9 zem>4fPI%Mg`lq?T-uqeJ${g^<83@{ISosGlGo?2^mlxl*uCL*=VqL-ByB7G5B$~KP4nqekndw;3tSysl{3!q0qJ# zj!z1dk9R6ZkUdx5*FWH|v`&tNmu?Xh?bNDI8CiC~CnVSEgZ#^huiHX|)%=fP#dG$Ldg_?=11GNNazckD8=t z`>qqa@=`PZvxA!@d<3gwa`veNu)t?|dtRRoA@&%hUA{OzW1HBlo=q7T)EYOEuXoG| z#?GZ&p_fLFo7&Z-w>@v7$3=frK9KzhT0OsQ>aLK~0tu-dz5Q@q;wb7I;juncEL49# zE8jDhyS$uPazCL~o((d;mW@us;WmY+S&=g?J#V)`J4dFi`%iGCk}twYEQsjX2k(BF zfR=95MWtjs1M}_F<*tfo?34*!Kd4p(|A74JfN~bP&Q3cz5YsQXJ#YV=B5iA7))&NT z(*KKPfQdkDb>8~QY#uJPRhF8ADd_8&OJUGoc^w-vN7iQah6sI5)wy0fH26_gr61L$ zPm~%l(BAb;bLjSp5eX!GAC3K1xsgy2w_#e*Oz&N4ebQUp9r*=)8&<_<5j_hBUai-# zma%bb57RsSu1MYl!h)s}*Xgsgy&=36oj%|}s*Uzd9boFo8JC8ujmE@yIC`gUh{+Q= zEK)EN<#u|7S%*qKxgvZ;sK+CV#0sI%(mGrEERO{Pvh)=F;Vp8|tc*iG`_=X}!L}v2 za?}TI<7zq_*iGi(n8d{k4iLmb%HS}Qgd?^ndQp*Ccn*68m3 zy!0c}B|B$wp8SY}$~z-7z7k8Mw{vqmY}pd+FSmFH(mXIZNWFKa_bK)rBE3KD6O^Kx?<_WPF14E-S}LcC6f%{F>MR?tw^h#B=O!I;`G?P*Rm1AN6^}h)Tx*vH}QJ^ z4mlx(lOxkCaTT#?AvmvW*hIs1h%11^sykM3x@AW9TaJ>MBp`>@eNGT%vTR5yv&LWM zPfjZLuRCW^D&j)rM;WpxTg~5Dqhj;s`%+l6m)oI6A?%**MsT1odV-7BgDAF{TJ1d7 z$S5o=a1>3pu*Y=ZElfXeWwmnLd2QTPak%t@xWe~mMMY4-X3VnCw4Ubb;5C2>!VX$) zGYc6z4QhTRS2|&lIjxT$Bp+`1_8xD+Utj&ZJ|fH3jfU3y2dS%J7HKWSfAP#yg3kQU z+p}A;N90}{4w&$_;kcu~R{ht5ohQVKU!h;LPD^7H*_YF2uidsg z(eoR8Ktm8yN@)9tb(@*)f}Y6H-VRy*2~cx zM8Gwg$qPBBj^>sZcC*HR6k2hif<<5d_6HN*up(|;U-;!~KP!fOdY&q=@zZaoVH-&I zLzI)uAG3b!j`*xDC%c1r;{|QugT&BRmI=6XlNqDedl$NX&DhS`eDZTc3RWnyBW@Io zj$s=WQ@AX?g*fO0caM`^w#@P@nQ!X}kY;yQ(rfOMRp->})Yp87oV%)d2(QiQ!^%-&+*AETISrrwC4Jvxr#s8t(t~|ZdRcDPh;LEq1AJ4)2d&MdGJw1U1;feV;;38Jvt5>{7gD zeLlZe&^wUl(a(ZW>nlvp`+REdi#q99E<40vlOO(Uv3k=xczXL)lh^$)n<%^IZ(}Hi zC@?OO#5|^2b)%x4;X6pfy$j9psrHK!JgBE;u{Q22Me&AANVC(IYpyPXLAlow|A^@0 zfjSr7j3ix7vkOSg-c4H^mmqt*lk5|MXK6*m)|$^`7MUv7)NKpu$_XUwe|up8e;S~K z$W!yLA%+YQ-xboP+6iYyJZ>*bZ*)&5yq{ zvnh%p4hH7J2J-NPNk5AEb%U$JcJo~DuHDNX-mOdmM4IY33^=v&8Wt-_zdRB$Xfy55 z(EbH)QIDgtTQ1v2LzLu0mQ3?wA+dELKhITFb4c3%c`%qDV_a0a(w%$=(pBiFavZXa z7C9;pbu$%^(TP;J0n5l(2_4zJX8cY2PHRf^uhARm**TsIZ@KRBp>Luw#+IVAh!*eh zFw@%LsECUe&^ggvjz4VSE5yQbAU7f4Fj3r^*_G;IZno5Uq6hrZniJd~#5@&Ef@V1qIxB?&9b@_;1-wk+QJZb4e}>gv1YW^@MP?=usff*JV)m z{7l0kN^Tv|)|=v_+1;ROYp1h_tFD?G2zXpyP&#nTHgurEI+_Wkan1Cu{-9ZQe(EAW z)V8hbdGj{;@-+7K52mO=ahp&W#n5T8!hzA&5njC;l`QFy6t@8WBOGO~cBj@s@a}d+ zFMZ|^b2xl#-=iJFK|7Tw8boX?ltx?-qTT&rU6x;;d2sj0B}4W_jM^4>u2|87gL^V+} zEdgH?^tVz3DKDB7wxbG-3xg5*zJ?tAJb-ju=iej#nt7QM7{PAwr$L-@Q-;HK-79=q zjfnsmfHs&)0p>q{q{w_ae+%C|Lf%b_~yKPrLw!$@6tLSuoa!Bj-%3HZ7 z=cn1+<2C#C6}2EMG5EH8!%F0g0h2%_CL?om;pxTc2fB%669e)2>SJB*`TC`da+ToU zsgn`y>MjK@t%An4i2D^MN9cB)%HJP6cY%C@FBy#o2su!Dc0dl3Ft4!@mjbM5qLkAN z50cw{rq*X!sB)@A_@Fz?DfO%0b!ZhcS?aWfdtqodf-AG=Od4l@lt4B2XG{F5%jN`1 z(;QQ=>b}|gU1FZs*y*mFuQt2G*>&)%1veB>lO^H$lG)kt()lo E2hbROT>t<8 literal 0 HcmV?d00001 diff --git a/test/fixtures/sprites/convert_sprite.js b/test/fixtures/sprites/convert_sprite.js new file mode 100644 index 000000000..ba4ff5c29 --- /dev/null +++ b/test/fixtures/sprites/convert_sprite.js @@ -0,0 +1,19 @@ +// Converts a PNG image to a custom "image format" that has a uint32_t width/height prefix and then +// raw RGBA data. We can't use the built-in PNG reading routines because they are reading +// premultiplied images by default. + +var fs = require('fs'); +var zlib = require('zlib'); +var PNG = require('png-js'); +var png = PNG.load('styles/sprites/bright.png'); +png.decodePixels(function(data) { + var result = new Buffer(8 + data.length); + result.writeUInt32BE(png.width, 0); + result.writeUInt32BE(png.height, 4); + data.copy(result, 8); + + zlib.deflate(result, function(err, data) { + if (err) throw err; + fs.writeFileSync('test/fixtures/sprites/bright.bin', data); + }); +}); diff --git a/test/miscellaneous/bilinear.cpp b/test/miscellaneous/bilinear.cpp new file mode 100644 index 000000000..b7730303a --- /dev/null +++ b/test/miscellaneous/bilinear.cpp @@ -0,0 +1,53 @@ +#include "../fixtures/util.hpp" +#include +#include +#include +#include +#include + +#include +#include + +using namespace mbgl; + +TEST(Bilinear, Scaling) { + // We're reading from a custom "image format" that has a uint32_t width/height prefix and then + // raw RGBA data. We can't use the built-in PNG reading routines because they are reading + // premultiplied images by default. + const std::string sprite = util::decompress(util::read_file("test/fixtures/sprites/bright.bin")); + const uint8_t *src = reinterpret_cast(sprite.data()); + ASSERT_GT(sprite.length(), 8u); + const uint32_t width = src[0] << 24 | src[1] << 16 | src[2] << 8 | src[3]; + const uint32_t height = src[4] << 24 | src[5] << 16 | src[6] << 8 | src[7]; + ASSERT_EQ(sprite.length(), 2 * sizeof(uint32_t) + width * height * sizeof(uint32_t)); + + const uint32_t *srcData = reinterpret_cast(src + 8); + const vec2 srcSize { width, height }; + const vec2 dstSize { 128, 128 }; + auto dst = util::make_unique(dstSize.x * dstSize.y); + uint32_t *dstData = dst.get(); + std::fill(dstData, dstData + dstSize.x * dstSize.y, 0xFFFF00FF); + + util::bilinearScale(srcData, srcSize, { 0, 0, 24, 24 }, dstData, dstSize, { 8, 8, 24, 24 }); + util::bilinearScale(srcData, srcSize, { 26, 0, 24, 24 }, dstData, dstSize, { 0, 40, 48, 48 }); + util::bilinearScale(srcData, srcSize, { 26, 26, 24, 24 }, dstData, dstSize, { 52, 40, 36, 36 }); + util::bilinearScale(srcData, srcSize, { 26, 26, 24, 24 }, dstData, dstSize, { 52, 40, 36, 36 }); + util::bilinearScale(srcData, srcSize, { 104, 0, 24, 24 }, dstData, dstSize, { 96, 0, 48, 48 }); + util::bilinearScale(srcData, srcSize, { 52, 260, 24, 24 }, dstData, dstSize, { 108, 108, 38, 38 }); + util::bilinearScale(srcData, srcSize, { 380, 0, 24, 24 }, dstData, dstSize, { 36, 0, 24, 24 }); + util::bilinearScale(srcData, srcSize, { 396, 396, 24, 24 }, dstData, dstSize, { 0, 0, 50, 50 }); + util::bilinearScale(srcData, srcSize, { 380, 182, 12, 12 }, dstData, dstSize, { 52, 80, 24, 24 }); + + // From the bottom + util::bilinearScale(srcData, srcSize, { 252, 380, 12, 12 }, dstData, dstSize, { 0, 90, 12, 12 }); + util::bilinearScale(srcData, srcSize, { 252, 380, 12, 12 }, dstData, dstSize, { 18, 90, 24, 24 }); + + const std::string data { reinterpret_cast(dstData), dstSize.x * dstSize.y * sizeof(uint32_t) }; + util::write_file("test/fixtures/sprites/atlas_actual.png", util::compress_png(dstSize.x, dstSize.y, dstData)); + util::write_file("test/fixtures/sprites/atlas_actual.bin", util::compress(data)); + + const std::string reference = util::decompress(util::read_file("test/fixtures/sprites/atlas_reference.bin")); + + EXPECT_EQ(reference.size(), data.size()); + EXPECT_TRUE(0 == std::memcmp(data.data(), reference.data(), data.size())); +} diff --git a/test/test.gyp b/test/test.gyp index 719207a02..c333a4006 100644 --- a/test/test.gyp +++ b/test/test.gyp @@ -38,6 +38,7 @@ 'headless/headless.cpp', 'miscellaneous/clip_ids.cpp', + 'miscellaneous/bilinear.cpp', 'miscellaneous/comparisons.cpp', 'miscellaneous/enums.cpp', 'miscellaneous/functions.cpp',