Merge branch 'expr-v2' of github.com:mapnik/mapnik into jmh-text-layouts

Conflicts:
	tests/visual_tests/test.py
This commit is contained in:
Jordan Hollinger 2014-02-10 07:38:25 -05:00
commit d8eda4898e
79 changed files with 1633 additions and 724 deletions

View file

@ -14,10 +14,10 @@ endif
all: mapnik
install:
@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
mapnik:
@python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
python scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
clean:
@python scons/scons.py -j$(JOBS) -c --config=cache --implicit-cache --max-drift=1

View file

@ -767,16 +767,20 @@ def FindBoost(context, prefixes, thread_flag):
if BOOST_LIB_DIR:
msg += '\nFound boost libs: %s' % BOOST_LIB_DIR
env['BOOST_LIBS'] = BOOST_LIB_DIR
else:
elif not env['BOOST_LIBS']:
env['BOOST_LIBS'] = '/usr/' + env['LIBDIR_SCHEMA']
msg += '\nUsing default boost lib dir: %s' % env['BOOST_LIBS']
else:
msg += '\nUsing boost lib dir: %s' % env['BOOST_LIBS']
if BOOST_INCLUDE_DIR:
msg += '\nFound boost headers: %s' % BOOST_INCLUDE_DIR
env['BOOST_INCLUDES'] = BOOST_INCLUDE_DIR
else:
elif not env['BOOST_INCLUDES']:
env['BOOST_INCLUDES'] = '/usr/include'
msg += '\nUsing default boost include dir: %s' % env['BOOST_INCLUDES']
else:
msg += '\nUsing boost include dir: %s' % env['BOOST_INCLUDES']
if not env['BOOST_TOOLKIT'] and not env['BOOST_ABI'] and not env['BOOST_VERSION']:
if BOOST_APPEND:

View file

@ -10,6 +10,7 @@ function run {
${BASE}/$1 --threads $2 --iterations $(expr $3 / $2);
}
run test_array_allocation 20 100000
run test_png_encoding1 10 1000
run test_png_encoding2 10 50
run test_to_string1 10 100000

View file

@ -0,0 +1,310 @@
#include "bench_framework.hpp"
#include <cstring>
#include <cstdlib>
#include <stdexcept>
#include <array>
#include <valarray>
// http://stackoverflow.com/questions/17347254/why-is-allocation-and-deallocation-of-stdvector-slower-than-dynamic-array-on-m
#define FULL_ZERO_CHECK
inline void ensure_zero(uint8_t * data, uint32_t size) {
#ifdef FULL_ZERO_CHECK
for (std::size_t i=0;i<size;++i) {
if (data[i] != 0) {
throw std::runtime_error("found non zero value");
}
}
#else
if (data[0] != 0) {
throw std::runtime_error("found non zero value");
}
#endif
}
class test1 : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test1(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
// NOTE: sizeof(uint8_t) == 1
uint8_t *data = (uint8_t *)malloc(sizeof(uint8_t)*size_);
memcpy(data, &array_[0], size_);
ensure_zero(data,size_);
free(data);
}
}
};
class test1b : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test1b(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
// NOTE: sizeof(uint8_t) == 1
uint8_t *data = (uint8_t *)malloc(sizeof(uint8_t)*size_);
memset(data, 0, sizeof(uint8_t)*size_);
ensure_zero(data,size_);
free(data);
}
}
};
class test2 : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test2(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
uint8_t * data = static_cast<uint8_t*>(::operator new(sizeof(uint8_t)*size_));
memcpy(data, &array_[0], size_);
ensure_zero(data,size_);
::operator delete(data),data=0;
}
}
};
class test3 : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test3(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
std::vector<uint8_t> data(size_);
ensure_zero(&data[0],data.size());
}
}
};
class test3b : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test3b(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
std::vector<uint8_t> data(0);
data.resize(size_,0);
ensure_zero(&data[0],data.size());
}
}
};
class test3c : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test3c(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
std::vector<uint8_t> data(0);
data.assign(size_,0);
ensure_zero(&data[0],data.size());
}
}
};
class test4 : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test4(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
uint8_t *data = (uint8_t *)calloc(size_,sizeof(uint8_t));
ensure_zero(data,size_);
free(data);
}
}
};
class test5 : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test5(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
std::string data(array_.begin(),array_.end());
ensure_zero((uint8_t *)&data[0],size_);
}
}
};
class test5b : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<char> array_;
test5b(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
std::string data(&array_[0]);
ensure_zero((uint8_t *)&data[0],size_);
}
}
};
// C++14 dynarray<T>
// http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting
// http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130909/088700.html
// http://stackoverflow.com/questions/17303902/any-alternative-to-stddynarray-presently-available
class test6 : public benchmark::test_case
{
public:
uint32_t size_;
std::vector<uint8_t> array_;
test6(mapnik::parameters const& params)
: test_case(params),
size_(*params.get<mapnik::value_integer>("size",256*256)),
array_(size_,0) { }
bool validate() const
{
return true;
}
void operator()() const
{
for (std::size_t i=0;i<iterations_;++i) {
std::valarray<uint8_t> data(size_,0);
ensure_zero(&data[0],size_);
}
}
};
int main(int argc, char** argv)
{
mapnik::parameters params;
benchmark::handle_args(argc,argv,params);
{
test4 test_runner4(params);
run(test_runner4,"calloc");
}
{
test1 test_runner(params);
run(test_runner,"malloc/memcpy");
}
{
test1b test_runner(params);
run(test_runner,"malloc/memset");
}
{
test2 test_runner(params);
run(test_runner,"new");
}
{
test3 test_runner(params);
run(test_runner,"vector(N)");
}
{
test3b test_runner(params);
run(test_runner,"vector/resize");
}
{
test3c test_runner(params);
run(test_runner,"vector/assign");
}
{
test5 test_runner(params);
run(test_runner,"std::string range");
}
{
test5 test_runner(params);
run(test_runner,"std::string &[0]");
}
{
test5 test_runner(params);
run(test_runner,"valarray");
}
return 0;
}

View file

@ -104,11 +104,7 @@ struct alpha_conv_impl
struct hsl_conv_impl
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template<typename T>
#else
template<typename T0,typename T1, typename T2, typename T3>
#endif
struct result
{
typedef void type;

View file

@ -35,6 +35,7 @@
// stl
#include <map>
#include <set>
namespace mapnik {
@ -56,7 +57,7 @@ private:
~datasource_cache();
std::map<std::string,std::shared_ptr<PluginInfo> > plugins_;
bool registered_;
std::vector<std::string> plugin_directories_;
std::set<std::string> plugin_directories_;
};
}

View file

@ -65,11 +65,7 @@ struct unicode_impl
struct regex_match_impl
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef expr_node type;
@ -87,11 +83,7 @@ struct regex_match_impl
struct regex_replace_impl
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T>
#else
template <typename T0, typename T1, typename T2>
#endif
struct result
{
typedef expr_node type;

View file

@ -33,6 +33,7 @@
// stl
#include <vector>
#include <cstring>
#include <set>
#include <algorithm>
#include <cmath>
@ -68,7 +69,7 @@ class hextree : private mapnik::noncopyable
pixel_count(0),
children_count(0)
{
memset(&children_[0],0,sizeof(children_));
std::memset(&children_[0],0,sizeof(children_));
}
~node ()

View file

@ -29,9 +29,6 @@
#include <mapnik/noncopyable.hpp>
#include <mapnik/unicode.hpp>
// boost
// stl
#include <vector>

View file

@ -67,7 +67,6 @@ public:
mapnik::transcoder const& tr_;
};
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
struct put_property
{
typedef void result_type;
@ -90,42 +89,6 @@ struct extract_geometry
return feature.paths();
}
};
#else
struct put_property
{
template <typename T0,typename T1, typename T2>
struct result
{
typedef void type;
};
explicit put_property(mapnik::transcoder const& tr)
: tr_(tr) {}
template <typename T0,typename T1, typename T2>
void operator() (T0 & feature, T1 const& key, T2 const& val) const
{
mapnik::value v = boost::apply_visitor(attribute_value_visitor(tr_),val); // TODO: optimize
feature.put_new(key, v);
}
mapnik::transcoder const& tr_;
};
struct extract_geometry
{
template <typename T>
struct result
{
typedef boost::ptr_vector<mapnik::geometry_type>& type;
};
template <typename T>
boost::ptr_vector<mapnik::geometry_type>& operator() (T & feature) const
{
return feature.paths();
}
};
#endif
template <typename Iterator, typename FeatureType>
struct feature_grammar :

View file

@ -58,7 +58,6 @@ namespace phoenix = boost::phoenix;
namespace {
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
struct get_type
{
typedef int result_type;
@ -117,81 +116,6 @@ struct not_empty
}
};
#else
struct get_type
{
template <typename T>
struct result { typedef int type; };
int operator() (geometry_type const& geom) const
{
return static_cast<int>(geom.type());
}
};
struct get_first
{
template <typename T>
struct result { typedef geometry_type::value_type const type; };
geometry_type::value_type const operator() (geometry_type const& geom) const
{
geometry_type::value_type coord;
std::get<0>(coord) = geom.vertex(0,&std::get<1>(coord),&std::get<2>(coord));
return coord;
}
};
struct multi_geometry_type
{
template <typename T>
struct result { typedef std::tuple<unsigned,bool> type; };
std::tuple<unsigned,bool> operator() (geometry_container const& geom) const
{
unsigned type = 0u;
bool collection = false;
geometry_container::const_iterator itr = geom.begin();
geometry_container::const_iterator end = geom.end();
for ( ; itr != end; ++itr)
{
if (type != 0u && static_cast<unsigned>(itr->type()) != type)
{
collection = true;
break;
}
type = itr->type();
}
if (geom.size() > 1) type +=3;
return std::tuple<unsigned,bool>(type, collection);
}
};
struct not_empty
{
template <typename T>
struct result { typedef bool type; };
bool operator() (geometry_container const& cont) const
{
geometry_container::const_iterator itr = cont.begin();
geometry_container::const_iterator end = cont.end();
for (; itr!=end; ++itr)
{
if (itr->size() > 0) return true;
}
return false;
}
};
#endif
template <typename T>
struct json_coordinate_policy : karma::real_policies<T>
{

View file

@ -37,7 +37,6 @@ namespace qi = boost::spirit::qi;
namespace standard_wide = boost::spirit::standard_wide;
using standard_wide::space_type;
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
struct push_vertex
{
typedef void result_type;
@ -88,76 +87,6 @@ struct where_message
return str;
}
};
#else
struct push_vertex
{
template <typename T0,typename T1, typename T2, typename T3>
struct result
{
typedef void type;
};
template <typename T0,typename T1, typename T2, typename T3>
void operator() (T0 c, T1 path, T2 x, T3 y) const
{
BOOST_ASSERT( path!=0 );
path->push_vertex(x,y,c);
}
};
struct close_path
{
template <typename T>
struct result
{
typedef void type;
};
template <typename T>
void operator() (T path) const
{
BOOST_ASSERT( path!=0 );
if (path->size() > 2u) // to form a polygon ring we need at least 3 vertices
{
path->close_path();
}
}
};
struct cleanup
{
template <typename T0>
struct result
{
typedef void type;
};
template <typename T0>
void operator() (T0 & path) const
{
if (path) delete path, path=0;
}
};
struct where_message
{
template <typename T0,typename T1,typename T2>
struct result
{
typedef std::string type;
};
template <typename Iterator>
std::string operator() (Iterator first, Iterator last, std::size_t size) const
{
std::string str(first, last);
if (str.length() > size)
return str.substr(0, size) + "..." ;
return str;
}
};
#endif
template <typename Iterator>
struct geometry_grammar :

View file

@ -24,7 +24,6 @@
#define MAPNIK_SYMBOLIZER_GRAMMAR_HPP
// boost
#define BOOST_SPIRIT_USE_PHOENIX_V3 1
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>

View file

