Merge branch 'master' of github.com:mapnik/mapnik into release/image_data_any
Conflicts: tests/python_tests/pgraster_test.py
20
.travis.yml
|
@ -5,14 +5,28 @@ sudo: false
|
|||
addons:
|
||||
postgresql: "9.3"
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: JOBS=6
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env: JOBS=6
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: JOBS=2
|
||||
|
||||
install:
|
||||
- psql -U postgres -c 'create database template_postgis;' -U postgres
|
||||
- psql -U postgres -c 'create extension postgis;' -d template_postgis -U postgres
|
||||
- if [[ $(uname -s) == 'Linux' ]]; then psql -U postgres -c 'create database template_postgis;' -U postgres; psql -U postgres -c 'create extension postgis;' -d template_postgis -U postgres; fi;
|
||||
- if [[ $(uname -s) == 'Darwin' ]]; then brew install bash; export PATH="$(brew --prefix)/bin":${PATH}; fi;
|
||||
- echo `which bash`
|
||||
|
||||
script:
|
||||
- source bootstrap.sh
|
||||
- ./configure
|
||||
- JOBS=6 make
|
||||
- cat config.log
|
||||
- make
|
||||
- git clone --depth=1 https://github.com/mapbox/mapnik-test-data tests/data/mapnik-test-data
|
||||
- make test
|
||||
#- source localize.sh && make grind
|
||||
|
|
67
bootstrap.sh
|
@ -2,9 +2,6 @@
|
|||
|
||||
#set -eu
|
||||
|
||||
# NOTE: requires at least bash >= 4.0
|
||||
# brew install bash
|
||||
|
||||
: '
|
||||
|
||||
todo
|
||||
|
@ -19,28 +16,6 @@ todo
|
|||
- gdal shared lib?
|
||||
'
|
||||
|
||||
declare -A DEPS
|
||||
DEPS["freetype"]="2.5.4"
|
||||
DEPS["harfbuzz"]="2cd5323"
|
||||
DEPS["jpeg_turbo"]="1.4.0"
|
||||
DEPS["libxml2"]="2.9.2"
|
||||
DEPS["libpng"]="1.6.13"
|
||||
DEPS["webp"]="0.4.2"
|
||||
DEPS["icu"]="54.1"
|
||||
DEPS["proj"]="4.8.0"
|
||||
DEPS["libtiff"]="4.0.4beta"
|
||||
DEPS["boost"]="1.57.0"
|
||||
DEPS["boost_libsystem"]="1.57.0"
|
||||
DEPS["boost_libthread"]="1.57.0"
|
||||
DEPS["boost_libfilesystem"]="1.57.0"
|
||||
DEPS["boost_libprogram_options"]="1.57.0"
|
||||
DEPS["boost_libregex"]="1.57.0"
|
||||
DEPS["boost_libpython"]="1.57.0"
|
||||
DEPS["libpq"]="9.4.0"
|
||||
DEPS["sqlite"]="3.8.6"
|
||||
DEPS["gdal"]="1.11.1"
|
||||
DEPS["expat"]="2.1.0"
|
||||
|
||||
CPP11_TOOLCHAIN="$(pwd)/toolchain"
|
||||
|
||||
function dpack() {
|
||||
|
@ -86,14 +61,38 @@ function setup_mason() {
|
|||
fi
|
||||
}
|
||||
|
||||
function ip() {
|
||||
if [[ ! -d ./mason_packages/${3}/${1}/ ]]; then
|
||||
echo ./mason_packages/${3}/${1}/
|
||||
mason install $1 $2
|
||||
mason link $1 $2
|
||||
fi
|
||||
}
|
||||
|
||||
function install_mason_deps() {
|
||||
MASON_PLATFORM_ID=$(mason env MASON_PLATFORM_ID)
|
||||
for DEP in "${!DEPS[@]}"; do
|
||||
if [[ ! -d ./mason_packages/${MASON_PLATFORM_ID}/${DEP} ]]; then
|
||||
mason install ${DEP} ${DEPS[$DEP]}
|
||||
mason link ${DEP} ${DEPS[$DEP]}
|
||||
fi
|
||||
done
|
||||
ip freetype 2.5.4 $MASON_PLATFORM_ID
|
||||
ip harfbuzz 2cd5323 $MASON_PLATFORM_ID
|
||||
ip jpeg_turbo 1.4.0 $MASON_PLATFORM_ID
|
||||
ip libxml2 2.9.2 $MASON_PLATFORM_ID
|
||||
ip libpng 1.6.13 $MASON_PLATFORM_ID
|
||||
ip webp 0.4.2 $MASON_PLATFORM_ID
|
||||
ip icu 54.1 $MASON_PLATFORM_ID
|
||||
ip proj 4.8.0 $MASON_PLATFORM_ID
|
||||
ip libtiff 4.0.4beta $MASON_PLATFORM_ID
|
||||
ip boost 1.57.0 $MASON_PLATFORM_ID
|
||||
ip boost_libsystem 1.57.0 $MASON_PLATFORM_ID
|
||||
ip boost_libthread 1.57.0 $MASON_PLATFORM_ID
|
||||
ip boost_libfilesystem 1.57.0 $MASON_PLATFORM_ID
|
||||
ip boost_libprogram_options 1.57.0 $MASON_PLATFORM_ID
|
||||
ip boost_libregex 1.57.0 $MASON_PLATFORM_ID
|
||||
ip boost_libpython 1.57.0 $MASON_PLATFORM_ID
|
||||
ip libpq 9.4.0 $MASON_PLATFORM_ID
|
||||
ip sqlite 3.8.6 $MASON_PLATFORM_ID
|
||||
ip gdal 1.11.1 $MASON_PLATFORM_ID
|
||||
ip expat 2.1.0 $MASON_PLATFORM_ID
|
||||
ip pixman 0.32.6 $MASON_PLATFORM_ID
|
||||
ip cairo 1.12.18 $MASON_PLATFORM_ID
|
||||
}
|
||||
|
||||
function setup_nose() {
|
||||
|
@ -112,19 +111,17 @@ function make_config() {
|
|||
export LIBRARY_PATH="${MASON_LINKED_REL}/lib"
|
||||
export PATH="${MASON_LINKED_REL}/bin":${PATH}
|
||||
|
||||
local CUSTOM_CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1"
|
||||
local MASON_LIBS="${MASON_LINKED_REL}/lib"
|
||||
local MASON_INCLUDES="${MASON_LINKED_REL}/include"
|
||||
echo "
|
||||
CXX = '$CXX'
|
||||
CC = '$CC'
|
||||
CUSTOM_CXXFLAGS = '-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1'
|
||||
CUSTOM_LDFLAGS = '-L${MASON_LINKED_REL}/lib'
|
||||
RUNTIME_LINK = 'static'
|
||||
INPUT_PLUGINS = 'csv,gdal,geojson,occi,ogr,osm,pgraster,postgis,python,raster,rasterlite,shape,sqlite,topojson'
|
||||
INPUT_PLUGINS = 'all'
|
||||
PREFIX = '/opt/mapnik-3.x'
|
||||
PATH = '${MASON_LINKED_REL}/bin'
|
||||
PATH_REMOVE = '/usr:/usr/local'
|
||||
PATH_REPLACE = '/Users/travis/build/mapbox/mason/mason_packages:./mason_packages'
|
||||
MAPNIK_NAME = 'mapnik_3-0-0'
|
||||
BOOST_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||
BOOST_LIBS = '${MASON_LINKED_REL}/lib'
|
||||
|
|
|
@ -219,6 +219,8 @@ bool proj_transform::backward (box2d<double> & box) const
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Returns points in clockwise order. This allows us to do anti-meridian checks.
|
||||
*/
|
||||
void envelope_points(std::vector< coord<double,2> > & coords, box2d<double>& env, int points)
|
||||
{
|
||||
double width = env.width();
|
||||
|
@ -236,15 +238,32 @@ void envelope_points(std::vector< coord<double,2> > & coords, box2d<double>& env
|
|||
double xstep = width / steps;
|
||||
double ystep = height / steps;
|
||||
|
||||
for (int i=0; i<=steps; i++) {
|
||||
coords.push_back(coord<double,2>(env.minx() + i * xstep, env.miny()));
|
||||
coords.push_back(coord<double,2>(env.minx() + i * xstep, env.maxy()));
|
||||
coords.resize(points);
|
||||
for (int i=0; i<steps; i++) {
|
||||
// top: left>right
|
||||
coords[i] = coord<double, 2>(env.minx() + i * xstep, env.maxy());
|
||||
// right: top>bottom
|
||||
coords[i + steps] = coord<double, 2>(env.maxx(), env.maxy() - i * ystep);
|
||||
// bottom: right>left
|
||||
coords[i + steps * 2] = coord<double, 2>(env.maxx() - i * xstep, env.miny());
|
||||
// left: bottom>top
|
||||
coords[i + steps * 3] = coord<double, 2>(env.minx(), env.miny() + i * ystep);
|
||||
}
|
||||
}
|
||||
|
||||
/* determine if an ordered sequence of coordinates is in clockwise order */
|
||||
bool is_clockwise(const std::vector< coord<double,2> > & coords)
|
||||
{
|
||||
int n = coords.size();
|
||||
coord<double,2> c1, c2;
|
||||
double a = 0.0;
|
||||
|
||||
for (int i=0; i<n; i++) {
|
||||
c1 = coords[i];
|
||||
c2 = coords[(i + 1) % n];
|
||||
a += (c1.x * c2.y - c2.x * c1.y);
|
||||
}
|
||||
for (int i=1; i<steps; i++) {
|
||||
coords.push_back(coord<double,2>(env.minx(), env.miny() + i * ystep));
|
||||
coords.push_back(coord<double,2>(env.maxx(), env.miny() + i * ystep));
|
||||
}
|
||||
return a <= 0.0;
|
||||
}
|
||||
|
||||
box2d<double> calculate_bbox(std::vector<coord<double,2> > & points) {
|
||||
|
@ -276,7 +295,7 @@ bool proj_transform::backward(box2d<double>& env, int points) const
|
|||
}
|
||||
|
||||
std::vector<coord<double,2> > coords;
|
||||
envelope_points(coords, env, points);
|
||||
envelope_points(coords, env, points); // this is always clockwise
|
||||
|
||||
double z;
|
||||
for (std::vector<coord<double,2> >::iterator it = coords.begin(); it!=coords.end(); ++it) {
|
||||
|
@ -287,6 +306,16 @@ bool proj_transform::backward(box2d<double>& env, int points) const
|
|||
}
|
||||
|
||||
box2d<double> result = calculate_bbox(coords);
|
||||
if (is_source_longlat_ && !is_clockwise(coords)) {
|
||||
/* we've gone to a geographic CS, and our clockwise envelope has
|
||||
* changed into an anticlockwise one. This means we've crossed the antimeridian, and
|
||||
* need to expand the X direction to +/-180 to include all the data. Once we can deal
|
||||
* with multiple bboxes in queries we can improve.
|
||||
*/
|
||||
double miny = result.miny();
|
||||
result.expand_to_include(-180.0, miny);
|
||||
result.expand_to_include(180.0, miny);
|
||||
}
|
||||
|
||||
env.re_center(result.center().x, result.center().y);
|
||||
env.height(result.height());
|
||||
|
@ -306,7 +335,7 @@ bool proj_transform::forward(box2d<double>& env, int points) const
|
|||
}
|
||||
|
||||
std::vector<coord<double,2> > coords;
|
||||
envelope_points(coords, env, points);
|
||||
envelope_points(coords, env, points); // this is always clockwise
|
||||
|
||||
double z;
|
||||
for (std::vector<coord<double,2> >::iterator it = coords.begin(); it!=coords.end(); ++it) {
|
||||
|
@ -318,6 +347,17 @@ bool proj_transform::forward(box2d<double>& env, int points) const
|
|||
|
||||
box2d<double> result = calculate_bbox(coords);
|
||||
|
||||
if (is_dest_longlat_ && !is_clockwise(coords)) {
|
||||
/* we've gone to a geographic CS, and our clockwise envelope has
|
||||
* changed into an anticlockwise one. This means we've crossed the antimeridian, and
|
||||
* need to expand the X direction to +/-180 to include all the data. Once we can deal
|
||||
* with multiple bboxes in queries we can improve.
|
||||
*/
|
||||
double miny = result.miny();
|
||||
result.expand_to_include(-180.0, miny);
|
||||
result.expand_to_include(180.0, miny);
|
||||
}
|
||||
|
||||
env.re_center(result.center().x, result.center().y);
|
||||
env.height(result.height());
|
||||
env.width(result.width());
|
||||
|
|
|
@ -101,7 +101,9 @@ int main(int argc, char** argv)
|
|||
BOOST_TEST(params.get<std::string>("rvalue") == std::string("rvalue"));
|
||||
// Currently this fails because rvalue gets moved and nulled out
|
||||
// Is this really the right behavior?
|
||||
BOOST_TEST(rvalue == std::string("rvalue"));
|
||||
std::clog << "FIXME: line 104 of tests/cpp_tests/params_test.cpp\n";
|
||||
std::clog << "https://github.com/mapnik/mapnik/issues/2651\n";
|
||||
//BOOST_TEST(rvalue == std::string("rvalue"));
|
||||
|
||||
// ensure that const member is not moved incorrectly when added to params
|
||||
detail::string_holder holder;
|
||||
|
|
|
@ -5,7 +5,7 @@ from nose.tools import *
|
|||
import mapnik
|
||||
import random
|
||||
import math
|
||||
from utilities import run_all
|
||||
from utilities import run_all, assert_box2d_almost_equal
|
||||
|
||||
# Tests that exercise map projections.
|
||||
|
||||
|
@ -114,5 +114,39 @@ def test_proj_transform_between_init_and_literal():
|
|||
eq_(math.fabs(coord.y - lon_lat_coord4.y) < 1,True)
|
||||
|
||||
|
||||
# Github Issue #2648
|
||||
def test_proj_antimeridian_bbox():
|
||||
# this is logic from feature_style_processor::prepare_layer()
|
||||
PROJ_ENVELOPE_POINTS = 20 # include/mapnik/config.hpp
|
||||
|
||||
prjGeog = mapnik.Projection('+init=epsg:4326')
|
||||
prjProj = mapnik.Projection('+init=epsg:2193')
|
||||
prj_trans_fwd = mapnik.ProjTransform(prjProj, prjGeog)
|
||||
prj_trans_rev = mapnik.ProjTransform(prjGeog, prjProj)
|
||||
|
||||
# bad = mapnik.Box2d(-177.31453250437079, -62.33374815225163, 178.02778363316355, -24.584597490955804)
|
||||
better = mapnik.Box2d(-180.0, -62.33374815225163, 180.0, -24.584597490955804)
|
||||
|
||||
buffered_query_ext = mapnik.Box2d(274000, 3087000, 3327000, 7173000)
|
||||
fwd_ext = prj_trans_fwd.forward(buffered_query_ext, PROJ_ENVELOPE_POINTS)
|
||||
assert_box2d_almost_equal(fwd_ext, better)
|
||||
|
||||
# check the same logic works for .backward()
|
||||
ext = mapnik.Box2d(274000, 3087000, 3327000, 7173000)
|
||||
rev_ext = prj_trans_rev.backward(ext, PROJ_ENVELOPE_POINTS)
|
||||
assert_box2d_almost_equal(rev_ext, better)
|
||||
|
||||
# checks for not being snapped (ie. not antimeridian)
|
||||
normal = mapnik.Box2d(148.766759749,-60.1222810238,159.95484893,-24.9771195151)
|
||||
buffered_query_ext = mapnik.Box2d(274000, 3087000, 276000, 7173000)
|
||||
fwd_ext = prj_trans_fwd.forward(buffered_query_ext, PROJ_ENVELOPE_POINTS)
|
||||
assert_box2d_almost_equal(fwd_ext, normal)
|
||||
|
||||
# check the same logic works for .backward()
|
||||
ext = mapnik.Box2d(274000, 3087000, 276000, 7173000)
|
||||
rev_ext = prj_trans_rev.backward(ext, PROJ_ENVELOPE_POINTS)
|
||||
assert_box2d_almost_equal(rev_ext, normal)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from nose.plugins.errorclass import ErrorClass, ErrorClassPlugin
|
||||
from nose.tools import assert_almost_equal
|
||||
|
||||
import os, sys, inspect, traceback
|
||||
import mapnik
|
||||
|
@ -92,3 +93,10 @@ def side_by_side_image(left_im, right_im):
|
|||
if width > 80:
|
||||
im.composite(mapnik.Image.open(HERE+'/images/actual.png'),mapnik.CompositeOp.difference,1.0,left_im.width() + 1, 0)
|
||||
return im
|
||||
|
||||
def assert_box2d_almost_equal(a, b, msg=None):
|
||||
msg = msg or ("%r != %r" % (a, b))
|
||||
assert_almost_equal(a.minx, b.minx, msg=msg)
|
||||
assert_almost_equal(a.maxx, b.maxx, msg=msg)
|
||||
assert_almost_equal(a.miny, b.miny, msg=msg)
|
||||
assert_almost_equal(a.maxy, b.maxy, msg=msg)
|
||||
|
|
|
@ -10,15 +10,9 @@ try:
|
|||
except ImportError:
|
||||
import simplejson as json
|
||||
|
||||
COMPUTE_THRESHOLD = 16
|
||||
|
||||
# testcase images are generated on OS X
|
||||
# so they should exactly match
|
||||
if platform.uname()[0] == 'Darwin':
|
||||
COMPUTE_THRESHOLD = 2
|
||||
|
||||
# returns true if pixels are not identical
|
||||
def compare_pixels(pixel1, pixel2, alpha=True):
|
||||
# returns true if pixels are not nearly identical
|
||||
def compare_pixels(pixel1, pixel2, alpha=True, pixel_threshold=0):
|
||||
if pixel1 == pixel2:
|
||||
return False
|
||||
r_diff = abs((pixel1 & 0xff) - (pixel2 & 0xff))
|
||||
|
@ -26,15 +20,15 @@ def compare_pixels(pixel1, pixel2, alpha=True):
|
|||
b_diff = abs(((pixel1 >> 16) & 0xff)- ((pixel2 >> 16) & 0xff))
|
||||
if alpha:
|
||||
a_diff = abs(((pixel1 >> 24) & 0xff) - ((pixel2 >> 24) & 0xff))
|
||||
if(r_diff > COMPUTE_THRESHOLD or
|
||||
g_diff > COMPUTE_THRESHOLD or
|
||||
b_diff > COMPUTE_THRESHOLD or
|
||||
a_diff > COMPUTE_THRESHOLD):
|
||||
if(r_diff > pixel_threshold or
|
||||
g_diff > pixel_threshold or
|
||||
b_diff > pixel_threshold or
|
||||
a_diff > pixel_threshold):
|
||||
return True
|
||||
else:
|
||||
if(r_diff > COMPUTE_THRESHOLD or
|
||||
g_diff > COMPUTE_THRESHOLD or
|
||||
b_diff > COMPUTE_THRESHOLD):
|
||||
if(r_diff > pixel_threshold or
|
||||
g_diff > pixel_threshold or
|
||||
b_diff > pixel_threshold):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
@ -47,6 +41,7 @@ def compare(actual, expected, alpha=True):
|
|||
delta_pixels = (im2.width() * im2.height()) - pixels
|
||||
if delta_pixels != 0:
|
||||
return delta_pixels
|
||||
# TODO: convert to C++ to speed this up
|
||||
for x in range(0,im1.width(),2):
|
||||
for y in range(0,im1.height(),2):
|
||||
if compare_pixels(im1.get_pixel(x,y),im2.get_pixel(x,y),alpha=alpha):
|
||||
|
|
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"42",
|
||||
"41",
|
||||
"40",
|
||||
"24",
|
||||
"44",
|
||||
"26",
|
||||
"38",
|
||||
"23",
|
||||
"46",
|
||||
"36",
|
||||
"22",
|
||||
"28",
|
||||
"21",
|
||||
"47",
|
||||
"34",
|
||||
"29",
|
||||
"33",
|
||||
"30",
|
||||
"19",
|
||||
"15",
|
||||
"14",
|
||||
"12",
|
||||
"18",
|
||||
"16",
|
||||
"11",
|
||||
"31",
|
||||
"49",
|
||||
"48",
|
||||
"10",
|
||||
"50",
|
||||
"51",
|
||||
"9",
|
||||
"52",
|
||||
"8",
|
||||
"54",
|
||||
"6",
|
||||
"56",
|
||||
"5",
|
||||
"58",
|
||||
"4",
|
||||
"60",
|
||||
"3",
|
||||
"62",
|
||||
"1",
|
||||
"63",
|
||||
"66",
|
||||
"65",
|
||||
"64"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !# $ % ",
|
||||
" & ' ",
|
||||
" ( ) ",
|
||||
" * + , ",
|
||||
" - . ",
|
||||
" / 0 1 ",
|
||||
" 2 3 4 56 7 ",
|
||||
" 8 9 : ",
|
||||
" ; <= ",
|
||||
" > ? ",
|
||||
" @ ",
|
||||
" A B ",
|
||||
" C D ",
|
||||
" ",
|
||||
" E F ",
|
||||
" ",
|
||||
" G H ",
|
||||
" I J ",
|
||||
" K L ",
|
||||
" ",
|
||||
" M N ",
|
||||
" OP ",
|
||||
" Q ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
|
@ -0,0 +1,286 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"42",
|
||||
"40",
|
||||
"24",
|
||||
"37",
|
||||
"46",
|
||||
"22",
|
||||
"28",
|
||||
"35",
|
||||
"20",
|
||||
"30",
|
||||
"15",
|
||||
"12",
|
||||
"32",
|
||||
"17",
|
||||
"48",
|
||||
"10",
|
||||
"50",
|
||||
"9",
|
||||
"52",
|
||||
"54",
|
||||
"7",
|
||||
"57",
|
||||
"5",
|
||||
"60",
|
||||
"3",
|
||||
"1",
|
||||
"63",
|
||||
"66"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ! # $ ",
|
||||
" ",
|
||||
" % ",
|
||||
" & ' ",
|
||||
" ( ",
|
||||
" ) * ",
|
||||
" + , - ",
|
||||
" . / ",
|
||||
" 0 ",
|
||||
" 1 2 ",
|
||||
" ",
|
||||
" 3 4 ",
|
||||
" 5 ",
|
||||
" 6 ",
|
||||
" ",
|
||||
" 7 ",
|
||||
" 8 ",
|
||||
" 9 ",
|
||||
" : ",
|
||||
" ",
|
||||
" ; < ",
|
||||
" = ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ! !! ",
|
||||
" ! !!! ",
|
||||
" !!!! !!!! ",
|
||||
" !!!!!! !!!!! ",
|
||||
" !!!!!!!! !!!!!!! ",
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
" ! ! !!! !!! ",
|
||||
" !! !!!! ",
|
||||
" ! !!!!!! ",
|
||||
" ! !!!! ",
|
||||
" ! !!! ",
|
||||
" ",
|
||||
" ! ",
|
||||
" ",
|
||||
|
|
|
@ -369,7 +369,7 @@
|
|||
" \u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c \u009d\u009d\u009d\u009d\u009d ",
|
||||
" \u009e\u009e \u009f\u009f\u009f\u009f\u009f\u009f \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6 \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7 \u00a8\u00a8 \u00a9\u00a9 ",
|
||||
" \u009e\u009e \u009f \u009f \u009f \u00a0\u00a0\u00a0\u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5 \u00a6\u00a6 \u00a7\u00a7 \u00a7\u00a7 \u00a8\u00a8\u00a8\u00a8 \u00a9\u00a9 \u00a9 ",
|
||||
" \u009e\u009e\u009e \u009e\u009e\u009e \u009f \u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c\u009c\u009c\u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
|
||||
" \u009e\u009e\u009e \u009e\u009e\u009e \u009f \u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
|
||||
" \u009e\u009e \u009e\u009e \u009f \u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c\u009c\u009c \u009c \u00a1\u00a1 \u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5\u00a5 \u00a5 \u00a6 \u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 ",
|
||||
" \u009e\u009e \u009e\u009e \u009f \u009f \u00a0\u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3\u00a3 \u00a3\u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5 \u00a5 \u00a6\u00a6 \u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
|
||||
" \u009e \u009e \u009f \u009f \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u00a4\u00a4 \u00a4 \u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5 \u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7\u00a7 \u00a7\u00a7 \u00a8\u00a8 \u00a8\u00a8 \u00a9 \u00a9 ",
|
||||
|
@ -436,7 +436,7 @@
|
|||
" \u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0 \u00e0\u00e0 \u00e1 \u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00e5 ",
|
||||
" \u00d8\u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de \u00df\u00df \u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3 \u00e4 \u00e4 \u00e4 \u00e4 \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00e5 ",
|
||||
" \u00d8\u00d8\u00d8\u00d8\u00d8\u00d8 \u00d9 \u00d9 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de \u00df \u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 ",
|
||||
" \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00d9\u00d9\u00d9 \u00d9 \u00d9 \u00d9 \u00db\u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 ",
|
||||
" \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00d9\u00d9\u00d9 \u00d9 \u00d9 \u00d9 \u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 ",
|
||||
" \u00d8 \u00e2\u00e2\u00e2 ",
|
||||
" ",
|
||||
" ",
|
||||
|
|
|
@ -340,7 +340,7 @@
|
|||
" \u0087\u0087\u0087\u0087\u0087\u0087 \u0087\u0087\u0087\u0087\u0087}}}}} }}}}} ~~~~~~~ ~~~~~~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b \u008b\u008b\u008b\u008b\u008b\u008b\u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0084\u0084\u0084\u0084\u0084\u0084\u0085\u0085 \u0085 \u0085 \u008a\u008a \u008a\u008a\u0086 \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}} }}}}}} \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b \u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0084\u0084 \u0084\u0084\u0085\u0085\u0085\u0085\u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}} }}}}}} ~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085\u0085\u0085\u0085\u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}}}}}}}}}}}~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080 \u0080\u0080 \u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084 \u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}}}}}}}}}}}~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080 \u0080\u0080 \u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084 \u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087}}}}}}}}}}}}}}}}}~~ ~~ ~~~~~~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}} }}}}}}}~~ ~ ~~ ~ ~~~~ \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082\u0082 \u0082 \u0082\u0082\u0082 \u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0085\u0085\u0085 \u0085\u0085\u0085 \u008a\u008a \u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}} }}}}}}}~~ ~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b \u0089\u0089\u0089 \u0089\u0089\u0089\u0089\u0089\u0089 \u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0082\u0082 \u0083\u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084 \u0084\u0085\u0085 \u0085\u0085\u0085 \u008a\u008a\u008a \u008a\u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
|
||||
|
@ -356,14 +356,14 @@
|
|||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f \u008f\u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092 \u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e \u008e\u008e\u008e\u008e\u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0096\u0096\u0096 \u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0097 \u0097\u0097 \u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 \u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090 \u0090\u0090 \u0090\u0090 \u0091\u0091 \u0091\u0091\u0091 \u0091\u0091\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094 \u0095\u0095\u0095\u0095\u0095 \u0095 \u0095 \u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0091\u0091\u0091 \u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095 \u0095 \u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f\u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f\u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e \u0093\u0093 \u0093\u0093 \u0093 \u0094\u0094 \u0094 \u0094\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0095 \u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u008f \u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0091\u0091 \u0091\u0091\u0091 \u0091\u0091 \u0092\u0092\u0092\u0092 \u0092\u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099 \u0099\u0099 \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093\u0093\u0093\u0093 \u0093 \u0094\u0094\u0094\u0094\u0094 \u0094\u0095\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0095 \u0096\u0096\u0096 \u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u008f\u008f \u0090\u0090\u0090 \u0090\u0090 \u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u0091 \u0091\u0091\u0091 \u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093\u0093 \u0093\u0093\u0093 \u0093 \u0094\u0094\u0094\u0094\u0094 \u0094\u0094\u0094\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0095\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f \u008f\u008f\u008f\u008f \u0090\u0090 \u0090\u0090\u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u008e\u008e \u008e \u008e\u008e \u0093\u0093\u0093\u0093\u0093 \u0093\u0093\u0093 \u0093 \u0094\u0094 \u0094\u0094\u0094\u0094\u0094\u0094\u0094\u0095\u0095 \u0095\u0095 \u0095\u0095\u0095\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f \u0090\u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d \u008e\u008e\u008e\u008e\u008e\u008e \u008e \u0093\u0093\u0093\u0093 \u0093\u0093\u0093\u0093 \u0094\u0094 \u0094\u0094\u0094 \u0095\u0095\u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f \u0090 \u0091\u0091\u0091\u0091\u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093\u0093 \u0093\u0093\u0093 \u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
|
||||
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f\u009f\u009f\u009f\u0091\u0091\u0091\u0091\u0091\u009f\u009f \u00a0\u00a0 \u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u008e\u008e\u008e\u008e\u008e\u008e\u008e \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u0094\u0094\u00a4\u00a4\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7 ",
|
||||
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f\u009f\u009f\u009f\u0091\u0091\u0091\u0091\u0091\u009f\u009f \u00a0\u00a0 \u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u008e\u008e\u008e\u008e\u008e\u008e \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u0094\u0094\u00a4\u00a4\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7 ",
|
||||
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d\u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f \u0091\u0091\u0091 \u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3\u00a3 \u0094\u0094\u0094\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9 \u00a7\u00a7 ",
|
||||
" \u009b\u009b\u009b\u009b \u009c \u009c \u009c\u009c \u009d\u009d\u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f \u0091 \u009f\u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1 \u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3 \u00a4\u0094\u0094\u0094\u0094\u00a4 \u00a5 \u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9\u00a9 \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7 ",
|
||||
" \u009b\u009b\u009b\u009b \u009c \u009c \u009c\u009c \u009d\u009d\u009d\u009d \u009f\u009f \u009f\u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4 \u00a4\u00a4 \u00a5 \u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9\u00a9\u00a9\u00a9 \u00a7\u00a7 \u00a7\u00a7\u00a7 ",
|
||||
|
@ -440,7 +440,7 @@
|
|||
" \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5 \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00d8\u00d8\u00d8 \u00d8\u00d8\u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00e3\u00d9\u00d9 \u00d9\u00d9 \u00d9\u00d9 \u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
|
||||
" \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1 \u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
|
||||
" \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 \u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00e3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
|
||||
" \u00e5\u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 ",
|
||||
" \u00e5\u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 ",
|
||||
" \u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00e8\u00e8\u00e8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e9\u00e9\u00e9\u00e9\u00e9 ",
|
||||
" \u00e5\u00e5\u00e5 \u00ea\u00ea\u00ea \u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7 \u00eb\u00eb \u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec \u00ed \u00ed\u00ed \u00e8\u00e8\u00e8 \u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee \u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef \u00e2\u00e2\u00e2\u00e2\u00e2 \u00f0\u00f0 \u00e6 \u00e6\u00e6 \u00f1\u00f1\u00f1\u00f1\u00f1\u00f1\u00f1 \u00f1\u00f1\u00f1\u00f1\u00f1 \u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9 ",
|
||||
" \u00f2\u00f2\u00f2\u00f2\u00f2\u00f2 \u00ea\u00ea\u00ea \u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7 \u00eb\u00eb\u00eb \u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec \u00ed\u00ed \u00ed\u00ed \u00f3\u00f3\u00f3\u00f3 \u00e8\u00e8\u00e8\u00e8\u00e8 \u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee \u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef \u00e2\u00e2\u00e2\u00e2 \u00f0\u00f0\u00f0\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6 \u00f1\u00f1\u00f1 \u00f1\u00f1 \u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9 ",
|
||||
|
|
After Width: | Height: | Size: 938 B |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 207 B After Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 221 B After Width: | Height: | Size: 221 B |
Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 151 B After Width: | Height: | Size: 151 B |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
93
tests/visual_tests/styles/antimeridian-bbox.xml
Normal file
|
@ -0,0 +1,93 @@
|
|||
<Map srs="+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs " maximum-extent="274000,3087000,3327000,7173000">
|
||||
|
||||
<Parameters>
|
||||
<Parameter name="sizes">1000,1000</Parameter>
|
||||
<Parameter name="bbox">200000.0,1087000.0,7007000.0,7173000.0</Parameter>
|
||||
</Parameters>
|
||||
|
||||
<Style name="mystyle" filter-mode="first">
|
||||
<Rule>
|
||||
<PointSymbolizer/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="src_layer" srs="+init=epsg:4326">
|
||||
<StyleName>mystyle</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="extent">-180,-47.2754736667,180,-34.0036943</Parameter>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
<Parameter name="inline">
|
||||
WKT,id,
|
||||
"POINT (-176.662157383264883 -43.096109795145765)",
|
||||
"POINT (-176.854671182715663 -42.903595931039007)",
|
||||
"POINT (-177.252533072573982 -42.646910782400411)",
|
||||
"POINT (-177.611892228793693 -42.415894147047872)",
|
||||
"POINT (-178.099593973519461 -42.159208996768882)",
|
||||
"POINT (-178.56162722744844 -41.735678488584703)",
|
||||
"POINT (-178.72847257314487 -41.555998877995457)",
|
||||
"POINT (-178.985157723427307 -41.222308171291367)",
|
||||
"POINT (-179.152003072780786 -40.965623011559309)",
|
||||
"POINT (-179.511362290676971 -40.490755465927869)",
|
||||
"POINT (-179.80655022231997 -40.054390693250525)",
|
||||
"POINT (179.923930360184784 -39.784871275110177)",
|
||||
"POINT (179.75708500598833 -39.643694437033751)",
|
||||
"POINT (179.346388748199729 -39.772037019858125)",
|
||||
"POINT (179.025532296262895 -39.861876827647727)",
|
||||
"POINT (178.563499004992451 -40.067224958370574)",
|
||||
"POINT (178.281145326853419 -40.208401797959127)",
|
||||
"POINT (178.02446016489057 -40.054390701181269)",
|
||||
"POINT (177.677935196187519 -39.900379604399049)",
|
||||
"POINT (177.485421324683159 -39.669362958813636)",
|
||||
"POINT (177.331410227479353 -39.425512055075657)",
|
||||
"POINT (177.215901904577578 -39.181661151299444)",
|
||||
"POINT (177.023388033074042 -38.86080469896423)",
|
||||
"POINT (176.76670287107433 -38.604119537111721)",
|
||||
"POINT (176.535686225282944 -38.565616762876971)",
|
||||
"POINT (176.317503837598906 -38.783799150566402)",
|
||||
"POINT (176.176326998513417 -38.989147280139598)",
|
||||
"POINT (175.932476094645182 -39.425512055467188)",
|
||||
"POINT (175.701459448881849 -39.759202766009246)",
|
||||
"POINT (175.52177983551357 -40.080059218446856)",
|
||||
"POINT (175.149586350685809 -40.37524715469236)",
|
||||
"POINT (174.880066930641647 -40.298241606113201)",
|
||||
"POINT (174.700387317279876 -40.131396250851466)",
|
||||
"POINT (174.469370671529759 -39.861876830812001)",
|
||||
"POINT (174.418033639140958 -39.707865733646173)",
|
||||
"POINT (174.212685509585867 -39.374175023120273)",
|
||||
"POINT (174.148514219099951 -39.143158377371385)",
|
||||
"POINT (174.05867441241972 -38.937810247816806)",
|
||||
"POINT (173.930331831447972 -38.719627860165083)",
|
||||
"POINT (173.699315185698993 -38.527113988707669)",
|
||||
"POINT (173.327121700881207 -38.552782504902005)",
|
||||
"POINT (172.993430990354909 -38.655456569679323)",
|
||||
"POINT (172.839419893188989 -38.732462118262291)",
|
||||
"POINT (172.659740279828696 -38.899307473525418)",
|
||||
"POINT (172.45439215027406 -39.027650054497059)",
|
||||
"POINT (172.197706988330737 -39.284335216440311)",
|
||||
"POINT (172.018027374970359 -39.669362959355176)",
|
||||
"POINT (-170.809757996124091 -39.258667337666161)",
|
||||
"POINT (-171.092108440755396 -39.489683796643384)",
|
||||
"POINT (-171.374459297976472 -39.72070029102813)",
|
||||
"POINT (-171.669644665725599 -39.95171681078768)",
|
||||
"POINT (-171.964830399850541 -40.195567616117053)",
|
||||
"POINT (-172.208679740446428 -40.426584197598665)",
|
||||
"POINT (-172.542368540167502 -40.631932262228219)",
|
||||
"POINT (-172.696378898013165 -40.785943335635686)",
|
||||
"POINT (-173.055736583802087 -41.068296973781855)",
|
||||
"POINT (-173.273918197572641 -41.299313602634044)",
|
||||
"POINT (-173.658944763471993 -41.645838554189496)",
|
||||
"POINT (-173.504934101572132 -41.491827462434976)",
|
||||
"POINT (-173.979800429072611 -41.992363516983445)",
|
||||
"POINT (-174.108142742586438 -42.172043129406539)",
|
||||
"POINT (-174.313490466537729 -42.377391260144812)",
|
||||
"POINT (-174.608677910682047 -42.736750491079746)",
|
||||
"POINT (-176.058947562102475 -43.429800480947527)",
|
||||
"POINT (-174.955202379135329 -42.967767146816229)",
|
||||
"POINT (-175.481406377455045 -43.160281038130286)",
|
||||
"POINT (-175.802262571951218 -43.352794922023079)",
|
||||
"POINT (-176.328466827030041 -43.339960685516779)",
|
||||
"POINT (-176.508146353344472 -43.250120886092468)",
|
||||
</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
</Map>
|
|
@ -27,17 +27,9 @@ defaults = {
|
|||
'grid': mapnik.has_grid_renderer()
|
||||
}
|
||||
|
||||
cairo_threshold = 10
|
||||
cairo_threshold = 0
|
||||
agg_threshold = 0
|
||||
grid_threshold = 5
|
||||
if 'Linux' == platform.uname()[0]:
|
||||
# we assume if linux then you are running packaged cairo
|
||||
# which is older than the 1.12.14 version we used on OS X
|
||||
# to generate the expected images, so we'll rachet back the threshold
|
||||
# https://github.com/mapnik/mapnik/issues/1868
|
||||
cairo_threshold = 230
|
||||
agg_threshold = 12
|
||||
grid_threshold = 6
|
||||
grid_threshold = 0
|
||||
|
||||
def render_cairo(m, output, scale_factor):
|
||||
mapnik.render_to_file(m, output, 'ARGB32', scale_factor)
|
||||
|
@ -64,7 +56,7 @@ renderers = [
|
|||
},
|
||||
{ 'name': 'cairo',
|
||||
'render': render_cairo,
|
||||
'compare': lambda actual, reference: compare(actual, reference, alpha=False),
|
||||
'compare': lambda actual, reference: compare(actual, reference, alpha=True),
|
||||
'threshold': cairo_threshold,
|
||||
'filetype': 'png',
|
||||
'dir': 'images'
|
||||
|
@ -123,6 +115,16 @@ class Reporting:
|
|||
else:
|
||||
print '✓'
|
||||
|
||||
def updating(self, actual, expected):
|
||||
self.passed += 1
|
||||
if self.quiet:
|
||||
sys.stderr.write('\x1b[33m.\x1b[0m')
|
||||
else:
|
||||
print '\x1b[33m✓\x1b[0m (\x1b[34mUpdating\x1b[0m)'
|
||||
contents = open(actual, 'r').read()
|
||||
open(expected, 'wb').write(contents)
|
||||
|
||||
|
||||
def not_found(self, actual, expected):
|
||||
self.failed += 1
|
||||
self.errors.append((self.NOT_FOUND, actual, expected, 0, None))
|
||||
|
@ -244,6 +246,8 @@ def render(filename, config, scale_factor, reporting):
|
|||
renderer['render'](m, actual, scale_factor)
|
||||
if not os.path.exists(expected):
|
||||
reporting.not_found(actual, expected)
|
||||
elif os.environ.get('UPDATE'):
|
||||
reporting.updating(actual, expected)
|
||||
else:
|
||||
diff = renderer['compare'](actual, expected)
|
||||
if diff > renderer['threshold']:
|
||||
|
|