@ -23,13 +23,15 @@
#ifndef MAPNIK_TOPOJSON_GRAMMAR_HPP
#define MAPNIK_TOPOJSON_GRAMMAR_HPP
#define BOOST_SPIRIT_USE_PHOENIX_V3 1
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
//
// mapnik
#include <mapnik/value.hpp>
#include <mapnik/json/topology.hpp>
//
// boost
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
// stl
#include <string>
namespace mapnik { namespace topojson {

View file

@ -30,6 +30,7 @@
// stl
#include <vector>
#include <cstring>
#include <deque>
#include <algorithm>
@ -62,7 +63,7 @@ class octree : private mapnik::noncopyable
children_count(0),
index(0)
{
memset(&children_[0],0,sizeof(children_));
std::memset(&children_[0],0,sizeof(children_));
}
~node()

View file

@ -46,11 +46,7 @@ template <typename PathType>
struct move_to
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -71,11 +67,7 @@ struct move_to
template <typename PathType>
struct hline_to
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -97,11 +89,7 @@ struct hline_to
template <typename PathType>
struct vline_to
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -122,11 +110,7 @@ struct vline_to
template <typename PathType>
struct line_to
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -148,11 +132,7 @@ struct line_to
template <typename PathType>
struct curve4
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1, typename T2, typename T3>
#endif
struct result
{
typedef void type;
@ -177,11 +157,7 @@ struct curve4
template <typename PathType>
struct curve4_smooth
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1, typename T2>
#endif
struct result
{
typedef void type;
@ -203,11 +179,7 @@ struct curve4_smooth
template <typename PathType>
struct curve3
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1, typename T2>
#endif
struct result
{
typedef void type;
@ -230,11 +202,7 @@ struct curve3
template <typename PathType>
struct curve3_smooth
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -256,11 +224,7 @@ struct curve3_smooth
template <typename PathType>
struct arc_to
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
#endif
struct result
{
typedef void type;

View file

@ -50,11 +50,7 @@ namespace mapnik { namespace svg {
template <typename TransformType>
struct process_matrix
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
#endif
struct result
{
typedef void type;
@ -74,11 +70,7 @@ namespace mapnik { namespace svg {
template <typename TransformType>
struct process_rotate
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1, typename T2>
#endif
struct result
{
typedef void type;
@ -109,11 +101,7 @@ namespace mapnik { namespace svg {
template <typename TransformType>
struct process_translate
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -135,11 +123,7 @@ namespace mapnik { namespace svg {
template <typename TransformType>
struct process_scale
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;
@ -162,11 +146,7 @@ namespace mapnik { namespace svg {
template <typename TransformType>
struct process_skew
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T0>
#else
template <typename T0, typename T1>
#endif
struct result
{
typedef void type;

View file

@ -131,6 +131,8 @@ public:
/** Go back to initial state. */
void reset();
/** position on this line closest to the target position */
double position_closest_to(pixel_position const &target_pos);
private:
void rewind_subpath();

View file

@ -91,7 +91,6 @@ namespace mapnik { namespace util {
namespace svg_detail {
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename Geometry>
struct get_type
{
@ -115,37 +114,7 @@ namespace mapnik { namespace util {
return coord;
}
};
#else
template <typename Geometry>
struct get_type
{
template <typename T>
struct result { typedef int type; };
int operator() (Geometry const& geom) const
{
return static_cast<int>(geom.type());
}
};
template <typename T>
struct get_first
{
typedef T geometry_type;
template <typename U>
struct result { typedef typename geometry_type::value_type const type; };
typename geometry_type::value_type operator() (geometry_type const& geom) const
{
typename geometry_type::value_type coord;
geom.rewind(0);
std::get<0>(coord) = geom.vertex(&std::get<1>(coord),&std::get<2>(coord));
return coord;
}
};
#endif
template <typename T>
struct coordinate_policy : karma::real_policies<T>
{

View file

@ -46,6 +46,7 @@
#include <mapnik/simplify_converter.hpp>
#include <mapnik/noncopyable.hpp>
#include <mapnik/polygon_clipper.hpp>
#include <mapnik/value_types.hpp>
// agg
#include "agg_conv_clip_polygon.h"
@ -97,7 +98,7 @@ struct converter_traits<T,mapnik::smooth_tag>
static void setup(geometry_type & geom, Args const& args)
{
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
geom.smooth_value(get<double>(sym, keys::smooth));
geom.smooth_value(get<value_double>(sym, keys::smooth));
}
};
@ -111,8 +112,8 @@ struct converter_traits<T,mapnik::simplify_tag>
static void setup(geometry_type & geom, Args const& args)
{
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
geom.set_simplify_algorithm(static_cast<simplify_algorithm_e>(get<int>(sym,keys::simplify_algorithm)));
geom.set_simplify_tolerance(get<double>(sym, keys::simplify_tolerance));
geom.set_simplify_algorithm(static_cast<simplify_algorithm_e>(get<value_integer>(sym,keys::simplify_algorithm)));
geom.set_simplify_tolerance(get<value_double>(sym, keys::simplify_tolerance));
}
};
@ -165,8 +166,8 @@ struct converter_traits<T, mapnik::stroke_tag>
{
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
set_join_caps(sym, geom);
double miterlimit = get<double>(sym, keys::stroke_miterlimit, 4.0);
double width = get<double>(sym, keys::stroke_width, 1.0);
double miterlimit = get<value_double>(sym, keys::stroke_miterlimit, 4.0);
double width = get<value_double>(sym, keys::stroke_width, 1.0);
geom.generator().miter_limit(miterlimit);
double scale_factor = boost::fusion::at_c<6>(args);
geom.generator().width(width * scale_factor);
@ -244,7 +245,7 @@ struct converter_traits<T,mapnik::offset_transform_tag>
static void setup(geometry_type & geom, Args const& args)
{
typename boost::mpl::at<Args,boost::mpl::int_<2> >::type sym = boost::fusion::at_c<2>(args);
double offset = get<double>(sym, keys::offset);
double offset = get<value_double>(sym, keys::offset);
double scale_factor = boost::fusion::at_c<6>(args);
geom.set_offset(offset * scale_factor);
}
@ -389,7 +390,6 @@ struct vertex_converter : private mapnik::noncopyable
disp_.vec_[index]=0;
}
detail::dispatcher<args_type,conv_types> disp_;
};

View file

@ -24,6 +24,7 @@
#define MAPNIK_WEBP_IO_HPP
// mapnik
#include <mapnik/image_data.hpp>
#include <mapnik/util/conversions.hpp>
// webp

View file

@ -44,11 +44,7 @@ namespace mapnik { namespace wkt {
struct push_vertex
{
#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
template <typename T>
#else
template <typename T0,typename T1, typename T2, typename T3>
#endif
struct result
{
typedef void type;
@ -233,7 +229,6 @@ struct wkt_collection_grammar : qi::grammar<Iterator, boost::ptr_vector<mapnik::
{
qi::lit_type lit;
qi::no_case_type no_case;
using boost::phoenix::push_back;
start = wkt | no_case[lit("GEOMETRYCOLLECTION")]
>> (lit("(") >> wkt % lit(",") >> lit(")"));
}

View file

@ -68,7 +68,7 @@ ogr_featureset::ogr_featureset(mapnik::context_ptr const& ctx,
layer_(layer),
layerdef_(layer.GetLayerDefn()),
tr_(new transcoder(encoding)),
fidcolumn_(layer_.GetFIDColumn()),
fidcolumn_(layer_.GetFIDColumn()), // TODO - unused
count_(0)
{
layer_.SetSpatialFilterRect (extent.minx(),
@ -83,6 +83,13 @@ ogr_featureset::~ogr_featureset()
feature_ptr ogr_featureset::next()
{
if (count_ == 0)
{
// Reset the layer reading on the first feature read
// this is a hack, but needed due to https://github.com/mapnik/mapnik/issues/2048
// Proper solution is to avoid storing layer state in featureset
layer_.ResetReading();
}
OGRFeature *poFeature;
while ((poFeature = layer_.GetNextFeature()) != nullptr)
{

View file

@ -31,8 +31,7 @@
#include <mapnik/feature.hpp>
#include <mapnik/feature_factory.hpp>
// boost
#include <cstring>
using mapnik::coord2d;
using mapnik::box2d;
@ -122,7 +121,7 @@ feature_ptr rasterlite_featureset::get_feature(mapnik::query const& q)
unsigned char* raster_data = static_cast<unsigned char*>(raster);
unsigned char* image_data = image.getBytes();
memcpy (image_data, raster_data, size);
std::memcpy(image_data, raster_data, size);
feature->set_raster(rasterp);

View file

@ -38,6 +38,7 @@
// stl
#include <string>
#include <cstring>
#include <stdexcept>
dbf_file::dbf_file()
@ -223,7 +224,7 @@ void dbf_file::read_header()
skip(22);
std::streampos offset=0;
char name[11];
memset(&name,0,11);
std::memset(&name,0,11);
fields_.reserve(num_fields_);
for (int i=0;i<num_fields_;++i)
{

View file

@ -165,8 +165,7 @@ void datasource_cache::register_datasources(std::string const& str)
#ifdef MAPNIK_THREADSAFE
mapnik::scoped_lock lock(mutex_);
#endif
// TODO - only push unique paths
plugin_directories_.push_back(str);
plugin_directories_.insert(str);
if (mapnik::util::exists(str) && mapnik::util::is_directory(str))
{
boost::filesystem::directory_iterator end_itr;
@ -194,9 +193,15 @@ void datasource_cache::register_datasources(std::string const& str)
bool datasource_cache::register_datasource(std::string const& filename)
{
bool success = false;
try
{
if (!mapnik::util::exists(filename))
{
MAPNIK_LOG_ERROR(datasource_cache)
<< "Cannot load '"
<< filename << "' (plugin does not exist)";
return false;
}
std::shared_ptr<PluginInfo> plugin = std::make_shared<PluginInfo>(filename,"datasource_name");
if (plugin->valid())
{
@ -208,11 +213,13 @@ bool datasource_cache::register_datasource(std::string const& filename)
}
else
{
plugins_.insert(std::make_pair(plugin->name(),plugin));
MAPNIK_LOG_DEBUG(datasource_cache)
<< "datasource_cache: Registered="
<< plugin->name();
success = true;
if (plugins_.insert(std::make_pair(plugin->name(),plugin)).second)
{
MAPNIK_LOG_ERROR(datasource_cache)
<< "datasource_cache: Registered="
<< plugin->name();
return true;
}
}
}
else
@ -228,7 +235,7 @@ bool datasource_cache::register_datasource(std::string const& filename)
<< "Exception caught while loading plugin library: "
<< filename << " (" << ex.what() << ")";
}
return success;
return false;
}
}

View file

@ -35,6 +35,7 @@ extern "C"
#include <boost/iostreams/stream.hpp>
// stl
#include <cstring>
#include <memory>
namespace mapnik
@ -158,7 +159,7 @@ template <typename T>
void png_reader<T>::init()
{
png_byte header[8];
memset(header,0,8);
std::memset(header,0,8);
stream_.read(reinterpret_cast<char*>(header),8);
if ( stream_.gcount() != 8)
{

View file

@ -128,14 +128,70 @@ vertex_cache & vertex_cache::get_offseted(double offset, double region_width)
}
offseted_line->reset();
offseted_line->next_subpath(); //TODO: Multiple subpath support
double seek = (position_ + region_width/2.) * offseted_line->length() / length() - region_width/2.;
if (seek < 0) seek = 0;
if (seek > offseted_line->length()) seek = offseted_line->length();
// find the point on the offset line closest to the current position,
// which we'll use to make the offset line aligned to this one.
double seek = offseted_line->position_closest_to(current_position_);
offseted_line->move(seek);
offseted_lines_[offset] = offseted_line;
return *offseted_line;
}
inline double dist_sq(pixel_position const &d) {
return d.x*d.x + d.y*d.y;
}
double vertex_cache::position_closest_to(pixel_position const &target_pos)
{
bool first = true;
pixel_position old_pos, new_pos;
double lin_pos = 0.0, min_pos = 0.0, min_dist_sq = std::numeric_limits<double>::max();
// find closest approach of each individual segment to the
// target position. would be good if there were some kind
// of prior, or fast test to avoid calculating on each
// segment, but i can't think of one.
for (segment const &seg : current_subpath_->vector) {
if (first) {
old_pos = seg.pos;
min_pos = lin_pos;
min_dist_sq = dist_sq(target_pos - old_pos);
first = false;
} else {
new_pos = seg.pos;
pixel_position d = new_pos - old_pos;
if ((d.x != 0.0) || (d.y != 0)) {
pixel_position c = target_pos - old_pos;
double t = (c.x * d.x + c.y * d.y) / dist_sq(d);
if ((t >= 0.0) && (t <= 1.0)) {
pixel_position pt = (d * t) + old_pos;
double pt_dist_sq = dist_sq(target_pos - pt);
if (pt_dist_sq < min_dist_sq) {
min_dist_sq = pt_dist_sq;
min_pos = lin_pos + seg.length * t;
}
}
}
old_pos = new_pos;
lin_pos += seg.length;
double end_dist_sq = dist_sq(target_pos - old_pos);
if (end_dist_sq < min_dist_sq) {
min_dist_sq = end_dist_sq;
min_pos = lin_pos;
}
}
}
return min_pos;
}
bool vertex_cache::forward(double length)
{
if (length < 0)

View file

@ -1,6 +1,7 @@
#include <boost/detail/lightweight_test.hpp>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <vector>
@ -32,7 +33,7 @@ color blend(color const& source, color const& dest, unsigned cover=255)
dest_pre.premultiply();
unsigned char* buffer = new unsigned char[size*size*stride];
memset(buffer, 0, size*size*stride);
std::memset(buffer, 0, size*size*stride);
buffer[0] = dest_pre.r;
buffer[1] = dest_pre.g;
buffer[2] = dest_pre.b;
@ -62,7 +63,7 @@ color normal_blend(color const& source, color const& dest, unsigned cover=255)
dest_pre.premultiply();
// source buffer
unsigned char* source_buffer = new unsigned char[size*size*stride];
memset(source_buffer, 0, size*size*stride);
std::memset(source_buffer, 0, size*size*stride);
source_buffer[0] = source_pre.r;
source_buffer[1] = source_pre.g;
source_buffer[2] = source_pre.b;
@ -72,7 +73,7 @@ color normal_blend(color const& source, color const& dest, unsigned cover=255)
// destination buffer
unsigned char* dest_buffer = new unsigned char[size*size*stride];
memset(dest_buffer, 0, size*size*stride);
std::memset(dest_buffer, 0, size*size*stride);
dest_buffer[0] = dest_pre.r;
dest_buffer[1] = dest_pre.g;
dest_buffer[2] = dest_pre.b;

View file

@ -0,0 +1,236 @@
// mapnik
#include <mapnik/coord.hpp>
#include <mapnik/text/vertex_cache.hpp>
// boost
#include <boost/detail/lightweight_test.hpp>
#include <boost/version.hpp>
// stl
#include <stdexcept>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
// test
#include "utils.hpp"
struct fake_path
{
typedef boost::tuple<double, double, unsigned> coord_type;
typedef std::vector<coord_type> cont_type;
cont_type vertices_;
cont_type::iterator itr_;
fake_path(std::initializer_list<double> l)
: fake_path(l.begin(), l.size()) {
}
fake_path(std::vector<double> const &v)
: fake_path(v.begin(), v.size()) {
}
template <typename Itr>
fake_path(Itr itr, size_t sz) {
size_t num_coords = sz >> 1;
vertices_.reserve(num_coords);
for (size_t i = 0; i < num_coords; ++i) {
double x = *itr++;
double y = *itr++;
unsigned cmd = (i == 0) ? agg::path_cmd_move_to : agg::path_cmd_line_to;
vertices_.push_back(boost::make_tuple(x, y, cmd));
}
itr_ = vertices_.begin();
}
unsigned vertex(double *x, double *y) {
if (itr_ == vertices_.end()) {
return agg::path_cmd_stop;
}
*x = itr_->get<0>();
*y = itr_->get<1>();
unsigned cmd = itr_->get<2>();
++itr_;
return cmd;
}
void rewind(unsigned) {
itr_ = vertices_.begin();
}
};
double dist(mapnik::pixel_position const &a,
mapnik::pixel_position const &b)
{
mapnik::pixel_position d = a - b;
return std::sqrt(d.x*d.x + d.y*d.y);
}
namespace boost { namespace detail {
template<class T, class U>
inline void test_leq_impl(char const * expr1, char const * expr2,
char const * file, int line, char const * function,
T const & t, U const & u)
{
if( t > u )
{
BOOST_LIGHTWEIGHT_TEST_OSTREAM
<< file << "(" << line << "): test '" << expr1 << " == " << expr2
<< "' failed in function '" << function << "': "
<< "'" << t << "' > '" << u << "'" << std::endl;
++test_errors();
}
}
} }
#define BOOST_TEST_LEQ(expr1,expr2) ( ::boost::detail::test_leq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
void test_simple_segment(double const &offset)
{
const double dx = 0.01;
fake_path path = {0, 0, 1, 0}, off_path = {0, offset, 1, offset};
mapnik::vertex_cache vc(path), off_vc(off_path);
vc.reset(); vc.next_subpath();
off_vc.reset(); off_vc.next_subpath();
while (vc.move(dx)) {
double pos = vc.linear_position();
double off_pos = off_vc.position_closest_to(vc.current_position());
BOOST_TEST_LEQ(std::abs(pos - off_pos), 1.0e-6);
}
}
void test_straight_line(double const &offset) {
const double dx = 0.01;
fake_path path = {0, 0, 0.1, 0, 0.9, 0, 1, 0},
off_path = {0, offset, 0.4, offset, 0.6, offset, 1, offset};
mapnik::vertex_cache vc(path), off_vc(off_path);
vc.reset(); vc.next_subpath();
off_vc.reset(); off_vc.next_subpath();
while (vc.move(dx)) {
double pos = vc.linear_position();
double off_pos = off_vc.position_closest_to(vc.current_position());
BOOST_TEST_LEQ(std::abs(pos - off_pos), 1.0e-6);
}
}
void test_offset_curve(double const &offset) {
const double dx = 0.01;
const double r = (1.0 + offset);
std::vector<double> pos, off_pos;
const size_t max_i = 1000;
for (size_t i = 0; i <= max_i; ++i) {
double x = M_PI * double(i) / max_i;
pos.push_back(-std::cos(x)); pos.push_back(std::sin(x));
off_pos.push_back(-r * std::cos(x)); off_pos.push_back(r * std::sin(x));
}
fake_path path(pos), off_path(off_pos);
mapnik::vertex_cache vc(path), off_vc(off_path);
vc.reset(); vc.next_subpath();
off_vc.reset(); off_vc.next_subpath();
while (vc.move(dx)) {
double pos = vc.linear_position();
double off_pos = off_vc.position_closest_to(vc.current_position());
{
mapnik::vertex_cache::scoped_state s(off_vc);
off_vc.move(off_pos);
BOOST_TEST_LEQ(dist(vc.current_position(), off_vc.current_position()), (1.001 * offset));
}
BOOST_TEST_LEQ(std::abs((pos / vc.length()) - (off_pos / off_vc.length())), 1.0e-3);
}
}
void test_s_shaped_curve(double const &offset) {
const double dx = 0.01;
const double r = (1.0 + offset);
const double r2 = (1.0 - offset);
std::vector<double> pos, off_pos;
const size_t max_i = 1000;
for (size_t i = 0; i <= max_i; ++i) {
double x = M_PI * double(i) / max_i;
pos.push_back(-std::cos(x) - 1); pos.push_back(std::sin(x));
off_pos.push_back(-r * std::cos(x) - 1); off_pos.push_back(r * std::sin(x));
}
for (size_t i = 0; i <= max_i; ++i) {
double x = M_PI * double(i) / max_i;
pos.push_back(-std::cos(x) + 1); pos.push_back(-std::sin(x));
off_pos.push_back(-r2 * std::cos(x) + 1); off_pos.push_back(-r2 * std::sin(x));
}
fake_path path(pos), off_path(off_pos);
mapnik::vertex_cache vc(path), off_vc(off_path);
vc.reset(); vc.next_subpath();
off_vc.reset(); off_vc.next_subpath();
while (vc.move(dx)) {
double off_pos = off_vc.position_closest_to(vc.current_position());
{
mapnik::vertex_cache::scoped_state s(off_vc);
off_vc.move(off_pos);
BOOST_TEST_LEQ(dist(vc.current_position(), off_vc.current_position()), (1.002 * offset));
}
}
}
int main(int argc, char** argv)
{
std::vector<std::string> args;
for (int i=1;i<argc;++i)
{
args.push_back(argv[i]);
}
bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
try {
BOOST_TEST(set_working_dir(args));
std::vector<double> offsets = { 0.01, 0.02, 0.1, 0.2 };
for (double offset : offsets) {
// test simple straight line segment - should be easy to
// find the correspondance here.
test_simple_segment(offset);
// test straight line consisting of more than one segment.
test_straight_line(offset);
// test an offset outer curve
test_offset_curve(offset);
// test an offset along an S-shaped curve, which is harder
// because the positions along the offset are no longer
// linearly related to the positions along the original
// curve.
test_s_shaped_curve(offset);
}
}
catch (std::exception const& ex)
{
std::cerr << ex.what() << "\n";
}
if (!::boost::detail::test_errors())
{
if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
else std::clog << "C++ line offset: \x1b[1;32m✓ \x1b[0m\n";
::boost::detail::report_errors_remind().called_report_errors_function = true;
}
else
{
return ::boost::report_errors();
}
}

View file

@ -33,9 +33,7 @@ int main(int argc, char** argv)
if (!::boost::detail::test_errors()) {
if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
else std::clog << "C++ exceptions: \x1b[1;32m✓ \x1b[0m\n";
#if BOOST_VERSION >= 104600
::boost::detail::report_errors_remind().called_report_errors_function = true;
#endif
} else {
return ::boost::report_errors();
}

View file

@ -30,38 +30,38 @@
" ",
" ",
" ",
" !!! # ",
" !!! !!!!!! ## #### ",
" !!!!!!! !!!!!!!!! ! ####### ## ##### ",
" !!!!!!! !!!!!!!!!! !! ######## ############# ",
" !!! !!! !!!!!!!!!!! !! !!!! ### ### ######## ## ### $$$$$$ ",
" %% %%% !!!!! !! ! !!!!! ##### ## ## ##### $$ $$$ ",
" %% %%%%%% %% !!!! !! !!!!!!!! ##### # ######## $$ $$$$$$$ $ $ ",
" % %%%%%%%%%%%%%%%%% % %% !!!!! ! !! !! #### # ## ### $ $$$$$$ $$$$$$$$$$ $ ",
" % % %%%%%%%%%%%%%%% %%% % !!!! ! !!! ##### # # # $ $$$$$$$$$$ $$$$$$ $$$$ $ ",
" % %%%% %%% %%% %%% % !!! ! ! ##### # $$$$$$$ $$$$$$ $ ",
" % %%%%% %%%% !!! ! # # $$ $$$$$ $ ",
" %%%%% %%%%% % ! !! # # ## $ $$$$ $ ",
" % %%%% %%% % ! ! !!! # ### $ $$$ $ ",
" %%%% % % !!!! #### $ $ $ ",
" % %%% %% ! !! ! #### $$$$$ ",
" % %% &&&& & && %%%%% ''''' '''' '''''''' !!!! # (((((( (((( ((( ### $$$$$ )))))) )) ) )) $$$ $ ",
" % &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ! '''''''' '''' !!!! # (((((((((( (((( ### $$$$$ )))))))))) ))))))))))))))) ",
" % &&&&&&&& &&& %%%% !!! ' ' ! !! ( ( ## # $$$ ))))))))) ) $$$ $ ",
" % %%%% !!! !!! ### #### $$$ $$$ $ ",
" %%%%% !!! ! ! !! ### # ### $ $$$ $$ ",
" % % % !!! !! ## # # $$$ $$ $ ",
" % %%% %% % !!! ! !!! ! ### # # ### $ $$$$ $$$ $ ",
" % %%% %%%%%%% !!!! ! !!!!!! ### # # #### $ $$$$$$ $$$$$$$$ ",
" %%%%%%%% %%%%%%%% % !!! ! ! !!!! ### # # #### $ $ $$$$ $ $$$$$$ $ ",
" % %%%%%%%%%%%%%%%%%%%%%%% % !!!!! ! ! !!!! #### # ###### $ $$$$$$$$$$$$$$$$$ $$$$ $ ",
" % %%%%%% %%%%%% %%%% % !! !!! ! ! !! ###### # ## ## $$ $$$$$ $$$$$$$$$ $ $ ",
" %% %% %%%%%%% % %% !!! !!! !!! !! !! # ### ## ## ## ## $ $$$$$$ $$$ $$ ",
" %%% %%% !!!!!! !!!!!!! !! !!! ###### ######### # #### $$$$$ $$$$$ ",
" !!!!!! !! !!!!!!!! ###### ## ######## ",
" !!! !!!!!!!!! !!!! ## ########## #### ",
" !!!!!!!!! ! # ########## # ",
" !!!!!! ######### ",
" !! ## ",
" !! !!!!!!! # ####### ",
" !!!!!! !!!!!!!!! !!! ####### ############ ",
" !!!!!!!! !!!!!!!!! !!!! ######## ########## ### ",
" !! !!! !!!!!!!!!!! !!!!!!! ## #### ######## # ####### $$$$$$ ",
" %% %%% !!!! !! ! !!!!!! #### # ## ## ###### $$ $$$ ",
" %% %%%%%% %% !!!!!!! !! !! ##### # ## ## $$ $$ $$$$ $ ",
" % %%%%%%% %%%%%%%%% % %% !!!! ! !! #### # ### $ $$$$$$$ $$$ $ ",
" % %%%%%%%%%%%%%%%% %%% % !!!!!! ! ##### # # $ $$ $$$$$$$ $$$$ $ ",
" % %%% %%% %%% %%% % !!!!!! ! ! ##### # # $$$$$$ $ $$$$$$ $ ",
" % %%%%% %%%% !!!!! ! !!!! ### # ### $$$$$ $$$$$ $ ",
" %%%% %%%%% % ! !!!!! # # ##### $$ $$$$ $$$$ $ ",
" % %%%% %%% % ! ! !! # ## $ $$$$ $$$ $ ",
" %%%% % % ! !!! # ### $$$ $$ $ $ ",
" % %%% %%% ! !!!! # ### $$ $$$$$ ",
" % %% &&&& & && %%%%% ''''' '''' '''''''' ! !!! # (((((( (((( ((( ### $$$$$ )))))) )) ) )) $$$ $ ",
" % &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ! '''''''' '''' ! ! # (((((((((( (((( # $$$$$ )))))))))) ))))))))))))))) ",
" % &&&&&&&& &&& %%%% !!!! ' ' ! !!! ### ( ( # ### $$$ ))))))))) ) $$$ $ ",
" % %%%% !!! !!! ### # ### $$$ $$$ $ ",
" %%%%% !!! ! ! !!! ### # ### $ $$$ $ $$ ",
" % % % !!! !!! ### # ### $$$ $ $ ",
" % %%% %% % !!! ! ! !!! ### # # ### $ $$$$$ $$$ $ ",
" % %%% %%%%%%% !!!! ! ! !!!! #### # # ### $ $$$ $$ $$$$$$$$ ",
" % %%%%%% %%%%%%%% % !!!! ! ! !!!! #### # # #### $ $ $$$$ $ $$$$$$ $ ",
" % %%%%%%% %%%% %%%%%%%%% % !!! ! ! ! !!! ### # # ## #### $ $$$$$$$$$$$$$$$$$ $$$$ $ ",
" % %%%%%% %%%%%%%%%%% % !! !! ! ! !! ## ## # ## ## $$ $$$$$$$$$$$$$$$ $ $ ",
" %% %% %%%%%%% %% !!!! !!! !!! ### ## ## $ $$$$$$ $$$ $$ ",
" %%% %%% !!!!!!! !!!!!!! !! ####### ######### ### $$$$$ $$$$$ ",
" !!!!! !!! !!!!!!!! ##### ## ######## ",
" !! !!!!!!!!!! !!!!!! ### ######### ####### ",
" !!!!! !!!! !!! ########## #### ",
" !! !!! ######### ",
" ",
" ",
" ",

View file

@ -8,66 +8,66 @@
"5",
"16",
"6",
"11",
"10",
"12",
"3",
"2",
"13",
"14",
"3",
"11",
"15",
"1"
],
"data": {},
"grid": [
" !!!! ! !!! ! !!!!! ",
" !!! !!!!! ! !! ! ",
" ! !!! !! ! !!!!! !!! ! ! ",
" !!!!!!! !!!!! !! !!!!! ",
" ! !!!!! ! !!!! !!! ! ",
" !!!!!!!! !!!!!!! !!!!!!! !!! ",
" ! !! ! !!!!! ! ! !!!! ",
" !! !!!! !! !!! !! !!!!! ",
" !!!! ! !!! !!! !! ! ",
" !! !!! ! !!! ! !!!!!!! ",
" !!!!!! ! !!!!! !!! !!! ! !! ",
" !!!!!!!!!!!! !!!!!!! !!! !!!!!! !!!!!! ",
" !!!!!!!!!! !!!!!!!!! !!!!!!!! !!!! ",
" !!!! !!!!! !!!!! !!!!!!!!!!!!!!!!!!!!! ",
" !! # !!!!!!!!! # !!!!!!!!! !!!!!!!! ",
" #### !!!!!!! ### !!!!! $# !!!!!! ",
" ###### $$$$! ###### !!! ##$##$$$! ## %%% ",
" #######$#$ $!$######### ######$$$$####%%% ",
" #### ##$## ###########$ ##$#$$###$$####%%% ",
" &&&## $$#$#$#### ###$$##$$$$####%### %%% ",
" &&& $$$$$$$## ###$$$#$$ ####% %%%% ",
" &&& $$$$ $$####### #######$ $$$$$#%%%%%%%%% ",
" &&&$$$$$$$ ###$$# #$##### $$$$$$$%%% %%%%% ",
" &&$$$$$$$$$$#####$$##$$#$$##$$$$$$$$$%% %%%%% ",
" &&&$$$ $$$$$##$ $##$#$##$#$###$ $$$$$$ % %%% ",
" &&& $ $$$$$ ####$$$###$$##$ $$$%$ %%'%% ",
" &&& $$$ ## $$ ## #### %%%%%%'%% ",
" &&& &(( #((( (((### ((((( '''%'''%% ",
" &&&((&(&&( (((((( ())(((( (((((((''*''''*% ",
" &&((&&(((((((((((((()()))(((((((((((((** %%% ",
" &&&(&& &((((((( ((()))))(((((((( (((((* **%%**",
" &&& & &&(((( ++)((( ))((**((**********%**",
" &&& & &&(((,, +++--))).)))(.*(*(******** *%%*",
" &&& & ,,,,,, +++-)))).....(((*)******%%%**% ",
" &&& & ,&,,, +++))).......())(( %%%%%*%% ",
" &&& &,,,,,,, +++---)))))))(((()( % *%*%%% ",
" &&& ,,,,,//,,/,++----))))))(()))((( ***%%% ",
" &/&,/,,//,/,///++----))) (0000000 %%***%%% ",
" //////,/,,,/,,,/+---)))) 0000000 %%**%%%% ",
" ///,///,// , //---))) 0000000*%%%%%*%%% ",
" &// /////,,,, /// )))) ********%*%%*%%% ",
" &/& / /,/, /// )))) ***********%%%%% ",
" &&&/ //,, /// ))))))))))))) **** %%% ",
" //&////// /// )))))))))))) ** **** %%% ",
" &&& ///// //// ))))))))))) **** *%% ",
" / ///// ////// 111 * ** * ",
" /////////// 111111111111*** * ",
" /////////// 111111111111** * ",
" ///// //// 1111111111111 ",
" / /// /// 1 1111 ",
" / / /// 1 11 ",
" / /// 1 ",
" //// 1 1111 ",
" // 1111111 ",
" #### !!!!!!! ### !$$!! ## !!!!!! ",
" ####$$ $ !!! ###### $$$$$#$## !! ## %%% ",
" #####$##$$$$! ######### $ $$$##### ####%%% ",
" ####$##$## ##########$$ ###$$##########%%% ",
" &&&## $$$#$$$$#### ####$$$#$$$$ ####%### %%% ",
" &&& $$$$#$$$## #### #$$$$#$$ ####% %%%% ",
" &&& $$$$$$$$###$# # #$$##$#$ $$$$$#%%%%%%%%% ",
" &&&$$$$$$$ $##$$$ $$$$$$# $$$$$$$%%% %%%%% ",
" &&$$$$$$$$$$$$$$$$#$##$$$$$$$$$$$$$$$%% %%%%% ",
" &&&$$$ $$$$$$$$ $#######$$$$$$$ $$$$$$ % %%% ",
" &&& $ $$$$$ $##$$### $$$$$ $$$%$ %%'%% ",
" &&& $$$ $$ $ %%%%%%'%% ",
" &&& &(( (((( (((( ((((( '''%''')% ",
" &&&((&(&&( (((((( ((((((( (((((((''')''))% ",
" &&((&&(((((((((((((((((((((((((((((((( )))%)) ",
" &&&(&& &((((((( ((((((( ((((((( ((((( )) %)))",
" &&& & &&(((( **+((( (((()()()))))))) )%))",
" &&& & &&(((,, ***++-.......(())))))))))) ))%)",
" &&& & ,,,,,, ***-++......(((()/))))))%%%))%)",
" &&& & ,&,,, ++*-+++......(///( %%%%%)%) ",
" &&& &,,,,,,, *+*--+++////((((/(((( % )%)))) ",
" &&& ,,,,,++,,+,**+++-//////(/(((/ )))%%% ",
" &&&,,,,++,+,+++**-++-/// 0000000 %%)))%%% ",
" &&&,,,,+,,,+,,,+*-+-+/// 0000000 %%))%%%% ",
" &&&,,,+,++ , ++---/// 0000000)%%%%%)%%% ",
" &&& +++,,,, +++ //// ))))))))%)%%)%%% ",
" &&& +,+, +++ //// )))))))))))%%%%% ",
" &&& ++,, +++ ///////////// )))) %%% ",
" &&& ++++ +++ ////////////)) ))) %%% ",
" &&& ++++ ++++ / /////////// ) ))) %%% ",
" +++++ ++++++ // / 111) ",
" +++++++++++/ ///11111)))))) ",
" ++++++++ /// //111111))1))))) ",
" +++++++ // ///111111111111 ",
" ++++ ++ /// 1 1111 ",
" +++ ++ 1 11 ",
" +++ + + 1 ",
" ++++ ++++ 1 1111 ",
" + 1111111 ",
" ",
" "
]

View file

@ -8,8 +8,8 @@
"7",
"16",
"6",
"2",
"10",
"2",
"12",
"13",
"14",
@ -24,18 +24,18 @@
" ",
" ",
" ",
" ! ! !! ! ",
" !!!! ! ! !!! ! !!!! ",
" !!!! !! !!!!! !!!!! ! ! !!! ! ",
" !!!! ! ! !! ! !! !! !! ! !!! ! ",
" ! !!! !!!! ! !!! !!!!!! !!! !!!! ! ! ",
" !! !!!!!! !! !! ! !!!! !!!! ! !!! !!! !!! !!! ",
" !!! !!!!!!!!! !!! ! !!!!!!!!! !!! ! !!!!! !!!!!! !! ",
" ! !!!!!!!!!!!!!!!! ! !!!!!!!!!!! !! !!!!!!!! !!!! !!! ",
" !!!!!! !!!!!!! !! !!!!! !!!!!! !! !!!!!!!!!!! ! !!! !!!!! ",
" !!!!!! !!!!! !!! !!!!!! !!!!! !!!! !!!!!! !!!!!! !!!!!!!!!!!! ",
" !!!!! !!!!! ! !!!!!! !!!!!!! !!!!!! !!!!! ! ! !!!!! ",
" !!!! !!!!!! !!!!!! !!!!!!! !!!!! !!!!! !!!!!! ",
" !!! ! ",
" !!! ! !!! ! !! ",
" ! ! ! !! !! !! !! !!!! ",
" !!! ! ! ! ! !!!! !!!! !!! ! ",
" ! !!! !!!! ! !!!!!!! ! ! !!!! ! !! ",
" !!!! !!!!!! !! !!! ! !! !!!! !!!! ! !!!! ! !!! !! ",
" !!! !!!!!!!!! !!!! ! !!!!!!!! !!!!! !!!!! !!! !!! ! !!!! ",
" ! !!!!!!!!!!!! !!!! !!!!!!!!!!! ! !!! !!!!!!!! ! ! !!! ",
" !!!!!! !!!!!! !!! ! !!!!! !!!!!! !!! !! !!!!!!!!!!! !!! !!!!! ",
" !!!!!! !!!!! !!! !!! !!!!!! !!!!! !! ! !!!!!!! !!!!!! !!!!!!!!!! ",
" !!!!! !!!!! !!!!! !!!!!! !!!!!!! ! !!!!!! !!!!! !!!!! ",
" !!!! !!!!!!! !!!!!!! !!!!!! !!!!! !!!!! !!!!!! ",
" ! !!!!! !!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
" !!!!!!!!! !!!!!!!!! !!!!!!! ",
" # !!!!!!! # !!!!!! !!!!! ",
@ -46,15 +46,15 @@
" ###### ###### ###### ##### ###### ##### ###$$$$$$$$ ",
" ##### ###### ##### ###### ##### ###### #####$$ $$$$$ ",
" %%%%#### ##### ###### ###### ##### ###### ###### $$$ ",
" %%%% # & &&& #####&&&&##### & & ##### ###### #&######## $$ $$$ ",
" %%%% & & && ###&&#&&#### & ###########& #&###### $$ $$$$ ",
" %%%% & &&#&#&### &&& ##&#####&& & &&& &&### $$$$$ $$$ ",
" %%%% &&&&& & &&#&&# &&& ##&##&&& &&& && &&&& $ $$ $$$ ",
" %%%%%% &&&&&&&& &&## & && &## && && &&&&&& $$$$$ ",
" %%%%% &&&& && &&&#&&&&& &&& &&&&&& & &&&&&&&&&& && $$$ ",
" %%%%%% &&&&&&&&& &&& &&&&&&&& && &&& &&&&&&&& && & &&&&&&&&&&& $$$ ",
" %%%%%% &%&&&&&&& &&& &&&&&&&&&&& &&&&&&&&&&&&&& &&& &&&&&&&&&&&& $$$ ",
" %%%%%%&&&&&&&&&&& &&&&&&& &&&&&& &&&&&& &&&& && &&&&&& &&&& & $$$ ",
" %%%% # & ##### & ##### ##### ###### ########## $$ $$$ ",
" %%%% && & ####&&###### & ######&#### ######## $$ $$$$ ",
" %%%% & && #&&&##### &&&& & ####&&&# & ##### $$$$$ $$$ ",
" %%%% &&&& &&& &&###&&& &&&&& ####&&&&& ## ## $ $$ $$$ ",
" %%%%%% & & && && & &&&&& &&&&& #&#& & &&## ###### $$$$$ ",
" %%%%% &&&& && &&&&#&&&&& &&& &&&&&& && && &&&&&### # $$$ ",
" %%%%%% &&&&&&&&&& &&& &&&&&&&& && &&& &&&&&&&& && &&&&&&&&&&&&##### $$$ ",
" %%%%%% &%&&&&&&& & & &&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&&&&&## # $$$ ",
" %%%%%%&&&&&&&&&&& &&&&&& &&&&&& &&&&&& &&&&& &&&&&&&& &&&& # & $$$ ",
" %%%%%%%%%& &&&& &&&&&& &&&& &&&&& &&&& &&&&& &&&&&&&&& $$$ ",
" %%%%%%&%% &&&&&&&&&& &&&&&&&&&& &&&&&&&&&& &&&&&&&& $$$ ",
" %%%%%%%% &&&&&&&&& &&&&&&&& &&&&&&&& &&&&&& $$$ ",
@ -65,49 +65,49 @@
" %%%% ''''''''''''$$$$$ ",
" %%%% (( ((((( ((((( ((((((( '''''''''$'''$$$$ ",
" %%%% ((((((( (((((((( (((((((( ((((((((( ''''''''$$$'$$$$$ ",
" %%%% ((((((((( (((((((((( ((((((((((( ((((((((((( ''''' ' $ $$$ ",
" %%%% %(((((((((( (((((( (((( (((((( ((((( (((((( (((( ''' ''' $$$ ",
" %%%%%%(((( ( ((((( (((((( (( (((( ((((( ((((( ((((( (((( (( '' ''$$ ",
" %%%%%%((% (((((((( ((((((((( ( ((((((((((( ( (((((((((( ((((((((( '''' ''$$$ ",
" %%%%%%( (( ((((((((((((( ((((((((( (( (((((((( (((((((((( ' ' '$$$ ",
" %%%%%% % ( (((((((())( (((((((((( ( ((((( (*** (( (((( $$$ ",
" %%%%% %%% ( (((( ))))(( ((++ (((((( (( ( ( ((((*********(*(***** $$$$$$ ",
" %%%%%%%%% ((( ( )))))((((((++ ,,,( (( (( ( *((*****(*((((****** $$$$$$$$ ",
" %%%% %% ((( )))))) ( +(( ,,, ((((------------ (**(*****((***********$$ $$$$$ ",
" %%% %% ( (( ()))) ((+ ,,, ((------------((((( (((((((((***** $$$ ",
" %%% ())))) +++ ,,, (------------((-( ((((( **$$ $$$ ",
" %%% ))())) ..++ ,,, ////////////// **$$ $$$$ ",
" %%% ))))) ..... ,,/// ////////////////////// $$$$$ $$$ ",
" %%% )))))))) .+... ,//, / /////////////////////// *$*$$ $$$ ",
" %%% )))))) )) ) ....++..,/// //////////////////////// *** $$$$$ ",
" %%% ))))) ))).)..... ..+...,,/ //// *** $$$ ",
" %%% )))))) ))).)))........ ..+ /,, / /// *** $$$ ",
" %%% )).)) ) ..)..............+ ,/, ///// *** $$$ ",
" %%% )).)) .)))). .......+.++,// / /// 000000000000000 *** $$$ ",
" %%%)))).. .. ))).. ...+++,,,,// /// 000000000000000 **** $$$ ",
" %%% ))). . ..).. .... ,,,,// /// 000000000000000 **** $$$ ",
" %%% )). . ..... ....,,,, /// *** $$$ ",
" %%% .. . .... .....,, /// **** ****$ $$$$ ",
" %%% .. ..... .... /// *********************$$$$$$$$$ ",
" %%% . ... ... /// *********************$$$ $$$$$ ",
" %%% . ... ... /// ********************* $ $$$$$ ",
" %%% .. ... ... //// **** * $$$$$ ",
" %%% .... ... ///// ** * $ $$$$$ ",
" %%% .... ... /////////////////////// $$$$$$$$$ ",
" %%% .... .... /////////////////////* ****** $ $$$ ",
" %%% .... ....... ////////////////////*** **** $$$ ",
" %%% .... ... ... // ////////////////// $$$ ",
" .... ..... . ////// / /// $$$ ",
" .... ....... .. // / / /// / /// ",
" .... ......... . // // /// / ",
" .......... ..... . . .. ////// /////1/1/111111111111 ",
" . .............. . ... ////11111//111//111111111111 ",
" . ............ ... 11111111111111111111111111 ",
" . .... .... . 11111111111111111111 ",
" .. ... . 1111 11 ",
" ... 111 11 ",
" ..... 11 1 11 ",
" ..... 111 11111 ",
" %%%% ((((((((( (((((((((( ((((((((((( ((((((((((( ) ) $ $$$ ",
" %%%% %(((((((((( (((((( (((( (((((( ((((( ((((((( (((( ))))) ) $$$ ",
" %%%%%%(((( ((((( (((((( ( (((( ((((( ((((( ((((( ( ( (((( )))))) $$$ ",
" %%%%%%((% (((((( ((((((((( ( (((((((((( ( (((((((((( ( ((((()))(( $$$ ",
" %%%%%%( ( (((((((((((((( (((((((((((( (((((((( (((()))(( ) $$$ ",
" %%%%%% % ((((((((((**( (((((((((( (( ((((( ))) (( (( ()(() ) )) $$$ ",
" %%%%% %%%((( ((((((( ****(((((++ (( ((( ((( (( (( ( ))(((())())))))))) ) $$$$$$ ",
" %%%%%%%%%((( (( ****(*((((((+ ,,(, (( ( (((( )((()))(())))))))))) $$$$$$$$ ",
" %%%% %% ((( ( ******(( (((+ ,,, ((------(((--((- ))()))(()))))))))))))$$ $$$$$ ",
" %%% %% (( ***** +++ ,,,( (-------(((((-( ))))) $$$ ",
" %%% (((***** +++ ,,, (---------((((--( ))$$ $$$ ",
" %%% ****** ++. ,,, , ////////////// ))$$ $$$$ ",
" %%% ***** .+++ ,,,,,,,,///////////////////// $$$$$ $$$ ",
" %%% ******** .. +....,,,, , ,,///////////////////// )$)$$ $$$ ",
" %%% ****** ** * ....++..,,,,, ,,,//////////////////// ))) $$$$$ ",
" %%% ***** ***.*..... .+...,, ,,/,,/ ))) $$$ ",
" %%% ****** ***.***........ +.+..,, , ,// ))) $$$ ",
" %%% ***** * ..*............+.. ,,, , ,,/ ))) $$$ ",
" %%% *****. .****. .......+.+.,,,,, ,,/ 000000000000000 ))) $$$ ",
" %%%*****. .. ***.. ...+++,,,, /,/ 000000000000000 )))) $$$ ",
" %%% **.. . ..*.. .... ,,,, /// 000000000000000 )))) $$$ ",
" %%% ** . . ..... ....,,,, /// ))) $$$ ",
" %%% . . .... .....,,/ /// )))) ))))$ $$$$ ",
" %%% . .... .... //// /// )))))))))))))))))))))$$$$$$$$$ ",
" %%% . . ... ... / ///// )))))))))))))))))))))$$$ $$$$$ ",
" %%% ... ... ... // ///// ))))))))))))))))))))) $ $$$$$ ",
" %%% .. ... ... // ///// )) )))) )) ) $$$$$ ",
" %%% .... ... // / ///// ) ) )) )))))) $ $$$$$ ",
" %%% .... ... / ////////////////////))//// $$$$$$$$$ ",
" %%% .... .... / // ////////////////)))))) )) )))) ) )) $ $$$ ",
" %%% .... .... // /////////////////)))/))) ) ))) $$$ ",
" %%% .... ... .. ////////////////// $$$ ",
" .... .... .. //// // $$$ ",
" .... ........ . /// // ",
" ..... ......... . // // ",
" . .......... ......... .. ///111///11111111111 ",
" .. . .............. . .. 111111/11/11///11111111111 ",
" . .. ............ .. . 11111111111111111111111111 ",
" ... .. . .... ... 11111111111111111111 ",
" .. .. . 1111 11 ",
" . ... 111 11 ",
" . .. 11 1 11 ",
" 111 11111 ",
" 1 111111 ",
" ",
" ",

View file

@ -8,9 +8,9 @@
"7",
"16",
"6",
"10",
"2",
"12",
"10",
"13",
"14",
"11",
@ -26,25 +26,25 @@
" ",
" ",
" ",
" ! ",
" ! !!! ",
" !!! !! !! ! ",
" ! ! !!! !! ! ",
" !! !! ! !! ! !!! ",
" !!!! ! !!! !!!!! ! !!! ! ",
" !!! !! !!!! ! ! !!! !!! ! ! ! !!!!! ",
" ! ! ! !!!!! ! !!! ! !!!! !!!! ! ! !!!! !! ",
" ! ! !!!!!!!!! !!!! ! !!!!! ! ! ! !! ! ! ",
" !!!! !!!!!!!!!!!!!!! !!! !!!!!!! ! ! ! !!!!!! !! !!!!! ! ",
" ! ! !!!!!! !!!!! ! !! ! !!!!!!!!!! !! !! !!! !!!!!!!! ! !!! !!! !!! !! ",
" !!!!!!!!!!! !!!!! !! ! ! !!!!! !!!!!!!!! !! ! !!!!!!!!!!! !! !! ! !!!!!!!! ",
" !!! !!!!!! !!!!!!!!! !!!!!!! !!!!!! !!!!!!!!!! ! !! ! !!!!!! !!!!! ! !!!!!!!!!!! ",
" ! !!!!!! !!!!! !!! !!! !!! !!!!!! !!!!! !!! !!! ! ! !!!!! !!!!!! ! ! !! !!!!! ",
" !!!!!!! !!!!! ! ! !! !!!!!! !!!!! !!! ! ! !!!!!! !!!!!!!!! ! !!!!!!! ",
" !!!!!! !!!!! ! !! !!! !!!!!! !!!!!! !!!! !!!!!! !!!!! ! !! !!!!!!! ",
" !!!!! !!!!!!! !!! !!!!! !!!!!! !!! !!!!! !!!!! !! !!!!! ",
" !!! !!!!! !!!!!!! !!!!! ! !!!!!! !!!!!! !!!!!! ",
" !!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
" ",
" ",
" ! ",
" ! !!!! !! ",
" ! ! ! ! ! ! ",
" !! ! !! ! !!! !!!!! ",
" !! ! !!! !! !!!!! !!! !! ",
" !!! ! !!!!! ! !!! !! !! !!! !!!!! ! !!!! ! ",
" ! !! !! !!!!!!!! !! !!!! !!!!! ! !! !! ! ! !!!! !! ",
" !! !!! !!!!!!!!!!!!! !!! !! !!!!!!!!! !!!!! !!!!! !!!! !! ! ! !! ",
" ! !!! ! !!!!!! !!!!! !! ! ! !!!!!!!!!!!! ! !! !!! !!!!!!!!! !!! !! ",
" ! ! !!!!!! !!!!! ! ! !!! !!!!! !!!!!! !!! !! !!!!!!!!!!!!!! ! ! !! !!!!!! ",
" ! ! !!!!!! !!!!!! ! ! ! ! !!!!!!!! !!!!!! !!! ! !!!!!!!!!!! !!!!! ! ! !!! !!!!!! ",
" !!!!!! !!!!! ! !!! ! !!!! !!!!!! !!!!! !!! !!!!! ! !! !!!!! !!!!!! ! !!! ! !!!!! ",
" !!!!!!! !!!!! !! !! ! !!!!!! !!!!! !!! !!! ! !!!!!!! !!!!!! !! ! !!!!!! ",
" !!!!!! !!!!! !! ! !!!!!! !!!!!!!!!! !!!!!!! !!!!! !!! !! !!!!!! ",
" !!!!! !!!!!! ! ! !!!!! !!!!!!!!!!! !!!!! !!!!! ! !! !!!!! ",
" !!! !!!!! !!!! !!!!!! !!!!! !!! !!!!!! !!!!!! !!!!!!!! ",
" !!!!! !! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
" !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!! ",
" !!!!!!!!!!! !!!!!!!!! !!!!!!!! ",
" !!!!!!! !!!!!! !!!!! ",
@ -52,29 +52,29 @@
" ##### !!! #### ! # $$$$ ",
" ######## ###### ### $$$$ ",
" ########## ######### ##### ## $$$$ ",
" ###### ###### ###### ##### ######### ####$ $$$$ ",
" ###### ###### ######## ##### ########### #####$ $ $$$$ ",
" ###### ##### ###### ########### ##### ##### ######$$$$$$$$$ ",
" ########### ##### ###### ######### ################ ##### $$ $$$$$$ ",
" ###### ### # # ## ###### ##### ## ##### ######## ## ##### ###### $ $$$$$$ ",
" ##### # #### ######### ###### ## ##### ##### ###### ###### $$$$$$ ",
" %%% ### ### ### ##### ###### ## ###### ##### # ## ###### ######### $$$$$ ",
" %%% #### ## # ##### ###### # ##### ###### # #### ##### ###### ### $$ $$$$$$ ",
" %%% ## ### # ###### ###### # ##### ###### # #### ############## # $$$$ ",
" %%% %% ## ##### ##### ## ###### ##### # & ############ #### $$$$ ",
" %%% %%%%% & ## ########### & ##&&###### & # &&& ##### # ## $$$$ ",
" %%%%% % & &&& & ### ##&&&#### & &&&& &#&&#### && & &&&& ## #### $$$$ ",
" %%%%% % && && ## #&&&##& && & &&&& &&&& &&& & ### $$$$ ",
" %%%%% %% &&& & &&&&#&#&& &&& &&&& &&&& && &&&& & && & && $$$$ ",
" %%% % %%% && & && &&& &&&& && &&& & & && && & & & &&&& &&&&& &&& $$$$$$ ",
" %%% %%% & && && & &&&&& &&&&& && & &&&&&&&&&&&&& &&& &&&&&&&&&&&&&& && $$$$$$$$$ ",
" %%%% % &&&&&&&& & & & & &&&&&&&&& && &&& &&&&&&&&&&&&&& &&& &&&&&&&&&&&&&& $$ $$$$$$ ",
" %%% &&&&&&&&&& && & &&&&&&&&&&&& & & &&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& $ $$$$ ",
" %%% &&&&&&&&&&&&& & &&&&&&& &&&&&&& &&&&&& &&&&&& & &&&&&& &&&&& & $$ $$$$ ",
" %%% &&&&&& &&&& && &&&&&& &&&& & &&&&&& &&&& &&& &&&&& &&&& & & $$ $$$$$ ",
" %%% &&&&& &&&&&&&& &&&&& &&&& && &&&&& &&&&&& &&&&& &&&& && & $$$$ $$$$ ",
" %%% &&&&& &&&&&&&& &&&&& &&&&& &&&&& &&&& & &&&&&& &&&& &&&& $$ $$$$ ",
" %%% &&& &&&&& &&&&&& &&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$$$ ",
" ###### ####### ###### ##### ######### ####$ $$$$ ",
" ###### ######### ############## ########### #####$ $ $$$$ ",
" ###### ########## ###### ########### ##### ##### ######$$$$$$$$$ ",
" ####### ###### ###### # # # ###### ##### ###### ##### $$ $$$$$$ ",
" ###### ## ## ###### ##### ##### ###### ##### ###### $ $$$$$$ ",
" ##### ## ## ###### ###### # ## ##### ##### ###### ###### $$$$$$ ",
" %%% ### ### ### ###### ###### ####### ###### ##### ## ###### ######### $$$$$ ",
" %%% # # ######## ######## # ### ##### ###### ## ######### ###### ## $$ $$$$$$ ",
" %%% # ######### ############ ##### ###### ### ### ############## ## $$$$ ",
" %%% %% ### ## ##### ##### ## ### ###### ##### & ### # ############ ## # $$$$ ",
" %%% %%%%% & & ### ### #######&### ## #### && ########## &&& ### # ##### # ## $$$$ ",
" %%%%% % & &&& #### # ###&&&### # #### &&&& & ####### &&&& # ## ## #### $$$$ ",
" %%%%% % &&& #### &##&&&#& # ## && & & && #### & &&& ## ### $$$$ ",
" %%%%% %% & & # &### & # # &&&&& ## &&&&& & # $$$$ ",
" %%% % %%% &&&&&& # && &&&&& & &&& & & && & &&&&& & & $$$$$$ ",
" %%% %%%&&&&& && & & & & &&&&& & & &&&&&&&&&&&&& &&& & &&& &&&&&&&&& &&& && $$$$$$$$$ ",
" %%%% % & &&&&&&&& & &&& & & &&&&&&&&& &&&&& & &&&&&&&&&&& &&&&& & &&&&&&&&&&& && &&& $$ $$$$$$ ",
" %%% &&&&&&&&&& & & &&&&&&&&&&&& & &&&& &&&&&&&&&&&&& &&& &&&&&&&&&&&&&&& && $ $$$$ ",
" %%% &&&&&&&&&&&&& && & &&&&&&& &&&&&&&& & & &&&&&& &&&&&&& && &&&&&& &&&&&& & $$ $$$$ ",
" %%% &&&&&& &&&&& & && &&&&&& &&&& &&& && &&&&&& &&&& && &&&& &&&&& &&&& &&& $$ $$$$$ ",
" %%% &&&&& &&&&&&&& & &&&&& &&&& &&&& &&&&& &&&& &&&& &&&&& &&&& & & $$$$ $$$$ ",
" %%% &&&&& &&&&&&&&&& &&&&& &&&&& & &&&&& &&&& &&&&&& &&&& &&&& $$ $$$$ ",
" %%% &&& &&&&& & &&&&&& &&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$$$ ",
" %%% & &&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
" %%% &&&&&&&&& &&&&&&&&& &&&&&&&& &&&&&& $$$$ ",
" %%%%% &&&&&&& &&&&&& &&& & $$$$ ",
@ -86,69 +86,69 @@
" %%%% %% '''''''''''''''''$$$$$$$$$ ",
" %%%%%% % '''''''''''''''''$$ $$$$$$ ",
" %%% ((( (((((( ((((((( '''''''''''''''''$' $$$$$$ ",
" %%% ((((((( (((((((( ((((((((( ((((((((((( ' ' $$$$$$ ",
" %%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( '''''' $ $$$$$ ",
" %%% ((((((((((((( ((((((((((((( (((((((( ((((( (((((( ((( (((( $$ $$$$$$ ",
" %%% ((((((( ((((( (((((( (((((( ((((( ((((( (((( ((((( ( (((( '' ' ' ' $ $$$$ ",
" %%% (((((((((( (((( (((((((((((( ((((( (((((( ((((( ((((( ((((( ((( (((( ( '''' $$$$ ",
" %%% ((((((( ( ( (((( ((((( ( ( (((( ((((( ( (((( (((((( ( ( ( ((((( ((( $$$$ ",
" %%%%% (((( ( ( (((( ((((( ( (( (((( ((((( ( ((((( (((((( ( (((( (((((((((((( $$$$ ",
" %%% %% %( ((((( (((((( (((((( (((((( ((((((((((( ( ((( (((((((((( ( ( ( (((((((((( $$$$ ",
" %%% %%%% (((( ( (((((((((((( ( ((( ((((((((( ( ( ( (((((((( (( ((((((( $$$$ ",
" %%%% %% ( ( ((((((((( )) (( (((((( (( ((((( ( ( (( ( $$$$$$$ ",
" %%% % %% (( (((((((( )))) *(* (( ( ( ( (( ((( +++++++ ((( ( $$$$$$$$$ ",
" %%% %% ( (( ))))) **** ( ((((( ( (((((( ++++++++++++++++++((+++++++ $$ $$$$$$ ",
" %%% % % ((( )))))) **** ( ,,,(( ( ((((+++++++++++++++++((+++((((+++ $$$$$$ ",
" %%% %%%% ((( ())))) *** ((,(( (( -- (( (( (( .++.++++++++++++(((+(+((++++++ $$ $$$$$$ ",
" %%% %% ( (((())) *** (((,(( -----.--....---(-((((- ....... ( ( +++++++++ $$ $$$$$ ",
" %%% (((((())) *** (,(, -----..-...----------- ...... +++++ $$$$ $$$$ ",
" %%% ))))))) ) *** ,,, -----.---------------- .. .. ++++ $ $$ $$$$ ",
" %%% ))))))) ) **** ,,, ...... .. ... ... ++++ $$$$$$ ",
" %%% )))))))) ))) **** ,,, ..... ... . . ... ++++ $$$ ",
" %%% ))))) ) ) ))) **** ,,, ........................ +++ $$$ ",
" %%% ))))) ) ) / /// *** ,,,, . ................................ +++ $$$ ",
" %%% %% )))))) ))) ///// *** ,,,, ... . ................................ +++ $$$ ",
" %%% %%%% ))))) ))) / / *** ,,,. . . .................... +++ $$$ ",
" %%% %%%%% )))))) / //// *** ,,, .. ...... +++ $$$ ",
" %%% % % )))))) //// /// **** ,,, .. ...... +++ $$$ ",
" %%% % %% ))))) /////////// // ///* ,,,.... ... +++ $$ $$$$ ",
" %%% % %% )))))) ///////////////// / */* ,,,,. .. ... +++$$$$$$$$$ ",
" %%% % % )))))) //////////////////////***//,,,, .. ... +++$$$ $ $$$ ",
" %%% %% ))))) ))) ) ////// //////// //*///,,,, ..... +++ $ $$$$$ ",
" %%% %% )))))))))))))) ///// //// ***///,, .... 00000000000000000000000 ++++ $$$$$ ",
" %%% )))))))) ) )))////// /////*/ //,, .... 00000000000000000000000 ++++ $ $$$$ ",
" %%% ))))) )))////// /////// ,,, ... 00000000000000000000000 +++ $$ $$$$$ ",
" %%% ))) ///// //// / /,,, ... 00 00 0 +++ $ $$$ ",
" %%% )) ))) //// //// ,,,, ... 000000 +++ $$$ ",
" %%% ) /// //// ,,,, ... ++++ $$$ ",
" %%% //// ///// ... 0000 0000 ++++ $$$ ",
" %%% % //// //// ... +++0+0+0+000++++++++++++++++++++++ $$$ ",
" %%% %% %% /// /// .... +++++++++++++++++++++++++++++++++ $$$ ",
" %%% % /// //// ....... +++++++++++++++++++++++++++++++++ $$$$$$ ",
" %%% %% /// /// ... ..... + + +++++++++++ $$$$$$$$ ",
" %%% %% %% /// /// .. . ... ++++++ +++++++ $$ $$$$$ ",
" %%% %% %% / /// /// .. . .... + ++++++ $$$$$$ ",
" %%% %% %% // ////// //// .. ....... ++++ + ++ $$ $$$$$ ",
" %%% % % / / ////// /// / // . ......... +++ + +++++ $$ $$$$ ",
" %%% /// /// ///// / / .. .. ...... +++ + $$$$ $$$ ",
" %%% // ////// ////// .. ............................... $ $$ $$$ ",
" %%% // ////// /// // / . .............................. $$$$$ ",
" %%% / // //// /// // / ............................ $$$ ",
" %%% // /// //// ///// / .. ... . ... . $$$ ",
" / //// //// / . ... . . . $$$ ",
" //// ///// / .. .. ",
" //// ////// ......... .... .... ",
" //// ////// .. ... . . ... ",
" %%% ((((((( (((((((( ((((((((( ((((((((((( ' '' $$$$$$ ",
" %%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( ' ''' '$ $$$$$ ",
" %%% ((((((((((((( ((((((((((((( ((((((( ((((( (((((((( (((( $$ $$$$$$ ",
" %%% ((((((( ( ((((( (((((( ( ( ((((( ((((( (( (((( ((((( ((( (((( '' '''' $ $$$$ ",
" %%% ((((( ((( (((( (((((( ((( ((((( (((((((((( ( ((((( ((((((((( (((( ( '''''' $$$$ ",
" %%% ((((( ((( (((( ((((((((( (((( ((((( ( ( (((( (((((((((( ( ((((( ((( $$$$ ",
" %%%%% (((( ( ( (((( ((((( ( (( (((( ((((( ( ( (( ((((( (((((( ( (((( ((((((())()))) $$$$ ",
" %%% %% %( (((( (((((( (((((( ( ((( ((((((((((( ((((( ( (((((((((( ( ( ((( (((((()()()) $$$$ ",
" %%% %%%% (( (((( ((((((((((( ((( ( ( ((((((((( ((( ( ( (((((((( ( ( (( (((())( $$$$ ",
" %%%% %% ((( ( ((((((((( ** (( (( (((((( ( ((((((( ( ( (( ()))))) ) $$$$$$$ ",
" %%% % %% ( ( (((((( **** +++( ((( ( ( (((( ))))))) ((( ( ((( ))) ))) $$$$$$$$$ ",
" %%% %% (((((((( ***** +++(( ( ((( ((( (( ))))))))))))((()))(())))))) $$ $$$$$$ ",
" %%% % % ((( ( ****** ++(+(( ((,,, ((( ( )))))))))))))(())())))))))))) $$$$$$ ",
" %%% %%%% ((( ***** +++( (( ((,,, -- ((((( . )..))))))))))(((()))))))))))) $$ $$$$$$ ",
" %%% %% ( (((***** +++ (( ((,,, ----.---...----------- .. .. ( ))))))))) $$ $$$$$ ",
" %%% ((((***** +++ ,,, -----.-.-...---------- . .... ))))) $$$$ $$$$ ",
" %%% ******* * +++ + ++,,, ------..--------------.. . )))) $ $$ $$$$ ",
" %%% ******* * +++++ +,,, ........ . .... )))) $$$$$$ ",
" %%% ******** *** ++++ + ++,,, ... ... ....... )))) $$$ ",
" %%% ***** * * *** / ++++++ ++,,, . ........................ ))) $$$ ",
" %%% ***** * * / /// +++++ ++,,, ................................ ))) $$$ ",
" %%% %% ****** *** /////// +++ +++,,,, . ................................ ))) $$$ ",
" %%% %%%% ***** *** / / +++ + ,,, .. . ................... ))) $$$ ",
" %%% %%%%% ****** ///// / +++ + ,,, .. ...... ))) $$$ ",
" %%% % % ****** //// ////// // ++++ ,,,.. ....... ))) $$$ ",
" %%% % %% ***** /////////// / +++/ ,,, .. . ... ))) $$ $$$$ ",
" %%% % %% ****** ///////////////// /+/// ,,,, . . ... )))$$$$$$$$$ ",
" %%% % % ****** //////////////////// //+// ,,,,.. .. ... )))$$$ $ $$$ ",
" %%% %% ***** *** * ////// //////// //++/ /,,,.. ...... ))) $ $$$$$ ",
" %%% %% ************** ///// //// //+ //,, ..... 00000000000000000000000 )))) $$$$$ ",
" %%% ******** * ***////// /////+/ /,, .... 00000000000000000000000 )))) $ $$$$ ",
" %%% ***** ***////// ///// / /,, ... 00000000000000000000000 ))) $$ $$$$$ ",
" %%% *** ///// //// ///,,, ... 00 00 0 ))) $ $$$ ",
" %%% ** *** //// ///// /,,, ... 000000 ))) $$$ ",
" %%% * /// //// ,,,, ... )))) $$$ ",
" %%% //// ///// ... 0000 0000 )))) $$$ ",
" %%% % //// //// ... )))0)0)0)000)))))))))))))))))))))) $$$ ",
" %%% %% %% /// /// .. ..... ))))))))))))))))))))))))))))))))) $$$ ",
" %%% % /// //// . ..... ))))))))))))))))))))))))))))))))))) $$$$$$ ",
" %%% %% /// /// . ... )) ) ))))))))))) ) ))) $$$$$$$$ ",
" %%% %% %% /// /// . .. ... )))) ) ))))) ) ))))))) $$ $$$$$ ",
" %%% %% %% / /// /// // .. ...... ) ))) ) ) )) $$$$$$ ",
" %%% %% %% / ////// //// // . . ..... )))) ) )) ))) ) )) )) $$ $$$$$ ",
" %%% % % //// //// ///// // ...... )) ))))) ) ) ) ))) ))))))) $$ $$$$ ",
" %%% / / /// ////// / .. . ...... ) ))) ) $$$$ $$$ ",
" %%% / ////// //// / / . ............................... $ $$ $$$ ",
" %%% / ////// //// / .............................. $$$$$ ",
" %%% // //// /// // ............................ $$$ ",
" %%% / /// //// /// / / . .... . .... $$$ ",
" / //// //// // . . .. . .... $$$ ",
" //// ///// . ",
" //// ////// ...... . . ..... ",
" //// ////// .... ....... ",
" ///// ///// ",
" //////// ////// ",
" ///////////// /////// 11111111111111111111111111111111111111 ",
" ////////////////////// 11111111111111111111111111111111111111 ",
" // //////////////// / 11111111111111111111111111111111111111 ",
" / //// //////// //// 11111111111111 1 1 ",
" // /// / / // 1111111 1111111 ",
" ////// // /// 111111 11 ",
" ///// / / / / 11 1 11 1111111 ",
" / / / 11 11111 111 11 1 ",
" ///////////// //////// 11111111111111111111111111111111111111 ",
" ////////////////// // / 11111111111111111111111111111111111111 ",
" / ///////////// /// / 11111111111111111111111111111111111111 ",
" /// // ///// // / / 11111111111111 1 1 ",
" // //// / // 1111111 1111111 ",
" //// / / //// 111111 11 ",
" ///// /// 11 1 11 1111111 ",
" / / 11 11111 111 11 1 ",
" 11 111111 ",
" ",
" ",

View file

@ -8,8 +8,8 @@
"7",
"16",
"6",
"2",
"10",
"2",
"12",
"14",
"13",
@ -32,28 +32,28 @@
" ",
" ",
" ",
" ",
" !!! ! ",
" !! !! !! !! !!! ",
" ! !! ! ! ! !!!! !! ! ",
" !!!!! !!!! ! ! ! !!! ! ! ! ",
" !!! !!!! !! ! ! ! ! ! !!! ! ",
" !!!!!!!!!! ! !!! !!!!!!! !! ! !!! !!!! !!! ",
" !!!!!!!!! ! ! ! !!!!!!! !!! ! !!!!!!!! !!! ! ",
" ! ! !!!!!! !!!!! !!! ! ! !!!!!!! !!!! ! !! !!!!! ! ! !!!!! ",
" !!! !!!!!! !!!!!!!!!! ! !!!!!!!!!!!!!!! ! ! !!!!!!!!! !!! !!! !! ! ",
" !!! !!!! !!!!!! !!!!!!!!! !! !!!!!! !!!!! !! ! !!!!!!!!!!! !!! !!! !!! !!!! ",
" ! !! !!!!!! !!!!! !!! ! !!!!!! !!!!! ! ! ! !!!!! !!!!!!!!!! ! ! !!!!!!!! ",
" !!!! !!!!!! !!!!!!! !! !! ! !!!!!! !!!!!! !! ! !!!! !!!!!! !!!!!!!! ! ! ! !!!!! ",
" ! ! !!!!!!!! !!!!!! !!!! !!!!! !!!!!! ! !!! !! !!!!!! !!!!! ! ! !! !!!!!!!!! ",
" ! !!!!!! !!!!! ! !! !!!! !!!!!! !!!!! !!!!! !!! !! !!!!! !!!!! ! ! !! !!!!!! ",
" !!!!!!! !!!!! !! ! ! ! !!! !!!!!! !!!!! !!! ! ! !!!!!!!!! !!!!!! !!!! !!!!! ",
" !!!!!! !!!!!! !!! ! !! !!!!!! !!!!!! !! ! !!!!!! !!!!! !!!!! !!!!!! ",
" !!!!! !!!!!! !! !!! !!!!!! !!!!! !!! !!! !!!!! !!!!! ! !!!!!! ",
" !!!! !!!!! !!! !!! !!!!! !!!!! !!! ! !!!!!! !!!!!!!! ! !! !!!!! ",
" ! !!!!! !!! !!!!!!! !!!!!!!! !!!!! !!!!!!!! !! !!!!!!! ",
" !!!!!!!!! !!!!! !!!!!! !!!!!! !!!!! !! !!!!! ",
" !!!!!! !!!!!! !!!!! !!!!!! !!!!! !!!!!! ",
" !!!! ",
" !!!! ",
" ! ! ! ! ",
" ! !! ! ! ",
" ! ! ! ! !!!!! !!! ! ",
" !!! !!!! !!! !! !! !!!!! ",
" ! !!!!!!! !!!! !! !!! ! ! !! ! ",
" ! !!!!!!!!! ! ! !! !!!!! !! !!!!!!! ! ",
" !!!! !!!!!! !!!!! !! ! !!!!!!! !! !!!! !!! !!!!! !! !! ",
" !! !!!!!! !!!!!! !! !!!! ! ! !!!!!!!!!!! !!! !!! !!!!!!!!!!! ! !! ! ! ",
" !!! !!!! !!!!!! !!!!! !!! !!! ! ! !!!!!! !!!!! !!! ! !!!! !!!!!!!!!!! ! ! !!! !!! !!!! ",
" ! ! !! !!!!!! !!!!! !!! ! ! !!!!!! !!!!! !!! !! ! !! !!!!! !!!!!! !! !!! ! ! !!!!!!!! ",
" ! ! !!!!!! !!!!!!!!! ! !!! !! !!!!!! !!!!!! !!! !!! ! ! !!!!!! !!!!! ! !!! ! ! !!!!! ",
" ! !!!!!!!!!! !!!!!! !!! !!! !!!! !!!!! !!!!!! ! !!! !!! !!!!!! !!!!! !! !!!!!!!!! ",
" !! !!!!!! !!!!! !! ! ! !!!!!!!! !!!!! ! ! ! !!!!! !!!!! !!! !! ! !! !!!!!! ",
" !!!!!!! !!!!! ! !!!! !!!!!! !!!!! ! !! ! !!!!!!!!!! !!!!!! ! ! ! !!!! ! !!!!! ",
" !!!!!! !!!!!! !!!!!!! !!!!!!!!!! !!!!!! !!!!! !!! !!!!!! !!!!!!!! !! ! !!! !!!!!! ",
" !!!!! !!!!!! !! ! ! ! !!!!!! !!!!! ! !!! !!!!! !!!!! !!! !!!!!! ",
" !!!! !!!!! !!! !!!!! !!!!! ! ! !!!!!! !!!!!! !! !!! !!!!! ",
" ! !!!!! ! ! !! !!!!!! !!!!!!!!! !! !!!!! !!!!!! !!! !!!!!! ",
" !!!!!!!!!!! !!!!! !!!!!!!!!! !!!!!!! !!!!! ! !!!!! ",
" !!!!!!!!!!!!!!!!! !!!!! ! !!!!!! !!!!! !!!!!! ",
" !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!!! ",
" !!!!!!!!!!! !!!!!!!!!! !!!!!!!! ",
" !!!!!!!!! !!!!!!! !!!!! ",
@ -62,37 +62,37 @@
" ##### ! #### $$$ ",
" ######## ####### ## $$$ ",
" ########### ########## ##### # $ $$$ ",
" ###### ####### ###### ##### ######## ### $$ $$ $$$ ",
" ####### ## ##### ##### ## ##### ########## ##### $ $$ $$$ ",
" ###### # ##### ###### ### ###### ##### ##### ##### $ $$$ ",
" ###### # ###### ######### ###### ######## ###### ###### $ $$$ ",
" ###### # ####### ####### # # ##### ########## ###### ###### $$ $ $$$ ",
" ######### ## # ##### ###### # ### # # ##### ##### ### ##### ######## $$ $ $$$ ",
" ####### ### ### ##### ##### # ## # ## ###### ##### # # ## ###### ###### ##### $ $$$ ",
" ########## ## #### ###### ###### ### # ## ##### ###### ##### ###### ###### ## ### $$ $$$ ",
" ######## # # # # ##### ######### # #### ##### ##### ### ## # ##### ###### ## ### $$$ ",
" %%% ## # ### ## # ##### ##### ### ## # ###### ##### ## # # ######## ###### # ### $$$ ",
" %%% ## # # ###### ######## ### # # ###### ###### ######### ##### #### $$$ ",
" %%% % ### ######## ######### ### #### ##### ######## ## # ###### ###### $$$ ",
" %%%%% %% # ### ##### ###### # ### ### ##### ##### ## # # ########### $$$ ",
" %%%%% % #### ##### ###### ### ### ###### ##### ## ## # ####### # $$$ ",
" %%% % ##### ###### ##### ### # ########### ## # # ###### # $ $$$ ",
" %%% % %% ### ########### # && ######## # ## &&& && ### ###### # $ $ $$$ ",
" %%% % %%% & ### ######## && && &&& ###### # # &&&& && ### #### ### $$ $$ $$$ ",
" %%% %%%%% &&&& ### ##&&& && && & &### ### & ### ## # $$ $$ $$$ ",
" %%% % &&&& ### &#&& &&&& & &&&&& &&&# # &&& & # # # $$ $$ $$$ ",
" %%% % && & && & & && & && && &&&&& && & &&&&&&& & ## $$ $$$ ",
" %%% &&& & &&&& & & &&&&& && & & && && &&&&&&&& &&& $ $$$ ",
" %%% &&& && &&&&&& & &&& &&&&&& & & & &&&&&&&& &&&&& &&&&&&&&&& && $$ $$ $$$ ",
" %%% && && & &&&&&&&&& & &&&&&&&&&&&&&&& & &&&&&&&&&&&& && & && &&&& &&&&&&&&&&&&& && & $ $$$ ",
" %%% & &&& &&&&&&&&&&& && & &&&&&&&&&&&&& && &&&& &&&&&&&&&&&&&&& && && &&&&&&&&&& &&&&& & & $$$ ",
" %%% &&& &&&&&&&&&&&&&& & & &&&&&&& &&&&&& & && && &&&&&&& &&&&&&&& & &&& &&&&&& &&&&& & && $$$$ ",
" %%% &&& &&&&&&& &&&&& &&& & &&&&&&& &&&&& & &&& & &&&&&& &&&&&&&& & &&&&& &&&&&&&&&& $$$$ ",
" %%% %% &&&&&&& &&&& &&&& & &&&&&& &&&&&& && &&& &&&&& &&&&&& & &&& &&&&& &&&& && $$$$ ",
" %%% %%%% &&&&&& &&&&& & && &&&&& &&&&& & &&&&&&&&&& &&&& &&& &&&&&&& &&&& & & $$$$ ",
" %%% %%%%%&&&&& &&&& & & &&&&& &&&& && &&&&&&& &&&&&&& &&&&& &&&&&& &&& && $$$$$$ ",
" %%% % %&&&&& &&&& && &&&& &&&&& &&&& & &&&&& &&&&& &&&&& &&&&& &&& &&&&& $$ $$$$$$ ",
" %%% % %% &&& &&&& &&& &&&&&& &&&& &&&&& &&&&& &&&&&& &&&&&&&&&&&&&& $ $$$$$$ ",
" ###### ###### ###### ##### ######## ### $$ $$ $$$ ",
" ########### ##### ##### ##### ########## ##### $ $$ $$$ ",
" ###### # ### ##### ###### ###### ##### ##### ##### $ $$$ ",
" ###### ## ###### ####### ###### ###### ###### ###### $ $$$ ",
" ###### ### ###### ######### ######## ####### ###### ###### $$ $ $$$ ",
" ###### ### ## ##### ######### ## ######## ##### ##### ######## $$ $ $$$ ",
" ########## ### ### ##### ##### ### ## ## ######### ######## # ###### ###### ##### $ $$$ ",
" ###### ### ## # # ######## ###### # # ### ### ### ##### ######### ### # ######## ###### ## # # $$ $$$ ",
" #### # # ## ##### ###### # ### ##### ##### # ## ## ######### ########## ### $$$ ",
" %%% ## # ### ## ########## ##### ### ### ###### ##### ### ## ######## ###### # ### $$$ ",
" %%% # ### ######### ######### # ## ###### ###### ### # # ## ##### ##### #### $$$ ",
" %%% % ### #### ## ###### ######### ## ## ##### ######## ### ### ###### ###### # # $$$ ",
" %%%%% %% ## ## ##### ####### ## # ##### ######### ## ########### $$$ ",
" %%%%% % ### ###### ###### ## ### ###### ######### ## ## ####### # $$$ ",
" %%% % ######### ##### # ### ############## # ##### # $ $$$ ",
" %%% % %% ## ############## #### & & & ######## # ## ###### ## $ $ $$$ ",
" %%% % %%% ### ## #####&#& # &&&&& & ###### # # # && #### # ## $$ $$ $$$ ",
" %%% %%%%% ### # ###&&& && #### #### &&&& # # # $$ $$ $$$ ",
" %%% % #### # &#&&&& && &&&&&& # # & &&& ## ### $$ $$ $$$ ",
" %%% % && #### & &&&& &&&&& &&&& &&&& & ## # $$ $$$ ",
" %%% &&&&&& & # &&& &&& && & & && &&& && &&&&&&&&&& && # $ $$$ ",
" %%% & && & & && # &&&&& &&&&&& & && &&&&&&&& && & && &&&&&&&&&& &&& $$ $$ $$$ ",
" %%% && &&&& &&&&&&&& && & && &&&&&&&&&& && & &&&&&&&&&&&& &&& & & &&&&&&&&&&&&&&&& $ $$$ ",
" %%% & & & &&&&&&&&&&& && && &&&&&&&&&&&&& & &&& &&& &&&&&&&&&&&&&& & & &&&&&&&&&&&& &&&&&& & $$$ ",
" %%% &&&&&&&&&&&&&&&&&& && && && &&&&&&& &&&&&& && & & & &&&&&&& &&&&& &&& & && &&&&&& &&&&& &&&&& $$$$ ",
" %%% & &&&&&&& &&&&& &&&& &&& && &&&&&&& &&&&&& & & & &&& &&&&&& &&&&& & &&&&&& && &&&&& &&&&& &&&&& $$$$ ",
" %%% %% &&&&&& &&&& && &&& &&&&&&&&& &&&&&&& && && &&&&& &&&&&&&& & &&&&& &&&& & & $$$$ ",
" %%% %%%% &&&&&& &&&&&&& && &&&&&&&&& &&&&&&& & &&&&&& &&&& && &&&&&& &&&& &&& &&& $$$$ ",
" %%% %%%%%&&&&& &&&& & &&& &&&&& &&&& && &&&&& &&&& && && &&&&& &&&& &&& & && $$$$$$ ",
" %%% % %&&&&& &&&& && && &&&&& &&&& & &&&&& &&&&&& &&&&& &&&&& &&&&&&&&& $$ $$$$$$ ",
" %%% % %% &&& &&&& && &&&&&& &&&& & &&&&& &&&&& &&&&&& &&&&&&&&&&&&&& $ $$$$$$ ",
" %%% % %% & &&&&& &&&&&&& &&&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&& $ $$$$ ",
" %%% % % &&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $ $$$$$$ ",
" %%% %% &&&&&&&&&&& &&&&&&&& &&&&&& &&&& $$ $ $$$$ ",
@ -108,89 +108,89 @@
" %%% % %% ''''''''''''''''''''''''' $$$$ ",
" %%% % %% (( '''''''''''''''''''''''''$ $ $$$$ ",
" %%% %% ((((((( (((((((( '''''''''''''''''''''''''$$ $$$$$$ ",
" %%% %% %% (((((( (((((((( (((((((((( (((((((((((( ' ''' $$ $$$$$$ ",
" %%% % %% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( ' ''' $ $$$$$$ ",
" %%% %% % (((((((((((((( ((((((((((((((( (((((((( ( ((((( ((((((( ((((( ''' '' $$$$$$ ",
" %%% ((((((( (((((( ((((((( ((( (((( (((((( (( (((((( (((((( ((((((( ' ' ' ''' $$$$$ ",
" %%% ((((((( ( (((( (((((( (((((( (((( (((((( (((( (((( ((((( (( (((( ' ' ''' $$ $$$$$$ ",
" %%% (((((( (( (((( (((((( ( (( (((( ((((( ( ((((((( ((((( ( ((((((( $ $$$$ ",
" %%% (((((((((( ( (((( ((((( (( (((( (((((( ((( (((( ((((((((( (( (((((( (( $$$$ ",
" %%% ((((((((( (((( ((((( ((((( (( (( (((( ((((( ( ((( (((( (((((((((( (( ( ((((((( (((( $$$$ ",
" %%% (((( ( ((( (( (((( (((((( ((( (( (((( ((((((( ( (( (((( (((((((( ( ((( ((( ( ((((( (((((( $$$$ ",
" %%% %% (( (((( ( ((((( (((((( ( ((((( (((((( (( ( ( (((((((((((((( ( (( (( ((((((((((((( $$$$ ",
" %%% % %% ((( ((((((((( (((((( ( (((((((((((((( (((( ( (((((((((((( (((( (( ((((((((( $$$$ ",
" %%% %% (( ((((((((((((( (((((((((((( (( (( ((((((((( ((( ((( (((((( (( $$$$$$ ",
" %%% %% % ( (((((((( ((( )) (((((((((( (( ( (( ((( ( ((( (((((( * $$ $$$$$$ ",
" %%%%% % (( ( ((((( ( (((() +++ (((( ( ((( ,, (((((( ((( (( ( (( ** ** * $$ $$$$$$ ",
" %%%% % %% (( ( ())()) +++ (( ((( ,,, ,, ((((( ************ (( ( * * ** $$$$$$ ",
" %%%%% ((( ( ((())) +++ ( ( ( ((( ( ***************************((((( *** * *** $ $$$$$$ ",
" %%%% % % ((((( (()())) ++++ ( (((((--- ,,,,,,,, (( ((((( **************************((*(******* ******* $$ $ $$$$ ",
" %%%%%% ((( ()))) ++++ ((( ((--- ,,, ,,,,, ( ((( ********************************* * * $$ $ $$$$ ",
" %%%% )))))) ) +++ (--- ,,,,,, **************** $ $$$$ ",
" %%%% ))))))))) ) +++ ---- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ****** $$$$$$ ",
" %%%% ))))) ))) )) +++ ----- -- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, . .. **** $$$$ ",
" %%%% )))))) ))) )) +++ --- -- - ,,,,,,,,,,,,,,,,,,....,..,,,, .. ... . **** $$$$ ",
" %%%% )))))) ) ))) ++++++ + ------ - . ... ... .. . .... **** $$$$ ",
" %%%% ))))) ) ++++ ++ + --- - ... ... .. . .. . .. **** $$$$ ",
" %%%%% )))))) )) +++++++ ----- -- . .. ..... ... ..... **** $$$$ ",
" %%%%%% )))))) ) ++++ ++ ---- -- .. ..... ... . . . *** $$$$ ",
" %%%% %% ))))) +++ + + ----- -- . .. ................................. *** $$$$ ",
" %%%%%% % )))))) / +++ + ++ ---- -- .......................................... *** $ $ $$$$ ",
" %%%%%% )))))))) // //// // ++++++ ++ --- -- ........................................... *** $$ $$$$ ",
" %%%%%%%%% ))))) ))) ///// //// ++++++++ --- ................. *** $$ $ $$$$ ",
" %%%%%% %% )))))) ))) )) // // // ++++++ --- ..... *** $ $$$$$$ ",
" %%%%%%%%% )))))) )) ) ) /// /// // // +++ --- .... *** $$$$$$ ",
" %%%%%% ))))) )) ) // //// ///// / +++ ---- . ... *** $$$$$ ",
" %%%% )))))) ) )) //////// /// / +++ ---- . . ... *** $$ $$$$$$ ",
" %%%% )))))) ))) /////////////// / +++ ---- .. . .... *** $ $$$$ ",
" %%%% ))))) ) ////////////////////// ++++ --- . . .... *** $$$$ ",
" %%%% )))))) ////// ////////////// ++++ --- .. ..... *** $$$$ ",
" %%%% )))))) ////// ///////// +/+ --- . ..... **** $$$$ ",
" %%%% %% ))))) ) ///// //// /++/ --- ... ..... **** $$$$ ",
" %%%% %%%% ))))))))) ) ////// ///////++// ---- . ... 00000000000000000000000000000 **** $$$$ ",
" %%%%%% %)))))))) )) ////// //// /++////---- . ... 00000000000000000000000000000 *** $$$$$$ ",
" %%%%%% %%)))) ))) )) ///// //// / / --- ... 00000000000000000000000000000 *** $$$$$$$$$ ",
" %%%%%% )%))) ) ) )) ////// //// // /--- ... 00 00 0 0000 *** $$ $$$$$$ ",
" %%%% % %%%) ) ) ////// /////// --- ... 000000 0 00 *** $$$$$$$ ",
" %%% %) ))) ///////// //// // --- ... **** $ $$$$$$ ",
" %%%% % ) //////// //// / --- ... 00000000 00 00000 ****** **$$ $ $$$$ ",
" %%% / / /// //// --- ... 00 0000 000000 *** ** *$$ $ $$$$ ",
" %%% // // /// ///// ... ***** * $ $$$$ ",
" %%% / / /// //// ... **************** **** * * $$$$$$ ",
" %%% // / //// /// . ... ********************************************** ** $$$$ ",
" %%% // // //// /// .. ..... ******************************************** * * $$$$ ",
" %%% // /// //// ..... ********************************* * ** $$$$ ",
" %%% ////// //// . ... * * *** ** ** *** ** $$$$ ",
" %%%%% /// //// .. ..... * **** * **** ** *** $$$$ ",
" %%% %% % /// /// / ......... ** * * $$$$ ",
" %%% %%%%% //// /// // .. .. .... **** * ****** ***** ** $$$$ ",
" %%%% %% /////// ///// / . ..... ** * *** ** * ******* $ $ $$$$ ",
" %%%%% %% //////// ///// // . .... $$ $$$$ ",
" %%%%%% // ///// ///// // ..... $$ $ $$$$ ",
" %%%%% %% // / /// //// / ...... $ $$$$$$ ",
" %%%%%%%% // / /// /// / // .......................................... $$$$$$ ",
" %%%%%% // ///// /// //// ......................................... $$$$$ ",
" %%% / // //// /// / . .. ...................................... $$ $$$$$$ ",
" %%% / // //// /// .. . . . . .. . $ $$$$ ",
" %%% / //// /// .. ... .. ... ... .. $$$$ ",
" //// //// ... . $$$$ ",
" //// ///// ..... .. . . . . ..... $$$$ ",
" ///// ///// ... .... ... .... ",
" %%% %% %% (((((( (((((((( (((((((((( (((((((((((( '' '''' ' ''' $$ $$$$$$ ",
" %%% % %% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( ' '''' ' ''' $ $$$$$$ ",
" %%% %% % (((((((((((((( ((((((((((((((( (((((((( ((((( ((((((( ( ( (((( ' ' ' ' ' $$$$$$ ",
" %%% ((((((( (((((( ((((((( (((( (((((( ((((( (((( (((((( ( (((((((( ' '''' '''''' ' $$$$$ ",
" %%% ((((((( ((((( ((((((((( (((( (((((( ((((( (((( ((((( ((( (((( ''''''' '' ''''''$$ $$$$$$ ",
" %%% (((((( ((((((( (((((( ((( (((( ((((( ((((( ((((( ((( (( ((((( $ $$$$ ",
" %%% ((((( (( (((( ((((((((( ( ( (((( (((((( ( (( (((( (((((((( (((((( (((( (( $$$$ ",
" %%% ((((( ((( ( (((( ((((((((( (( ( ((((( ((((( ( (((((((( (((( ((((((((( ( ( (((( (((( (((( $$$$ ",
" %%% (((( (( (( (((( (((((( ( (((( (( ((((((( ((((((( ( ( ( ( (((( (((((( ((( ( ((( ((((( (((((( $$$$ ",
" %%% %% (( (((( ((((( (((((( (( ( (( (((((((( (((((( (( (((((((((((((( (( ((( ( ((((((((((((( $$$$ ",
" %%% % %% (( (((((( (((((( ((( ( (( (((((((((((((( ((( (((((((((((((( (( ( ((((((((( ) $$$$ ",
" %%% %% (( ((((((((((( ( ((( (( (((((((((((( (( (( ( (((((((( ( (( (((((( )) ) $$$$$$ ",
" %%% %% % ( (((((((( ((( (** (( (( ((((((( (( (((( (( ((( ( (( (( (( ( ))))) $$ $$$$$$ ",
" %%%%% % (((( (((( ((** +++ ( ( ((( ,, ((( (( ((((( )) ) $$ $$$$$$ ",
" %%%% % %% (( ((**** +++ ( ((( ,,, ,, (((( ( )))))))))))) ((( (( ))) )) $$$$$$ ",
" %%%%% ( (((((*** +++ ( ( ( )))))))))))))))))))))((((((()))) ) ))) $ $$$$$$ ",
" %%%% % % (((((**** ++++ --- ,,,,,,,, ( ))))))))))))))))))))))((((()(())))))) ))) $$ $ $$$$ ",
" %%%%%% (***** ++++ --- ,,, ,,,,, ))))))))))))))))))))))))))))))))) ) $$ $ $$$$ ",
" %%%% ****** * +++ --- ,,,,,, ))))))))))))))) ) $ $$$$ ",
" %%%% ********* * +++ ---- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, )))))) ) ) $$$$$$ ",
" %%%% ***** *** ** +++ ----- -- ,,,,,,,,,,,,,,,,,,,,,,.,,.,,, . )))) )) ) $$$$ ",
" %%%% ****** *** ** +++ --- -- - ,,,,,,,.,,,,.,,,,,,,,......., .... .. )))) )) )) $$$$ ",
" %%%% ****** * *** ++++++ + ------ - .... .. ...... ... . ))))) ))) $$$$ ",
" %%%% ***** * ++++ ++ + --- - ..... . . .. .. .. )))) )) )) $$$$ ",
" %%%%% ****** ** +++++++ ----- -- .. . .. . ..... ... ... ))))))))) $$$$ ",
" %%%%%% ****** * ++++ ++ ---- -- ..... .. ...... . . ))))) $$$$ ",
" %%%% %% ***** +++ + + ----- -- ... ................................. )))))) $$$$ ",
" %%%%%% % ****** / / +++ + ++ ---- -- .......................................... )))))) $ $ $$$$ ",
" %%%%%% ******** // //// / ++++++ ++ --- -- ........................................... ))) $$ $$$$ ",
" %%%%%%%%% ***** *** /// /// / ++++++++ --- ................. ))) $$ $ $$$$ ",
" %%%%%% %% ****** *** ** // / // / ++++++ --- ..... ))) $ $$$$$$ ",
" %%%%%%%%% ****** ** * * /// / /// // / +++ --- .... ))) $$$$$$ ",
" %%%%%% ***** ** * // //// / //// / +++ ---- . ... ))) $$$$$ ",
" %%%% ****** * ** //////// / /// +++ ---- . .. ... ))) $$ $$$$$$ ",
" %%%% ****** *** /////////////// / +++ ---- . ...... ))) $ $$$$ ",
" %%%% ***** * ////////////////////// ++++ --- .......... ))) $$$$ ",
" %%%% ****** ////// ////////////// ++++ --- .. ..... ))) $$$$ ",
" %%%% ****** ////// ///////// ++/ --- .. .... )))) $$$$ ",
" %%%% %% ***** * ///// //// /+/// --- .... ... )))) $$$$ ",
" %%%% %%%% ********* * ////// ////////+// ---- ......... 00000000000000000000000000000 )))) $$$$ ",
" %%%%%% %******** ** ////// //// //+// /---- . ... 00000000000000000000000000000 ))) $$$$$$ ",
" %%%%%% %%**** *** ** ///// //// // / /--- ... 00000000000000000000000000000 ))) $$$$$$$$$ ",
" %%%%%% *%*** * * ** ////// /////// /--- ... 00 00 0 0000 ))) $$ $$$$$$ ",
" %%%% % %%%* * * / ////// ///// / //--- ... 000000 0 00 ))) $$$$$$$ ",
" %%% %* *** //// //// //// /// --- ... )))) $ $$$$$$ ",
" %%%% % * // //// ///// / --- ... 00000000 00 00000 )))) ) $$ $ $$$$ ",
" %%% // // /// //// --- ... 00 0000 000000 ))) ) )$$ $ $$$$ ",
" %%% // // /// ///// . ... ))))) ) $ $$$$ ",
" %%% / // /// //// ........ )))))))))))))))) )))) )) $$$$$$ ",
" %%% / ///// /// . .... )))))))))))))))))))))))))))))))))))))))))))))) ) $$$$ ",
" %%% ////////// /// .. . ... )))))))))))))))))))))))))))))))))))))))))))) ) ) $$$$ ",
" %%% //// //// .. .... ) )))))))))))))))))))))))))))))))))) ))))) $$$$ ",
" %%% /// //// .. ..... ))))))) ))) ) ) )))) ) ) $$$$ ",
" %%%%% /// //// .. . .... )) ))) )) )) ) )))) ) $$$$ ",
" %%% %% % /// /// / / . . .... ) ) ) $$$$ ",
" %%% %%%%% //// /// / / . .... ))) )) ) )))))))) ) )))) $$$$ ",
" %%%% %% / ///// /// / // ..... )))) )) ))))) )))))))) $ $ $$$$ ",
" %%%%% %% // //// //// / .... $$ $$$$ ",
" %%%%%% //// /// ////// // ..... $$ $ $$$$ ",
" %%%%% %% // /// ////// // ...... $ $$$$$$ ",
" %%%%%%%% // / /// /// / // .......................................... $$$$$$ ",
" %%%%%% // / //// /// // ........................................ $$$$$ ",
" %%% / /// //// /// ........................................ $$ $$$$$$ ",
" %%% / / //// /// . . . . .. .. . $ $$$$ ",
" %%% / //// /// .. .. ... .. ...... $$$$ ",
" //// //// ... .. $$$$ ",
" //// ///// ...... ........ .... .... $$$$ ",
" ///// ///// . .. ..... . . . .. ",
" //// ////// ",
" //// /////// ",
" //// ///// ",
" ///// /////// / / ",
" / ///// ///////// /// ",
" / /////////// ///// / /// ",
" // / /////////////////////// / / 11111111111111111111111111111111111111111111111111 ",
" / / //////////////////// /// 11111111111111111111111111111111111111111111111111 ",
" / / //////////// /// 11111111111111111111111111111111111111111111111111 ",
" //// / / //// 1111111111 1 1 1111 ",
" / /// // /// 1111111 1 1 1 1 11 ",
" /// ///// 111 11 1 1 ",
" / /// / 11 1 11 11111 1 11111 ",
" // ///// 11 11111 111 11 1 111111 ",
" ////// 1 111111 ",
" //// ///// / ",
" /////// ///////// // ",
" // / ///// ///////// //// ",
" / / /////////// ///// / / // ",
" /// ////////////////////////// //// 11111111111111111111111111111111111111111111111111 ",
" // // //////////////////// //// 11111111111111111111111111111111111111111111111111 ",
" // / //////////// / / 11111111111111111111111111111111111111111111111111 ",
" //// / ///// 1111111111 1 1 1111 ",
" /// /////// 1111111 1 1 1 1 11 ",
" / // 111 11 1 1 ",
" /// / / 11 1 11 11111 1 11111 ",
" ////// / 11 11111 111 11 1 111111 ",
" // 1 111111 ",
" ",
" ",
" ",

View file

@ -0,0 +1,59 @@
{
"keys": [
"",
"1"
],
"data": {},
"grid": [
" ",
" !! ",
" ! !!! ",
" ! ",
" ! !!! ! ",
" ! ! ! !! ",
" ! !! ! ! ",
" ! ! !! ",
" ! ! !!!! !! !!!! !!",
" !! ! !! !! ! !!!",
" ! !! !!! ! !!!! !! ! !!!",
" ! !! !!!! !! ! !! !! ! ",
" ! ! !! ! !! !! ! !! ! ",
" ! ! ! !! ! ! !! ! ",
" !! !! !! !! ! ! !!!",
" ! !! ! ! !",
" ! ! ! ! ! ! !",
" ! !! ! ! ! !! !! ! ",
" ! ! ! ! ! ! !! ! !!! ",
" !! !! ! ! !! !! !! !! ! ",
" !!!! !! ! !! !! !! !! ",
" !! ! ! ! ! !! ! ",
" !! !! !!!! !! ",
" ! !! !!! ! !! ! ! ! ! ",
" ! ! ! !! ! ! ! ",
" ! ! ! ! ! !! !! ! ! ! ",
" !! !! ! ! !! ! ",
" ! ! !! ",
" ! ! !! ! !! ! ! ",
" ! !! ! ! ! ! ! ! !! ",
" ! !! ! ! !! !! !! ! ",
" ! !! !! !! !! ! ! !! ! ",
" !!! ! ! ! !! ! ",
" ! ! !! ! ",
" ! ! ! ! ! ! ! ",
" ! ! !! !! ! ",
" !!!!! ! ! !! ! !!! ! ! ",
" ! !! ! ! !! ! ! !! ! ! ! ",
" !! !! ! !! !! !! !! ",
" !! !! ! !! !!!! !!! !!! ",
" !!! !! !! ! ! ",
" ! ! ! ! !! ! !!! ! ! ",
" !! !! ! ! ! ! ! ! ",
" ! ! ! !! ",
" ! ! ! !! ! !! ! ",
" ! ! ! !!! ! ! ! ",
" ! ! ! ",
" ! ! ! ",
" ! !!! ! ",
" !! "
]
}

View file

@ -0,0 +1,109 @@
{
"keys": [
"",
"1"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ! ",
" ! ! ",
" !! ! ",
" ! !!!! ! ",
" !! ! ! ! ",
" !! ! !! !!! ! ",
" ! ! !! ! !!! !! ! ! ! ",
" !! ! !!!!! !! ! !! !! !! ",
" !! ! ! !!!! ! ! ! ! !! !! ",
" !! !! ! !!! ! !! ! !! !! ! ",
" !!!!! ! ! ! ! !! ! !! ! ",
" ! !! ! ! !! ! ",
" !! !! ! !!! ! !!!!! ! ",
" ! ! !! !! ! !!! ",
" ! ! !! ! ! ! ! ! ! ! ! ",
" ! ! !! ! ! ! ! ! ",
" ! ! ! !! ! ! !! ! ",
" ! !! ! !! !! ! ! !! ! ",
" ! ! ! !! ! ! !! !! ",
" !! ! !! ! !! ",
" ! !! !! ! ! ! ",
" ! !! !! ! ! ! ",
" !! !! ! ! ",
" !! ! ! !! !! !! ! !! ! ",
" !!!!! ! ! ! ! ! !! ! ",
" ! !! !! !!!! !! !! !! !! ",
" ! ! ! !!!! ! ",
" !! ! ! ! ! !! ! ",
" ! ! !! ! ! ! !! !! ! ",
" !! !! ! !! ! ",
" ! ! ! !! !!!!! ! ! ",
" ! !! ! ! ! !! ! ",
" ! ! ! !! !! !! !! ! ",
" ! ! ! ! ! !! ! !! !! ! ",
" ! ! ! !! !! !!! ",
" ! ! ! ! !! !! ",
" ! !! ! ! ! ! !!! ",
" !! ! !!! ! ! ! !! ! ",
" !! ! !! ! ! ! ! ! ",
" !! !! ! ! !! !! ! ! ! ",
" ! ! !! !! !! ! ",
" !! ! ! !! ! !! ",
" !!! ! !!!! !! ! !! ",
" ! ! ! ! ! !! ! !! !! !! ",
" !! !! ! !! ! !! !! ",
" !!! !! ! ! ! !! !! !! !! ! ",
" !! !! !! !! ! ! !! ! ",
" !! !! ! ! ! ! ",
" ! !!! ! ! !! ! !!! ! ",
" ! ! ! ! ! ! ! ! ! ! ",
" ! ! ! ! !! !! !! ! ",
" ! ! ! !! !! ! !!! !! ! ",
" ! ! ! !! !! ",
" ! ! !! ! !! ",
" ! ! !! ! ! ! ! ! !!! ",
" !! ! !!! ! ! ! ! ! ! ",
" ! ! !!! !!! ! ! ! ",
" !! !! ! !! !! !! ! ",
" !! !! ! !! !! ",
" !! ! !! ! ! !! ",
" !!! ! !! !! !! !! ! ",
" ! ! ! !! !! !! !! ",
" ! ! ! ! ! !! ! ! ! ! ",
" !! !! ! ! ! !! ! ",
" !! !! !!! ! ! ! ! ! ",
" !! !! ! ! ! !! !! !! ! ",
" ! ! ! ! ! ! !! ! ",
" ! ! ! ! ",
" !! !! ! ! ! ! ! ",
" ! !! !! ! ",
" ! ! ! ! ! ! ! !! ",
" !! !! ! ! ! ! ! !! ",
" !! !! ! ! ! ! !! !!! ",
" !! ! !! ! !! ! ! ! ! ",
" ! !! ! ! !! ! ",
" ! ! !! !!!! !! ! ! ",
" ! !!! ! !! !! ! ",
" !! ! ! !! ! ! !! !! ",
" ! ! !!!! ! ! ! ! ! !! ! ",
" ! !! ! ! !! ! ! !! !! ",
" !! !! ! ! ! ! ! ! !! ! !! ",
" !! !! ! ! ! !! !!!! ! ! ! ",
" !! !! ! ! ! !! !!! ! ",
" !! ! ! ! !! ! ! ! ! ! ! ",
" ! ! ! ! !!! ! ",
" !! ! ! ! !! ",
" ! ! !!!!!! ! ! ",
" ! ! !! ! ",
" ! !!!! ",
" !! !!! ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,159 @@
{
"keys": [
"",
"1"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" !! !!! ",
" !! !! !! ",
" ! ! ",
" ! !!! ! ! ! ",
" ! ! ! !! !! ! ! !! ! ",
" ! ! ! !!! ! ! !! ! ",
" ! ! ! !! ! ! !! !! !! ",
" ! !! ! !! ! ! !! ! ",
" ! !! ! ! ! ! ! ! ! ",
" !!! !! !! !! !! ! ! ",
" ! ! !! ! !! !!! ! ",
" ! ! !! !! ! ! !!!!! ! ",
" !! ! ! !! ! ! ! ! ! ! ",
" ! ! ! ! !!! ! !! ! ! !! ! ",
" ! !! ! ! !! !! !! ! ",
" ! !!!! ! !!!! ! !! ! ",
" ! ! ! ! ! ! ! !! ! ",
" !!! !! ! ! ! ! !!!! !! ! ",
" ! !!! ! ! ! ! !! !! ",
" ! !!! ! ! ! !! !! ",
" ! !! !! ! !! ! ! ! ",
" ! !! ! !! ! ! ! ! ",
" ! !! ! ! !! ! ",
" ! ! ! ! ! ! !! ! ",
" ! ! ! ! !! !! !! ",
" !! ! ! ! !! ",
" ! !! ! ! !! ! ! ! ! ",
" !!! !!! !! !! ! ! ",
" !! ! ! !! ! ! ",
" ! ! ! !! !! ! ! !!!!! ",
" ! !! !! ! !! ! !! ! ",
" !! ! ! ! ! !!!!! !! !! ! ",
" !!! ! ! ! !!! !! ! ",
" ! ! ! ! ! ! !! !! ",
" !!! !! ! ! ! !! ! ! !! !! ",
" ! !!! ! ! !! ! !! ",
" !! !! ! ! !! !! ! ! ! ",
" ! !! !! !! !! ! ! ! ",
" ! ! !! ! !! ! ! ! ! ",
" ! ! ! ! ! ! !! ! ",
" ! !! ! ! ",
" ! ! ! !! !! !! ",
" !! !! ! ! !! ! !!! !! ",
" !! !! ! ! ! ! ! ! ",
" !!! ! !! !! !! ! ! ! ! ! ",
" ! !!!!! ! ! !! ! ",
" ! ! ! !!!!! ! ",
" ! !! ! ! ! ! !! ! !! !! ",
" !!! !! ! ! !!!! ! ",
" ! !!! !! ! ! ",
" ! ! ! ! !! !!!! ! ",
" ! ! ! ! !! !! ! !! ! ",
" ! !!! ! ! !! !! ! !! !! ",
" ! !! !!! !!! !! ! ! !! ! ",
" !! !! !! ! ",
" ! !! ! ! ! ",
" ! ! ! ",
" ! ! ! ! ! ! !! ",
" ! ! ! ! ! ! !! ! ",
" ! !! ! ! !! !! !! !! !! ",
" ! !! !! !! !! !! ! !! ",
" ! !! ! ! !! ! ! ",
" ! ! ! ! !!!! !! ! ",
" ! !! ! ! !! ! !! ! ",
" !! !! ! !! ! !!!! ! ",
" ! ! !! ! ! ! !! !! !! !! ! ",
" !! !! !! ! ! !! ! ",
" ! !!!! ",
" ! ! ! ! ! !! ! !! !!! ",
" !! !! ! ! ! ! ! !! !! ",
" !! ! !! ! !! ! !! !!! ",
" !! ! ! !! !! ! ! ! ! ",
" ! ! ! ! ",
" ! ! ",
" ! ! ! ! ",
" ! ! ! ! !! ! ! ! ! ",
" ! ! ! ! !! ! !! !! ",
" !! !! ! !! !! ! !!!! !!! ",
" !! !! !! !!! ! ! ",
" !!!! !! !! ! ! ",
" !! ! ! !! !! ! ! ! ! ",
" ! ! ! ! !! !! !!!!! ! ",
" ! !! ! ! ! ! ! !! !! !! ",
" !!! !! ! !!! !! !! ! ",
" !! !!!!! ! ! ! ! ! ! ",
" ! ! ! ! !! !! !! ! ",
" ! ! !! !! !! !! !! !! ",
" !!!! ! !! ! ! !! !! ",
" ! !! !! ! ! ! !! ",
" ! !! !! ! ! ",
" ! !! !! ! ! ! ! ",
" ! ! ! ! ! ! ! ! ",
" ! ! !! ! !! ! ",
" !!!!!! !! ! ",
" !! !! ! ! ! !! !!! ",
" ! ! !! ! ! !! ! !! ",
" ! !! !! ! ! ! !! ! ",
" ! !! !! ! ! !! !!! ! ",
" !! !! ! ! !! !!!! ! ",
" !! !! ! ! !! ! !! !! ! !! ",
" ! ! ! !! ! ! !! ! ",
" !!! ! ! ! ! ",
" ! ! ! !!! ! !! !! ! ! ",
" ! !! ! !! !! !! !! ",
" ! ! ! ! !! !! ! !! !! ",
" !! !! !! !! ! ! !! ! ",
" ! !! ! ! ! ! ! ! ",
" ! !! !! ! ! ! ",
" ! ! ! ! ! ",
" ! !! ! ! ! !! ! ",
" ! ! !! ! ! ! ! ",
" !! ! !! ! ! ! !! ",
" ! !! ! !!!! ! !! ! !!! ",
" ! !! !! !! !!! ! !! ",
" !! ! !!! ! ! ! ! !! ! ! ",
" !! ! !!! ! !! ! !!!! ! ! ",
" ! ! ! ! ! !! ! ! ",
" ! ! ! !! !!! ! ! !! ! ! ",
" !! ! ! !! !! !! ! ",
" !!!! ! !! ! ! ! !! ! ! ",
" ! ! ! !!! !! ! ! ! ! ! ",
" ! ! ! ! !! ! !! !!! !! !!! ",
" !! !! ! ! ! !! ! ! !! ",
" !! !! !! !! ! ! ! ! ",
" !! !! !! ! ! ! !!! !! ! ",
" ! ! ! !! ! ! !!!! ! ",
" ! ! ! ! ",
" !! ! !! !! ! ",
" !! !! !! ! ",
" !! ! !!! ",
" !! !!!! ",
" ",
" !!! ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,209 @@
{
"keys": [
"",
"1"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" !!! !! ! ",
" !! !!! ",
" !!! !! !! ",
" ! ! !! !!!!!! ! ! ! ! ",
" ! ! !!! !! ! ! !! ! ",
" ! ! ! ! ! ! ! ! !! !! !! ! ",
" !! !! !!!!! ! !! ! !! !! ! ",
" ! !!! !!! ! !!! ! !!!!! ! ",
" !! ! !! ! ! ! ! ! ! !! ! ",
" !!! ! ! ! ! ! !! !! ! ",
" !! ! ! ! ! ! ! !!! ! ",
" !! !! ! ! !!!! ! ! ",
" ! !! !! ! !! ! ! ! !! ! ",
" ! ! ! !! ! !! !! ! ",
" ! ! ! ! ! ! !! !! ! ",
" ! ! !! ! ! !!!!! ! ",
" !! !! ! ! ! ! !! ! ",
" !! !! ! !! ! ! ! !! ! ",
" ! !! ! !! ! !! ! ! ",
" !!!! !!! !! ! ! ! ! ",
" !! !!!! ! ! ! ",
" ! ! ! ! ! ! ! ! ! ",
" ! !! ! !! ! !! ! !! !! ! ",
" ! ! ! ! !! ! !! ! ",
" !! !! !!! ! ! !! !!! ! !! ",
" ! ! !! ! ! !! ! ! ",
" !! ! ! ! !! ! ! ",
" !! !! !! ! !! ! ! ",
" ! !! ! ! !! ! ! ! ",
" ! ! ! ! ! ! ! !!! ",
" ! ! ! !! ! !! !! ! ",
" ! ! ! !! ! ! !! !! ! ",
" !! !!!!! !!!! ! ",
" !! !! ! ! !! !! ! !! ",
" !! !! ! ! ! !! !! ",
" !!!!! !! ! ! !! !! ",
" ! ! !! ! ! !!!! ! ! ! ",
" !! !! ! ! ! ! ! ",
" ! ! ! !!! !! !! ! ! ! ",
" !! ! ! ! !! ! !! ! ",
" ! !!!! ! ! !! ! ! !! ",
" !! !! ! ! !! !! ! !! ! ",
" ! ! ! !! !! ! !!! ! ",
" !! ! !! ! ! ! ! ",
" ! !! !!!! ! ! ! ! ! ! ",
" ! !! ! ! !! !! ! ",
" ! !! ! !! !! !!!!! ! ",
" ! ! !! !! !! ! ",
" ! ! ! !! ! ! ! ",
" ! ! ! !! !!! ! ",
" ! ! ! !! ! !! ! ! ",
" !! ! ! ! !! ! !!!! !! ",
" !! ! !!! ! !! !! ! !! !!! ",
" !! ! !! ! ! ! ! ! ",
" ! !! ! !!! !! !! ! ! ! ",
" ! ! ! ! ! ! ",
" !!! ! ! !! !! ",
" ! !!!! ! ! !! !! !! !! ",
" !! !! ! !! ! !! !! ",
" ! !! ! ! ! ! ! !! !!! ",
" !!! ! ! ! ! !! !! !! ",
" ! ! !!! ! !! !! ! ",
" ! !! !! ! ! ! ! ! ",
" ! !! !!! ! !! ! !!! ! ",
" ! ! ! !!! !! ",
" !! !! ! ! ! ",
" !!! ! ! ! !! ! ! ",
" !! !! ! ! ! !!! ! ",
" ! !! ! ! ! ! !!! ! !! ! ",
" !! !! ! ! !!! !! ! ",
" ! ! ! ! !! ",
" ! ! !! ",
" ! ! ! ! ! !! ! !! ! ! ! ",
" !!! !! ! !! ! ! ! ! ",
" !! !!!! ! !! !! ! !! !! ! ",
" ! ! !! !! ! !! ! ",
" ! ! !! ! !!! ! ! ",
" !! ! ! ! ! !! ",
" !! ! !! ! ! ! ! ! ",
" !! !! ! ! ! ! ! ! ! ",
" ! !! !! ! !! !! !!! !! ! ",
" !! !! !! !! !!!! ",
" ! !! ! ! ! ",
" ! ! !!!! !! ! ",
" ! !! ! ! !! ! !!! ! ",
" ! !! ! !! ! ! !!!! ",
" ! !! !! ! ! !! !! !! !! !! ",
" !!! ! !! !! ! ! !! !! ",
" ! ",
" ! ! ! ! ! ! !! ! ",
" !! !! ! ! ! ! ! ! ",
" !!!!! ! ! !! ! !! ! ",
" ! ! ! !! !! ! ! !! ! ",
" ! ! ! ! !! !! !! ",
" ! ! ! !! ",
" ! !! ! ! ! ! ! ",
" ! !! ! ! !! !! ! ! ! ! ",
" ! !! !!! !! ! !!! !! ! ",
" ! ! ! !! ! ! !!!!! ! ",
" !! ! ! ! ! ! ",
" ! ! ! ",
" ! ! !! !! ! !! ! ",
" ! !! ! ! !! ! !! ! !! ! ",
" !! !! !! ! ! !! !! ! ",
" !! !! !!! ! ! !! !! ! !! ",
" ! !! ! ! !! ! !! ! ",
" ! ! !! ! ",
" ! ! !! !! !! ! ! ! ",
" !!!! ! !! !! ! !! ! ",
" ! ! !!! ! ! ! ! !! ! ",
" !! !! ! ! ! ! ! ! !! ",
" !! !! ! ! !! !! ",
" !!! ! !! !! ! ! !! ",
" ! !! ! !! !! !! !! ! ",
" !! ! ! !! ! ! !! ! ",
" ! !! !! !! ! !!! ! ",
" ! ! ! !!!!! ! !! ",
" ! ! ! ! ! ! ! ! ",
" ! ! ! ! ! ! !!! !! ! ",
" !! ! ! !!!! ! !! ! ",
" ! !! ! !! ! !! ! ",
" !! !! !! ! ! !! !! ! !! !!! ",
" !! ! ! ! ! ! ! ",
" ! ! ! ! ! !! ! ! ! ",
" ! !! ! !!! !! ! ",
" !!! !! ! !! ! ! ! ",
" !! !!!! ! ! ! ! !! ! ",
" ! ! ! ! ! !! ! ",
" ! ! ! !!! !! ",
" !! ! ! !! ! ! ! !! ",
" !! !! ! !! ! ! !! !! ! ! ",
" !! !! !! ! ! ! ! ! !! ! ",
" ! !! !!! !! ! !! !!! ",
" ! ! ! ! ! ! !!! ",
" ! ! ! ! ! !!! !! !! ! ! ",
" ! !!!! !! ! ! ! ",
" !! ! !! !! ! ",
" !! ! !!! !! ! !! !! !! ",
" ! !! ! ! ! ! !!! ",
" ! !! !! ! !! ! ! ",
" !! !! ! !! ! ! ! ! ",
" !! !! ! ! !! ! ! ! ! ",
" !! !! ! !! ! ! ! ! ",
" !!!! ! !!!!! ",
" ! ! ! ! !! ! ",
" ! ! !! !! !!! !!! ",
" ! ! !! !!! ! ! ",
" ! !! !! ! !! !! ! !! !! ! ",
" ! !! ! !! ! !! ! ! ! ",
" ! !! !!! !!! ! ! !! ! ",
" ! !! ! !! !! ! !! !!! ",
" ! ! ! ! !! ",
" ! !!! ! !! !! ! ",
" !! ! !! !! !! !! ",
" ! ! !! ! ! ! !! ",
" !!!! !! ! !!! !! !! !!! ",
" !! ! !!! ! !! !! ! ! ! ",
" !! ! !! !!! !! ! ! ! ",
" !! !! ! !! ! !! !! ! ",
" ! !! ! ! ! ! !! ! ",
" !!! ! !! ! ! ! ! ! ",
" !!! ! !! ! ! ! ! ",
" ! ! ! ! !! ! ! !! ",
" ! ! !! ! ! !! !! ! ! ",
" !! !! ! ! !! ! !!! ! !! ! ! ! ",
" !! !! !! ! ! !! ! ! !! ! !! ",
" !! !! !! ! !!! ! !!!!!! ! ! ! ",
" ! !! ! ! ! !!!! ! ! ",
" ! ! !!!!!! !! ! ! ",
" ! ! !!!!!! !! ",
" ! !! !! ",
" !!!! ! ! ",
" !!!! ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map>
<!-- dy and multi lines test -->
<Map background-color="white" srs="+proj=latlong +datum=WGS84">
<Layer name="layer" srs="+proj=latlong +datum=WGS84">
<StyleName>lines</StyleName>
<StyleName>text</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
wkt,nr
"LINESTRING(-1.000 -1.000, -0.958 -0.646, -0.917 -0.331, -0.875 -0.055, -0.833 0.185, -0.792 0.390, -0.750 0.562, -0.708 0.703, -0.667 0.815, -0.625 0.898, -0.583 0.956, -0.542 0.989, -0.500 1.000, -0.458 0.990, -0.417 0.961, -0.375 0.914, -0.333 0.852, -0.292 0.776, -0.250 0.688, -0.208 0.589, -0.167 0.481, -0.125 0.367, -0.083 0.248, -0.042 0.125, 0.000 0.000, 0.042 -0.125, 0.083 -0.248, 0.125 -0.367, 0.167 -0.481, 0.208 -0.589, 0.250 -0.688, 0.292 -0.776, 0.333 -0.852, 0.375 -0.914, 0.417 -0.961, 0.458 -0.990, 0.500 -1.000, 0.542 -0.989, 0.583 -0.956, 0.625 -0.898, 0.667 -0.815, 0.708 -0.703, 0.750 -0.562, 0.792 -0.390, 0.833 -0.185, 0.875 0.055, 0.917 0.331, 0.958 0.646, 1.000 1.000)",1
</Parameter>
</Datasource>
</Layer>
<Style name="lines">
<Rule>
<LineSymbolizer stroke-width="1" stroke="green"/>
<LineSymbolizer stroke-width="1" stroke="lightblue" offset="12"/>
<LineSymbolizer stroke-width="1" stroke="lightblue" offset="-12"/>
</Rule>
</Style>
<Style name="text">
<Rule>
<!-- note: &#10; is an encoded \n -->
<TextSymbolizer face-name="DejaVu Sans Book" size="12" placement="line" spacing="10" max-char-angle-delta="180" dy="0" justify-alignment="center" allow-overlap="true">
"u!__|__!u&#10;m!__|__!m&#10;b!__|__!b"
</TextSymbolizer>
</Rule>
</Style>
</Map>

View file

@ -96,6 +96,7 @@ files = {
'lines-4': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-5': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-6': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-7': {'sizes': sizes_few_square,'bbox':mapnik.Box2d(-1.2, -1.2, 1.2, 1.2)},
'lines-multi-layout-1': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-multi-layout-2': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-multi-layout-3': {'sizes': sizes_few_square,'bbox':default_text_box},

View file

@ -42,7 +42,7 @@ struct quadtree_node
quadtree_node(const box2d<double>& ext)
: ext_(ext),data_()
{
memset(children_,0,sizeof(quadtree_node<T>*)*4);
std::memset(children_,0,sizeof(quadtree_node<T>*)*4);
}
~quadtree_node()
@ -118,7 +118,7 @@ public:
void write(std::ostream& out)
{
char header[16];
memset(header,0,16);
std::memset(header,0,16);
header[0]='m';
header[1]='a';
header[2]='p';
@ -205,10 +205,10 @@ private:
int shape_count=node->data_.size();
int recsize=sizeof(box2d<double>) + 3 * sizeof(int) + shape_count * sizeof(T);
char* node_record=new char[recsize];
memset(node_record,0,recsize);
memcpy(node_record,&offset,4);
memcpy(node_record+4,&node->ext_,sizeof(box2d<double>));
memcpy(node_record+36,&shape_count,4);
std::memset(node_record,0,recsize);
std::memcpy(node_record,&offset,4);
std::memcpy(node_record+4,&node->ext_,sizeof(box2d<double>));
std::memcpy(node_record+36,&shape_count,4);
for (int i=0;i<shape_count;++i)
{
memcpy(node_record + 40 + i * sizeof(T),&(node->data_[i]),sizeof(T));
@ -221,7 +221,7 @@ private:
++num_subnodes;
}
}
memcpy(node_record + 40 + shape_count * sizeof(T),&num_subnodes,4);
std::memcpy(node_record + 40 + shape_count * sizeof(T),&num_subnodes,4);
out.write(node_record,recsize);
delete [] node_record;