summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsuyambu.rm <suyambu.rm@samsung.com>2015-07-28 12:24:20 +0530
committersuyambu.rm <suyambu.rm@samsung.com>2015-07-28 20:01:26 +0530
commitf3e38868285b2a9d04304b9861038da96d27d3cb (patch)
treede44e3ef494258294f296fcfdcdbecd6b1877438
parent705a610dc057c3d8964922750b930e1022288a0b (diff)
downloadcairo-f3e38868285b2a9d04304b9861038da96d27d3cb.tar.gz
cairo-f3e38868285b2a9d04304b9861038da96d27d3cb.tar.bz2
cairo-f3e38868285b2a9d04304b9861038da96d27d3cb.zip
Opensource Compliance Issue.
Remove modules with GPL3.0 copyright : cairo-fdr, cairo-sphinx, cairo-trace Remove unnecessary modules : perf Change-Id: I81d79eab3d9bef3e722665cef60b99f37836cc59 Signed-off-by: suyambu.rm <suyambu.rm@samsung.com>
-rw-r--r--Makefile.am8
-rw-r--r--configure.ac6
-rw-r--r--packaging/cairo.spec20
-rw-r--r--perf/.gitignore30
-rw-r--r--perf/COPYING5
-rw-r--r--perf/Makefile.am154
-rw-r--r--perf/Makefile.sources38
-rw-r--r--perf/Makefile.win3278
-rw-r--r--perf/README239
-rw-r--r--perf/cairo-analyse-trace.c592
-rw-r--r--perf/cairo-perf-chart.c1113
-rw-r--r--perf/cairo-perf-compare-backends.c398
-rwxr-xr-xperf/cairo-perf-diff255
-rw-r--r--perf/cairo-perf-diff-files.c506
-rwxr-xr-xperf/cairo-perf-graph206
-rw-r--r--perf/cairo-perf-graph-files.c604
-rw-r--r--perf/cairo-perf-graph-widget.c604
-rw-r--r--perf/cairo-perf-graph.h63
-rw-r--r--perf/cairo-perf-micro.c594
-rw-r--r--perf/cairo-perf-print.c139
-rw-r--r--perf/cairo-perf-report.c454
-rw-r--r--perf/cairo-perf-trace.c1067
-rw-r--r--perf/cairo-perf.c98
-rw-r--r--perf/cairo-perf.h250
-rw-r--r--perf/cairo-stats.c182
-rw-r--r--perf/cairo-stats.h52
-rw-r--r--perf/dirent-win32.h102
-rwxr-xr-xperf/make-html.py88
-rw-r--r--perf/micro/Makefile.am16
-rw-r--r--perf/micro/Makefile.sources51
-rw-r--r--perf/micro/Makefile.win3212
-rw-r--r--perf/micro/a1-curve.c112
-rw-r--r--perf/micro/a1-line.c223
-rw-r--r--perf/micro/box-outline.c215
-rw-r--r--perf/micro/cairo-perf-cover.c339
-rw-r--r--perf/micro/composite-checker.c117
-rw-r--r--perf/micro/curve.c111
-rw-r--r--perf/micro/disjoint.c101
-rw-r--r--perf/micro/dragon.c277
-rw-r--r--perf/micro/fill-clip.c126
-rw-r--r--perf/micro/fill.c122
-rw-r--r--perf/micro/glyphs.c202
-rw-r--r--perf/micro/hash-table.c115
-rw-r--r--perf/micro/hatching.c202
-rw-r--r--perf/micro/intersections.c160
-rw-r--r--perf/micro/line.c222
-rw-r--r--perf/micro/long-dashed-lines.c74
-rw-r--r--perf/micro/long-lines.c148
-rw-r--r--perf/micro/many-curves.c135
-rw-r--r--perf/micro/many-fills.c187
-rw-r--r--perf/micro/many-strokes.c186
-rw-r--r--perf/micro/mask.c305
-rw-r--r--perf/micro/mosaic.c176
-rw-r--r--perf/micro/mosaic.h4387
-rw-r--r--perf/micro/paint-with-alpha.c59
-rw-r--r--perf/micro/paint.c57
-rw-r--r--perf/micro/pattern_create_radial.c106
-rw-r--r--perf/micro/pixel.c237
-rw-r--r--perf/micro/pythagoras-tree.c95
-rw-r--r--perf/micro/rectangles.c121
-rw-r--r--perf/micro/rounded-rectangles.c144
-rw-r--r--perf/micro/sierpinski.c94
-rw-r--r--perf/micro/spiral.c352
-rw-r--r--perf/micro/stroke.c100
-rw-r--r--perf/micro/subimage_copy.c80
-rw-r--r--perf/micro/tessellate.c181
-rw-r--r--perf/micro/text.c69
-rw-r--r--perf/micro/tiger.c115
-rw-r--r--perf/micro/twin.c59
-rw-r--r--perf/micro/unaligned-clip.c73
-rw-r--r--perf/micro/wave.c115
-rw-r--r--perf/micro/wide-fills.c187
-rw-r--r--perf/micro/wide-strokes.c188
-rw-r--r--perf/micro/world-map.c149
-rw-r--r--perf/micro/world-map.h196
-rw-r--r--perf/micro/zrusin-another.h668
-rw-r--r--perf/micro/zrusin.c97
-rw-r--r--util/Makefile.am6
-rw-r--r--util/cairo-fdr/Makefile.am15
-rw-r--r--util/cairo-fdr/fdr.c331
-rw-r--r--util/cairo-sphinx/.gitignore1
-rw-r--r--util/cairo-sphinx/Makefile.am43
-rw-r--r--util/cairo-sphinx/fdr.c261
-rw-r--r--util/cairo-sphinx/sphinx.c1545
-rw-r--r--util/cairo-trace/.gitignore1
-rw-r--r--util/cairo-trace/COPYING5
-rw-r--r--util/cairo-trace/COPYING-GPL-3674
-rw-r--r--util/cairo-trace/Makefile.am40
-rw-r--r--util/cairo-trace/cairo-trace.in136
-rw-r--r--util/cairo-trace/lookup-symbol.c331
-rw-r--r--util/cairo-trace/lookup-symbol.h24
-rw-r--r--util/cairo-trace/trace.c5581
92 files changed, 19 insertions, 28783 deletions
diff --git a/Makefile.am b/Makefile.am
index 03fa35236..a797f2b9e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -16,11 +16,15 @@ EXTRA_DIST += \
ACLOCAL_AMFLAGS = -I build ${ACLOCAL_FLAGS}
-DIST_SUBDIRS = src doc util boilerplate test perf
+#DIST_SUBDIRS = src doc util boilerplate test perf
+#SUBDIRS = src doc util
+DIST_SUBDIRS = src doc util boilerplate test
SUBDIRS = src doc util
+
# libpng is required for our test programs
if CAIRO_HAS_PNG_FUNCTIONS
-SUBDIRS += boilerplate test perf
+#SUBDIRS += boilerplate test perf
+SUBDIRS += boilerplate test
endif
configure: cairo-version.h
diff --git a/configure.ac b/configure.ac
index e4a92d4d3..1ace52bf7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -920,17 +920,11 @@ boilerplate/Makefile
src/Makefile
test/Makefile
test/pdiff/Makefile
-perf/Makefile
-perf/micro/Makefile
util/Makefile
-util/cairo-fdr/Makefile
util/cairo-gobject/Makefile
util/cairo-missing/Makefile
util/cairo-script/Makefile
util/cairo-script/examples/Makefile
-util/cairo-sphinx/Makefile
-util/cairo-trace/Makefile
-util/cairo-trace/cairo-trace
doc/Makefile
doc/public/Makefile
])
diff --git a/packaging/cairo.spec b/packaging/cairo.spec
index 850546ee8..e25c15d00 100644
--- a/packaging/cairo.spec
+++ b/packaging/cairo.spec
@@ -203,16 +203,16 @@ make %{?_smp_mflags} V=1
%license util/cairo-script/COPYING
%{_libdir}/libcairo-script-interpreter.so.*
-%files -n tools
-%manifest %{name}.manifest
-%defattr(-, root, root)
-%license util/cairo-trace/COPYING util/cairo-trace/COPYING-GPL-3
-%{_bindir}/cairo-sphinx
-%{_bindir}/cairo-trace
-%dir %{_libdir}/cairo
-%{_libdir}/cairo/cairo-fdr.so*
-%{_libdir}/cairo/cairo-sphinx.so*
-%{_libdir}/cairo/libcairo-trace.so*
+#%files -n tools
+#%manifest %{name}.manifest
+#%defattr(-, root, root)
+#%license util/cairo-trace/COPYING util/cairo-trace/COPYING-GPL-3
+#%{_bindir}/cairo-sphinx
+#%{_bindir}/cairo-trace
+#%dir %{_libdir}/cairo
+#%{_libdir}/cairo/cairo-fdr.so*
+#%{_libdir}/cairo/cairo-sphinx.so*
+#%{_libdir}/cairo/libcairo-trace.so*
%files devel
%manifest %{name}.manifest
diff --git a/perf/.gitignore b/perf/.gitignore
deleted file mode 100644
index 02af7a93c..000000000
--- a/perf/.gitignore
+++ /dev/null
@@ -1,30 +0,0 @@
-TAGS
-tags
-cairo-analyse-trace
-cairo-perf
-cairo-perf-micro
-cairo-perf-print
-cairo-perf-trace
-cairo-perf-chart
-cairo-perf-compare-backends
-cairo-perf-diff-files
-cairo-perf-graph-files
-cairo-traces
-valgrind-log
-callgrind.out.*
-index.html
-*.png
-*.perf
-*.o
-*.gcda
-*.gcno
-*.exe
-*.manifest
-*.obj
-*.ilk
-*.suo
-*.lib
-*.pdb
-*~
-.*.sw?
-*.data
diff --git a/perf/COPYING b/perf/COPYING
deleted file mode 100644
index 17754cf7b..000000000
--- a/perf/COPYING
+++ /dev/null
@@ -1,5 +0,0 @@
-Cairo is free software.
-
-These tests are mainly available under a liberal MIT license to simplify
-any use of the code for reference purposes. Please check the opening comment
-of each file for copyright and licensing information.
diff --git a/perf/Makefile.am b/perf/Makefile.am
deleted file mode 100644
index 40b35bc38..000000000
--- a/perf/Makefile.am
+++ /dev/null
@@ -1,154 +0,0 @@
-include $(top_srcdir)/build/Makefile.am.common
-
-include $(top_srcdir)/perf/Makefile.sources
-
-AM_CPPFLAGS = \
- -I$(srcdir) \
- -I$(top_srcdir)/boilerplate \
- -I$(top_srcdir)/src \
- -I$(top_srcdir)/util/cairo-missing \
- -I$(top_srcdir)/util/cairo-script \
- -I$(top_builddir)/src \
- $(CAIRO_CFLAGS)
-
-AM_LDFLAGS = $(CAIRO_LDFLAGS)
-
-SUBDIRS = micro
-
-noinst_PROGRAMS = \
- cairo-analyse-trace \
- cairo-perf-trace \
- cairo-perf-micro \
- $(NULL)
-
-EXTRA_PROGRAMS += \
- cairo-analyse-trace \
- cairo-perf-micro \
- cairo-perf-trace \
- cairo-perf-diff-files \
- cairo-perf-print \
- cairo-perf-chart \
- cairo-perf-compare-backends \
- cairo-perf-graph-files \
- $(NULL)
-EXTRA_DIST += cairo-perf-diff COPYING
-EXTRA_LTLIBRARIES += libcairoperf.la
-
-LDADD = libcairoperf.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la
-
-cairo_perf_micro_SOURCES = $(cairo_perf_micro_sources)
-cairo_perf_micro_LDADD = \
- $(top_builddir)/perf/micro/libcairo-perf-micro.la \
- $(LDADD)
-cairo_perf_micro_DEPENDENCIES = \
- $(top_builddir)/perf/micro/libcairo-perf-micro.la \
- $(LDADD)
-
-libcairoperf_la_SOURCES = \
- $(libcairoperf_sources) \
- $(libcairoperf_external_sources) \
- $(libcairoperf_headers) \
- $(NULL)
-
-cairo_analyse_trace_SOURCES = \
- $(cairo_analyse_trace_sources) \
- $(cairo_analyse_trace_external_sources)
-cairo_analyse_trace_LDADD = \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/util/cairo-missing/libcairo-missing.la \
- $(LDADD)
-cairo_analyse_trace_DEPENDENCIES = \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/util/cairo-missing/libcairo-missing.la \
- $(LDADD)
-
-cairo_perf_trace_SOURCES = \
- $(cairo_perf_trace_sources) \
- $(cairo_perf_trace_external_sources)
-cairo_perf_trace_LDADD = \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/util/cairo-missing/libcairo-missing.la \
- $(LDADD)
-cairo_perf_trace_DEPENDENCIES = \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/util/cairo-missing/libcairo-missing.la \
- $(LDADD)
-
-cairo_perf_diff_files_SOURCES = $(cairo_perf_diff_files_sources)
-cairo_perf_print_SOURCES = $(cairo_perf_print_sources)
-cairo_perf_chart_SOURCES = $(cairo_perf_chart_sources)
-cairo_perf_compare_backends_SOURCES = $(cairo_perf_compare_backends_sources)
-
-cairo_perf_graph_files_SOURCES = \
- $(cairo_perf_graph_files_sources) \
- $(cairo_perf_graph_files_headers)
-cairo_perf_graph_files_CFLAGS = @gtk_CFLAGS@
-cairo_perf_graph_files_LDADD = @gtk_LIBS@ $(LDADD)
-
-# Install rules to rebuild the libraries and add explicit dependencies
-$(top_builddir)/perf/micro/libcairo-perf-micro.la:
- cd $(top_builddir)/perf/micro && $(MAKE) $(AM_MAKEFLAGS) libcairo-perf-micro.la
-
-$(top_builddir)/boilerplate/libcairoboilerplate.la: $(top_builddir)/src/libcairo.la
- cd $(top_builddir)/boilerplate && $(MAKE) $(AM_MAKEFLAGS) libcairoboilerplate.la
-
-$(top_builddir)/src/libcairo.la:
- cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) libcairo.la
-
-$(top_builddir)/util/cairo-script/libcairo-script-interpreter.la: $(top_builddir)/src/libcairo.la
- cd $(top_builddir)/util/cairo-script && $(MAKE) $(AM_MAKEFLAGS) libcairo-script-interpreter.la
-
-
-# Do a funny transition of CAIRO_TEST_TARGET through TARGETS such that
-# one can limit tested targets both through CAIRO_TEST_TARGET env var
-# and TARGETS make var on the command line. Same for the rest.
-TARGETS = $(CAIRO_TEST_TARGET)
-TARGETS_EXCLUDE = $(CAIRO_TEST_TARGET_EXCLUDE)
-FORMAT = $(CAIRO_TEST_TARGET_FORMAT)
-ITERS = $(CAIRO_PERF_ITERATIONS)
-
-CAIRO_PERF_ENVIRONMENT = CAIRO_PERF_ITERATIONS="$(ITERS)" CAIRO_TEST_TARGET="$(TARGETS)" CAIRO_TEST_TARGET_FORMAT="$(FORMAT)" CAIRO_TEST_TARGET_EXCLUDE="$(TARGETS_EXCLUDE)"
-
-perf: cairo-perf-micro$(EXEEXT) cairo-perf-trace$(EXEEXT)
- -$(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-micro$(EXEEXT)
- -$(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-trace$(EXEEXT)
-
-html-local: index.html
-
-perf-tag.html : cairo-perf-micro${EXEEXT}
- $(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-diff -t -h $@ `git describe --abbrev=0` HEAD
-perf-commit.html : cairo-perf-micro${EXEEXT}
- $(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-diff -t -h $@ HEAD
-
-# Summarise changes in index.html, with details in links
-index.html: perf-tag.html perf-commit.html
- echo "<html><head><title>Performance Changes</title></head><body>Against <a href=\"perf-tag.html\">"`git describe --abbrev=0`"</a><br><a href=\"perf-commit.html\">Latest commit</a></body>" > $@
-
-EXTRA_VALGRIND_FLAGS = $(CAIRO_EXTRA_VALGRIND_FLAGS)
-VALGRIND_MEMCHECK_FLAGS = \
- --tool=memcheck \
- --suppressions=$(top_srcdir)/test/.valgrind-suppressions \
- --leak-check=yes --show-reachable=yes
-VALGRIND_CALLGRIND_FLAGS = \
- --tool=callgrind
-CLEANFILES += \
- valgrind-log \
- callgrind.out.* \
- index.html
-
-perf-valgrind:
- $(MAKE) $(AM_MAKEFLAGS) perf \
- $(top_builddir)/libtool --mode=execute \
- valgrind $(VALGRIND_MEMCHECK_FLAGS) $(EXTRA_VALGRIND_FLAGS)' \
- | tee valgrind-log
-
-perf-callgrind:
- $(MAKE) $(AM_MAKEFLAGS) perf \
- $(top_builddir)/libtool --mode=execute \
- valgrind $(VALGRIND_CALLGRIND_FLAGS) $(EXTRA_VALGRIND_FLAGS)'
-
-.PHONY: perf perf-valgrind perf-callgrind
-
-EXTRA_DIST += Makefile.win32
diff --git a/perf/Makefile.sources b/perf/Makefile.sources
deleted file mode 100644
index 1fcf14809..000000000
--- a/perf/Makefile.sources
+++ /dev/null
@@ -1,38 +0,0 @@
-libcairoperf_sources = \
- cairo-perf.c \
- cairo-perf-report.c \
- cairo-stats.c \
- $(NULL)
-
-libcairoperf_external_sources = ../src/cairo-time.c
-
-libcairoperf_headers = \
- cairo-perf.h \
- cairo-stats.h \
- $(NULL)
-
-cairo_analyse_trace_sources = cairo-analyse-trace.c
-cairo_analyse_trace_external_sources = ../src/cairo-error.c
-
-cairo_perf_trace_sources = cairo-perf-trace.c
-cairo_perf_trace_external_sources = \
- ../src/cairo-error.c \
- ../src/cairo-hash.c \
- $(NULL)
-
-cairo_perf_micro_sources = cairo-perf-micro.c
-
-cairo_perf_diff_files_sources = cairo-perf-diff-files.c
-
-cairo_perf_print_sources = cairo-perf-print.c
-
-cairo_perf_chart_sources = cairo-perf-chart.c
-
-cairo_perf_compare_backends_sources = cairo-perf-compare-backends.c
-
-cairo_perf_graph_files_sources = \
- cairo-perf-graph-files.c \
- cairo-perf-graph-widget.c \
- $(NULL)
-
-cairo_perf_graph_files_headers = cairo-perf-graph.h
diff --git a/perf/Makefile.win32 b/perf/Makefile.win32
deleted file mode 100644
index 084abf00e..000000000
--- a/perf/Makefile.win32
+++ /dev/null
@@ -1,78 +0,0 @@
-top_srcdir = ..
-include $(top_srcdir)/build/Makefile.win32.common
-include $(top_srcdir)/perf/Makefile.sources
-
-CFLAGS += -I$(top_srcdir)/boilerplate -I$(top_srcdir)/util/cairo-script/
-
-PERF_LIBS = \
- $(CFG)/libcairoperf.lib \
- $(top_builddir)/boilerplate/$(CFG)/boiler.lib \
- $(top_builddir)/src/$(CFG)/cairo-static.lib \
- $(NULL)
-
-PERF_EXES = \
- $(CFG)/cairo-perf-trace.exe \
- $(CFG)/cairo-perf-micro.exe \
- $(CFG)/cairo-perf-diff-files.exe \
- $(CFG)/cairo-perf-print.exe \
- $(CFG)/cairo-perf-chart.exe \
- $(CFG)/cairo-perf-compare-backends.exe \
- $(NULL)
-
-all: inform $(PERF_EXES)
-
-perf: inform $(CFG)/cairo-perf-micro.exe
- ./$(CFG)/cairo-perf-micro.exe
-
-
-libcairoperf_OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(libcairoperf_sources))
-
-$(CFG)/libcairoperf.lib: $(libcairoperf_OBJECTS)
- @$(AR) $(CAIRO_ARFLAGS) -OUT:$@ $(libcairoperf_OBJECTS)
-
-cairo_perf_trace_OBJECTS = \
- $(patsubst %.c, $(CFG)/%-static.obj, $(cairo_perf_trace_sources)) \
- $(top_builddir)/util/cairo-script/$(CFG)/libcairo-script-interpreter.lib \
- $(NULL)
-
-cairo_perf_micro_OBJECTS = \
- $(patsubst %.c, $(CFG)/%-static.obj, $(cairo_perf_micro_sources)) \
- ./micro/$(CFG)/libcairo-perf-micro.lib \
- $(NULL)
-
-cairo_perf_diff_files_OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(cairo_perf_diff_files_sources))
-cairo_perf_print_OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(cairo_perf_print_sources))
-cairo_perf_chart_OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(cairo_perf_chart_sources))
-cairo_perf_compare_backends_OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(cairo_perf_compare_backends_sources))
-
-
-$(CFG)/cairo-perf-trace.exe: $(cairo_perf_trace_OBJECTS) $(PERF_LIBS)
- @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(cairo_perf_trace_OBJECTS) $(PERF_LIBS) $(CAIRO_LIBS)
-
-$(CFG)/cairo-perf-micro.exe: $(cairo_perf_micro_OBJECTS) $(PERF_LIBS)
- @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(cairo_perf_micro_OBJECTS) $(PERF_LIBS) $(CAIRO_LIBS)
-
-$(CFG)/cairo-perf-diff-files.exe: $(cairo_perf_diff_files_OBJECTS) $(PERF_LIBS)
- @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(cairo_perf_diff_files_OBJECTS) $(PERF_LIBS) $(CAIRO_LIBS)
-
-$(CFG)/cairo-perf-print.exe: $(cairo_perf_print_OBJECTS) $(PERF_LIBS)
- @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(cairo_perf_print_OBJECTS) $(PERF_LIBS) $(CAIRO_LIBS)
-
-$(CFG)/cairo-perf-chart.exe: $(cairo_perf_chart_OBJECTS) $(PERF_LIBS)
- @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(cairo_perf_chart_OBJECTS) $(PERF_LIBS) $(CAIRO_LIBS)
-
-$(CFG)/cairo-perf-compare-backends.exe: $(cairo_perf_compare_backends_OBJECTS) $(PERF_LIBS)
- @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(cairo_perf_compare_backends_OBJECTS) $(PERF_LIBS) $(CAIRO_LIBS)
-
-
-./micro/$(CFG)/libcairo-perf-micro.lib:
- $(MAKE) -C micro -f Makefile.win32
-
-$(top_builddir)/src/$(CFG)/cairo-static.lib:
- $(MAKE) -C $(top_srcdir)/src -f Makefile.win32
-
-$(top_builddir)/boilerplate/$(CFG)/boiler.lib:
- $(MAKE) -C $(top_srcdir)/boilerplate -f Makefile.win32
-
-$(top_builddir)/util/cairo-script/$(CFG)/libcairo-script-interpreter.lib:
- $(MAKE) -C $(top_srcdir)/util/cairo-script -f Makefile.win32
diff --git a/perf/README b/perf/README
deleted file mode 100644
index 9e402098a..000000000
--- a/perf/README
+++ /dev/null
@@ -1,239 +0,0 @@
-This is cairo's micro-benchmark performance test suite.
-
-One of the simplest ways to run this performance suite is:
-
- make perf
-
-which will give a report of the speed of each individual test. See
-more details on other options for running the suite below.
-
-A macro test suite (with full traces and more intensive benchmarks) is
-also available; for this, see http://cgit.freedesktop.org/cairo-traces.
-The macro-benchmarks are better measures of actual real-world
-performance, and should be preferred over the micro-benchmarks (and over
-make perf) for identifying performance regressions or improvements. If
-you copy or symlink this repository at cairo/perf/cairo-traces, then
-make perf will run those tests as well.
-
-Running the micro-benchmarks
-----------------------------
-The micro-benchmark performance suite is composed of a series of
-hand-written, short, synthetic tests that measure the speed of doing a
-simple operation such as painting a surface or showing glyphs. These aim
-to give very good feedback on whether a performance related patch is
-successful without causing any performance degradations elsewhere.
-
-The micro-benchmarks are compiled into a single executable called
-cairo-perf-micro, which is what "make perf" executes. Some
-examples of running it:
-
- # Report on all tests with default number of iterations:
- ./cairo-perf-micro
-
- # Report on 100 iterations of all gradient tests:
- ./cairo-perf-micro -i 100 gradient
-
- # Generate raw results for 10 iterations into cairo.perf
- ./cairo-perf-micro -r -i 10 > cairo.perf
- # Append 10 more iterations of the paint test
- ./cairo-perf-micro -r -i 10 paint >> cairo.perf
-
-Raw results aren't useful for reading directly, but are quite useful
-when using cairo-perf-diff to compare separate runs (see more
-below). The advantage of using the raw mode is that test runs can be
-generated incrementally and appended to existing reports.
-
-Generating comparisons of separate runs
----------------------------------------
-It's often useful to generate a chart showing the comparison of two
-separate runs of the cairo performance suite, (for example, after
-applying a patch intended to improve cairo's performance). The
-cairo-perf-diff script can be used to compare two report files
-generated by cairo-perf.
-
-Again, by way of example:
-
- # Show performance changes from cairo-orig.perf to cairo-patched.perf
- ./cairo-perf-diff cairo-orig.perf cairo-patched.perf
-
-This will work whether the data files were generate in raw mode (with
-cairo-perf -r) or cooked, (cairo-perf without -r).
-
-Finally, in its most powerful mode, cairo-perf-diff accepts two git
-revisions and will do all the work of checking each revision out,
-building it, running cairo-perf for each revision, and finally
-generating the report. Obviously, this mode only works if you are
-using cairo within a git repository, (and not from a tar file). Using
-this mode is as simple as passing the git revisions to be compared to
-cairo-perf-diff:
-
- # Compare cairo 1.2.6 to cairo 1.4.0
- ./cairo-perf-diff 1.2.6 1.4.0
-
- # Measure the impact of the latest commit
- ./cairo-perf-diff HEAD~1 HEAD
-
-As a convenience, this common desire to measure a single commit is
-supported by passing a single revision to cairo-perf-diff, in which
-case it will compare it to the immediately preceding commit. So for
-example:
-
- # Measure the impact of the latest commit
- ./cairo-perf-diff HEAD
-
- # Measure the impact of an arbitrary commit by SHA-1
- ./cairo-perf-diff aa883123d2af90
-
-Also, when passing git revisions to cairo-perf-diff like this, it will
-automatically cache results and re-use them rather than re-running
-cairo-perf over and over on the same versions. This means that if you
-ask for a report that you've generated in the past, cairo-perf-diff
-should return it immediately.
-
-Now, sometimes it is desirable to generate more iterations rather than
-re-using cached results. In this case, the -f flag can be used to
-force cairo-perf-diff to generate additional results in addition to
-what has been cached:
-
- # Measure the impact of latest commit (force more measurement)
- ./cairo-perf-diff -f
-
-And finally, the -f mode is most useful in conjunction with the --
-option to cairo-perf-diff which allows you to pass options to the
-underlying cairo-perf runs. This allows you to restrict the additional
-test runs to a limited subset of the tests.
-
-For example, a frequently used trick is to first generate a chart with
-a very small number of iterations for all tests:
-
- ./cairo-perf-diff HEAD
-
-Then, if any of the results look suspicious, (say there's a slowdown
-reported in the text tests, but you think the text test shouldn't be
-affected), then you can force more iterations to be tested for only
-those tests:
-
- ./cairo-perf-diff -f HEAD -- text
-
-Generating comparisons of different backends
---------------------------------------------
-An alternate question that is often asked is, "how does the speed of one
-backend compare to another?". cairo-perf-compare-backends can read files
-generated by cairo-perf and produces a comparison of the backends for every
-test.
-
-Again, by way of example:
-
- # Show relative performance of the backends
- ./cairo-perf-compare-backends cairo.perf
-
-This will work whether the data files were generate in raw mode (with
-cairo-perf -r) or cooked, (cairo-perf without -r).
-
-
-Creating a new performance test
--------------------------------
-This is where we could use everybody's help. If you have encountered a
-sequence of cairo operations that are slower than you would like, then
-please provide a performance test. Writing a test is very simple, it
-requires you to write only a small C file with a couple of functions,
-one of which exercises the cairo calls of interest.
-
-Here is the basic structure of a performance test file:
-
- /* Copyright © 2006 Kind Cairo User
- *
- * ... Licensing information here ...
- * Please copy the MIT blurb as in other tests
- */
-
- #include "cairo-perf.h"
-
- static cairo_time_t
- do_my_new_test (cairo_t *cr, int width, int height)
- {
- cairo_perf_timer_start ();
-
- /* Make the cairo calls to be measured */
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
- }
-
- void
- my_new_test (cairo_perf_t *perf, cairo_t *cr, int width, int height)
- {
- /* First do any setup for which the execution time should not
- * be measured. For example, this might include loading
- * images from disk, creating patterns, etc. */
-
- /* Then launch the actual performance testing. */
- cairo_perf_run (perf, "my_new_test", do_my_new_test);
-
- /* Finally, perform any cleanup from the setup above. */
- }
-
-That's really all there is to writing a new test. The first function
-above is the one that does the real work and returns a timing
-number. The second function is the one that will be called by the
-performance test rig (see below for how to accomplish that), and
-allows for multiple performance cases to be written in one file,
-(simply call cairo_perf_run once for each case, passing the
-appropriate callback function to each).
-
-We go through this dance of indirectly calling your own function
-through cairo_perf_run so that cairo_perf_run can call your function
-many times and measure statistical properties over the many runs.
-
-Finally, to fully integrate your new test case you just need to add
-your new test to three different lists. (TODO: We should set this up
-better so that the lists are maintained automatically---computed from
-the list of files in cairo/perf, for example). Here's what needs to be
-added:
-
- 1. Makefile.am: Add the new file name to the cairo_perf_SOURCES list
-
- 2. cairo-perf.h: Add a new CAIRO_PERF_DECL line with the name of your
- function, (my_new_test in the example above)
-
- 3. cairo-perf-micro.c: Add a new row to the list at the end of the
- file. A typical entry would look like:
-
- { my_new_test, 16, 64 }
-
- The last two numbers are a minimum and a maximum image size at
- which your test should be exercised. If these values are the same,
- then only that size will be used. If they are different, then
- intermediate sizes will be used by doubling. So in the example
- above, three tests would be performed at sizes of 16x16, 32x32 and
- 64x64.
-
-
-How to run cairo-perf-diff on WINDOWS
--------------------------------------
-This section explains the specifics of running cairo-perf-diff under
-win32 plateforms. It assumes that you have installed a UNIX-like shell
-environment such as MSYS (distributed as part of MinGW).
-
- 1. From your Mingw32 window, be sure to have all of your MSVC environ-
- ment variables set up for proper compilation using 'make'
-
- 2. Add the %GitBaseDir%/Git/bin path to your environment, replacing the
- %GitBaseDir% by whatever directory your Git version is installed to.
-
- 3. Comment out the "UNSET CDPATH" line in the git-sh-setup script
- (located inside the ...Git/bin directory) by putting a "#" at the
- beginning of the line.
-
-you should be ready to go !
-
-From your mingw32 window, go to your cairo/perf directory and run the
-cairo-perf-diff script with the right arguments.
-
-Thanks for your contributions and have fun with cairo!
-
-TODO
-----
-Add a control language for crafting and running small sets of micro
-benchmarks.
diff --git a/perf/cairo-analyse-trace.c b/perf/cairo-analyse-trace.c
deleted file mode 100644
index 994148660..000000000
--- a/perf/cairo-analyse-trace.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
-/*
- * Copyright © 2006 Mozilla Corporation
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- * Copyright © 2011 Intel Corporation
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Vladimir Vukicevic <vladimir@pobox.com>
- * Carl Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#define _GNU_SOURCE 1 /* for sched_getaffinity() and getline() */
-
-#include "../cairo-version.h" /* for the real version */
-
-#include "cairo-perf.h"
-#include "cairo-stats.h"
-
-#include "cairo-boilerplate-getopt.h"
-#include <cairo-script-interpreter.h>
-#include "cairo-missing.h"
-
-/* rudely reuse bits of the library... */
-#include "../src/cairo-error-private.h"
-
-/* For basename */
-#ifdef HAVE_LIBGEN_H
-#include <libgen.h>
-#endif
-#include <ctype.h> /* isspace() */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef _MSC_VER
-#include "dirent-win32.h"
-
-static char *
-basename_no_ext (char *path)
-{
- static char name[_MAX_FNAME + 1];
-
- _splitpath (path, NULL, NULL, name, NULL);
-
- name[_MAX_FNAME] = '\0';
-
- return name;
-}
-
-
-#else
-#include <dirent.h>
-
-static char *
-basename_no_ext (char *path)
-{
- char *dot, *name;
-
- name = basename (path);
-
- dot = strchr (name, '.');
- if (dot)
- *dot = '\0';
-
- return name;
-}
-
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <signal.h>
-
-#if HAVE_FCFINI
-#include <fontconfig/fontconfig.h>
-#endif
-
-struct trace {
- const cairo_boilerplate_target_t *target;
- void *closure;
- cairo_surface_t *surface;
-};
-
-cairo_bool_t
-cairo_perf_can_run (cairo_perf_t *perf,
- const char *name,
- cairo_bool_t *is_explicit)
-{
- unsigned int i;
- char *copy, *dot;
- cairo_bool_t ret;
-
- if (is_explicit)
- *is_explicit = FALSE;
-
- if (perf->exact_names) {
- if (is_explicit)
- *is_explicit = TRUE;
- return TRUE;
- }
-
- if (perf->num_names == 0 && perf->num_exclude_names == 0)
- return TRUE;
-
- copy = xstrdup (name);
- dot = strchr (copy, '.');
- if (dot != NULL)
- *dot = '\0';
-
- if (perf->num_names) {
- ret = TRUE;
- for (i = 0; i < perf->num_names; i++)
- if (strstr (copy, perf->names[i])) {
- if (is_explicit)
- *is_explicit = strcmp (copy, perf->names[i]) == 0;
- goto check_exclude;
- }
-
- ret = FALSE;
- goto done;
- }
-
-check_exclude:
- if (perf->num_exclude_names) {
- ret = FALSE;
- for (i = 0; i < perf->num_exclude_names; i++)
- if (strstr (copy, perf->exclude_names[i])) {
- if (is_explicit)
- *is_explicit = strcmp (copy, perf->exclude_names[i]) == 0;
- goto done;
- }
-
- ret = TRUE;
- goto done;
- }
-
-done:
- free (copy);
-
- return ret;
-}
-
-static cairo_surface_t *
-surface_create (void *closure,
- cairo_content_t content,
- double width,
- double height,
- long uid)
-{
- struct trace *args = closure;
- return cairo_surface_create_similar (args->surface, content, width, height);
-}
-
-static int user_interrupt;
-
-static void
-interrupt (int sig)
-{
- if (user_interrupt) {
- signal (sig, SIG_DFL);
- raise (sig);
- }
-
- user_interrupt = 1;
-}
-
-static void
-describe (cairo_perf_t *perf,
- void *closure)
-{
- char *description = NULL;
-
- if (perf->has_described_backend)
- return;
- perf->has_described_backend = TRUE;
-
- if (perf->target->describe)
- description = perf->target->describe (closure);
-
- if (description == NULL)
- return;
-
- free (description);
-}
-
-static void
-execute (cairo_perf_t *perf,
- struct trace *args,
- const char *trace)
-{
- char *trace_cpy, *name;
- const cairo_script_interpreter_hooks_t hooks = {
- .closure = args,
- .surface_create = surface_create,
- };
-
- trace_cpy = xstrdup (trace);
- name = basename_no_ext (trace_cpy);
-
- if (perf->list_only) {
- printf ("%s\n", name);
- free (trace_cpy);
- return;
- }
-
- describe (perf, args->closure);
-
- {
- cairo_script_interpreter_t *csi;
- cairo_status_t status;
- unsigned int line_no;
-
- csi = cairo_script_interpreter_create ();
- cairo_script_interpreter_install_hooks (csi, &hooks);
-
- cairo_script_interpreter_run (csi, trace);
-
- cairo_script_interpreter_finish (csi);
-
- line_no = cairo_script_interpreter_get_line_number (csi);
- status = cairo_script_interpreter_destroy (csi);
- if (status) {
- /* XXXX cairo_status_to_string is just wrong! */
- fprintf (stderr, "Error during replay, line %d: %s\n",
- line_no, cairo_status_to_string (status));
- }
- }
- user_interrupt = 0;
-
- free (trace_cpy);
-}
-
-static void
-usage (const char *argv0)
-{
- fprintf (stderr,
-"Usage: %s [-l] [-i iterations] [-x exclude-file] [test-names ... | traces ...]\n"
-"\n"
-"Run the cairo trace analysis suite over the given tests (all by default)\n"
-"The command-line arguments are interpreted as follows:\n"
-"\n"
-" -i iterations; specify the number of iterations per test case\n"
-" -l list only; just list selected test case names without executing\n"
-" -x exclude; specify a file to read a list of traces to exclude\n"
-"\n"
-"If test names are given they are used as sub-string matches so a command\n"
-"such as \"%s firefox\" can be used to run all firefox traces.\n"
-"Alternatively, you can specify a list of filenames to execute.\n",
- argv0, argv0);
-}
-
-static cairo_bool_t
-read_excludes (cairo_perf_t *perf,
- const char *filename)
-{
- FILE *file;
- char *line = NULL;
- size_t line_size = 0;
- char *s, *t;
-
- file = fopen (filename, "r");
- if (file == NULL)
- return FALSE;
-
- while (getline (&line, &line_size, file) != -1) {
- /* terminate the line at a comment marker '#' */
- s = strchr (line, '#');
- if (s)
- *s = '\0';
-
- /* whitespace delimits */
- s = line;
- while (*s != '\0' && isspace (*s))
- s++;
-
- t = s;
- while (*t != '\0' && ! isspace (*t))
- t++;
-
- if (s != t) {
- int i = perf->num_exclude_names;
- perf->exclude_names = xrealloc (perf->exclude_names,
- sizeof (char *) * (i+1));
- perf->exclude_names[i] = strndup (s, t-s);
- perf->num_exclude_names++;
- }
- }
- free (line);
-
- fclose (file);
-
- return TRUE;
-}
-
-static void
-parse_options (cairo_perf_t *perf,
- int argc,
- char *argv[])
-{
- char *end;
- int c;
-
- perf->list_only = FALSE;
- perf->names = NULL;
- perf->num_names = 0;
- perf->exclude_names = NULL;
- perf->num_exclude_names = 0;
-
- while (1) {
- c = _cairo_getopt (argc, argv, "i:lx:");
- if (c == -1)
- break;
-
- switch (c) {
- case 'i':
- perf->exact_iterations = TRUE;
- perf->iterations = strtoul (optarg, &end, 10);
- if (*end != '\0') {
- fprintf (stderr, "Invalid argument for -i (not an integer): %s\n",
- optarg);
- exit (1);
- }
- break;
- case 'l':
- perf->list_only = TRUE;
- break;
- case 'x':
- if (! read_excludes (perf, optarg)) {
- fprintf (stderr, "Invalid argument for -x (not readable file): %s\n",
- optarg);
- exit (1);
- }
- break;
- default:
- fprintf (stderr, "Internal error: unhandled option: %c\n", c);
- /* fall-through */
- case '?':
- usage (argv[0]);
- exit (1);
- }
- }
-
- if (optind < argc) {
- perf->names = &argv[optind];
- perf->num_names = argc - optind;
- }
-}
-
-static void
-cairo_perf_fini (cairo_perf_t *perf)
-{
- cairo_boilerplate_free_targets (perf->targets);
- cairo_boilerplate_fini ();
-
- cairo_debug_reset_static_data ();
-#if HAVE_FCFINI
- FcFini ();
-#endif
-}
-
-static cairo_bool_t
-have_trace_filenames (cairo_perf_t *perf)
-{
- unsigned int i;
-
- if (perf->num_names == 0)
- return FALSE;
-
-#if HAVE_UNISTD_H
- for (i = 0; i < perf->num_names; i++)
- if (access (perf->names[i], R_OK) == 0)
- return TRUE;
-#endif
-
- return FALSE;
-}
-
-static cairo_status_t
-print (void *closure, const unsigned char *data, unsigned int length)
-{
- fwrite (data, length, 1, closure);
- return CAIRO_STATUS_SUCCESS;
-}
-
-static void
-cairo_perf_trace (cairo_perf_t *perf,
- const cairo_boilerplate_target_t *target,
- const char *trace)
-{
- struct trace args;
- cairo_surface_t *real;
-
- args.target = target;
- real = target->create_surface (NULL,
- CAIRO_CONTENT_COLOR_ALPHA,
- 1, 1,
- 1, 1,
- CAIRO_BOILERPLATE_MODE_PERF,
- &args.closure);
- args.surface =
- cairo_surface_create_observer (real,
- CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS);
- cairo_surface_destroy (real);
- if (cairo_surface_status (args.surface)) {
- fprintf (stderr,
- "Error: Failed to create target surface: %s\n",
- target->name);
- return;
- }
-
- printf ("Observing '%s'...", trace);
- fflush (stdout);
-
- execute (perf, &args, trace);
-
- printf ("\n");
- cairo_device_observer_print (cairo_surface_get_device (args.surface),
- print, stdout);
- fflush (stdout);
-
- cairo_surface_destroy (args.surface);
-
- if (target->cleanup)
- target->cleanup (args.closure);
-}
-
-static void
-warn_no_traces (const char *message,
- const char *trace_dir)
-{
- fprintf (stderr,
-"Error: %s '%s'.\n"
-"Have you cloned the cairo-traces repository and uncompressed the traces?\n"
-" git clone git://anongit.freedesktop.org/cairo-traces\n"
-" cd cairo-traces && make\n"
-"Or set the env.var CAIRO_TRACE_DIR to point to your traces?\n",
- message, trace_dir);
-}
-
-static int
-cairo_perf_trace_dir (cairo_perf_t *perf,
- const cairo_boilerplate_target_t *target,
- const char *dirname)
-{
- DIR *dir;
- struct dirent *de;
- int num_traces = 0;
- cairo_bool_t force;
- cairo_bool_t is_explicit;
-
- dir = opendir (dirname);
- if (dir == NULL)
- return 0;
-
- force = FALSE;
- if (cairo_perf_can_run (perf, dirname, &is_explicit))
- force = is_explicit;
-
- while ((de = readdir (dir)) != NULL) {
- char *trace;
- struct stat st;
-
- if (de->d_name[0] == '.')
- continue;
-
- xasprintf (&trace, "%s/%s", dirname, de->d_name);
- if (stat (trace, &st) != 0)
- goto next;
-
- if (S_ISDIR(st.st_mode)) {
- num_traces += cairo_perf_trace_dir (perf, target, trace);
- } else {
- const char *dot;
-
- dot = strrchr (de->d_name, '.');
- if (dot == NULL)
- goto next;
- if (strcmp (dot, ".trace"))
- goto next;
-
- num_traces++;
- if (!force && ! cairo_perf_can_run (perf, de->d_name, NULL))
- goto next;
-
- cairo_perf_trace (perf, target, trace);
- }
-next:
- free (trace);
-
- }
- closedir (dir);
-
- return num_traces;
-}
-
-int
-main (int argc,
- char *argv[])
-{
- cairo_perf_t perf;
- const char *trace_dir = "cairo-traces:/usr/src/cairo-traces:/usr/share/cairo-traces";
- unsigned int n;
- int i;
-
- parse_options (&perf, argc, argv);
-
- signal (SIGINT, interrupt);
-
- if (getenv ("CAIRO_TRACE_DIR") != NULL)
- trace_dir = getenv ("CAIRO_TRACE_DIR");
-
- perf.targets = cairo_boilerplate_get_targets (&perf.num_targets, NULL);
-
- /* do we have a list of filenames? */
- perf.exact_names = have_trace_filenames (&perf);
-
- for (i = 0; i < perf.num_targets; i++) {
- const cairo_boilerplate_target_t *target = perf.targets[i];
-
- if (! perf.list_only && ! target->is_measurable)
- continue;
-
- perf.target = target;
- perf.has_described_backend = FALSE;
-
- if (perf.exact_names) {
- for (n = 0; n < perf.num_names; n++) {
- struct stat st;
-
- if (stat (perf.names[n], &st) == 0) {
- if (S_ISDIR (st.st_mode)) {
- cairo_perf_trace_dir (&perf, target, perf.names[n]);
- } else
- cairo_perf_trace (&perf, target, perf.names[n]);
- }
- }
- } else {
- int num_traces = 0;
- const char *dir;
-
- dir = trace_dir;
- do {
- char buf[1024];
- const char *end = strchr (dir, ':');
- if (end != NULL) {
- memcpy (buf, dir, end-dir);
- buf[end-dir] = '\0';
- end++;
-
- dir = buf;
- }
-
- num_traces += cairo_perf_trace_dir (&perf, target, dir);
- dir = end;
- } while (dir != NULL);
-
- if (num_traces == 0) {
- warn_no_traces ("Found no traces in", trace_dir);
- return 1;
- }
- }
-
- if (perf.list_only)
- break;
- }
-
- cairo_perf_fini (&perf);
-
- return 0;
-}
diff --git a/perf/cairo-perf-chart.c b/perf/cairo-perf-chart.c
deleted file mode 100644
index 738fe5c7b..000000000
--- a/perf/cairo-perf-chart.c
+++ /dev/null
@@ -1,1113 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <math.h>
-#include <assert.h>
-
-struct chart {
- cairo_perf_report_t *reports;
- const char **names;
-
- cairo_t *cr;
- int width, height;
- int num_tests, num_reports;
- double min_value, max_value;
- double *average;
-
- cairo_bool_t use_html;
- cairo_bool_t relative;
-};
-struct color {
- double red, green, blue;
-};
-
-#define FONT_SIZE 12
-#define PAD (4)
-
-static double
-to_factor (double x)
-{
-#if 1
- if (x > 1.)
- return (x-1) * 100.;
- else
- return (1. - 1./x) * 100.;
-#else
- return log (x);
-#endif
-}
-
-static int
-_double_cmp (const void *_a,
- const void *_b)
-{
- const double *a = _a;
- const double *b = _b;
-
- if (*a > *b)
- return 1;
- if (*a < *b)
- return -1;
- return 0;
-}
-
-static void
-trim_outliers (double *values,
- int num_values,
- double *min,
- double *max)
-{
- double q1, q3, iqr;
- double outlier_min, outlier_max;
- int i;
-
- /* First, identify any outliers, using the definition of "mild
- * outliers" from:
- *
- * http://en.wikipedia.org/wiki/Outliers
- *
- * Which is that outliers are any values less than Q1 - 1.5 * IQR
- * or greater than Q3 + 1.5 * IQR where Q1 and Q3 are the first
- * and third quartiles and IQR is the inter-quartile range (Q3 -
- * Q1).
- */
- qsort (values, num_values,
- sizeof (double), _double_cmp);
-
- q1 = values[1*num_values / 6];
- q3 = values[5*num_values / 6];
-
- iqr = q3 - q1;
-
- outlier_min = q1 - 3 * iqr;
- outlier_max = q3 + 3 * iqr;
-
- i = 0;
- while (i < num_values && values[i] < outlier_min)
- i++;
- if (i == num_values)
- return;
-
- *min = values[i];
-
- while (i < num_values && values[i] <= outlier_max)
- i++;
-
- *max = values[i-1];
-}
-
-static void
-find_ranges (struct chart *chart)
-{
- test_report_t **tests, *min_test;
- double *values;
- int num_values, size_values;
- double min = 0, max = 0;
- double test_time;
- int seen_non_null;
- int num_tests = 0;
- double slow_sum = 0, fast_sum = 0, sum;
- int slow_count = 0, fast_count = 0;
- int *count;
- int i;
-
- num_values = 0;
- size_values = 64;
- values = xmalloc (size_values * sizeof (double));
-
- chart->average = xmalloc(chart->num_reports * sizeof(double));
- count = xmalloc(chart->num_reports * sizeof(int));
- for (i = 0; i < chart->num_reports; i++) {
- chart->average[i] = 0;
- count[i] = 0;
- }
-
- tests = xmalloc (chart->num_reports * sizeof (test_report_t *));
- for (i = 0; i < chart->num_reports; i++)
- tests[i] = chart->reports[i].tests;
-
- while (1) {
- /* We expect iterations values of 0 when multiple raw reports
- * for the same test have been condensed into the stats of the
- * first. So we just skip these later reports that have no
- * stats. */
- seen_non_null = 0;
- for (i = 0; i < chart->num_reports; i++) {
- while (tests[i]->name && tests[i]->stats.iterations == 0)
- tests[i]++;
- if (tests[i]->name)
- seen_non_null++;
- }
- if (! seen_non_null)
- break;
-
- num_tests++;
-
- /* Find the minimum of all current tests, (we have to do this
- * in case some reports don't have a particular test). */
- for (i = 0; i < chart->num_reports; i++) {
- if (tests[i]->name) {
- min_test = tests[i];
- break;
- }
- }
- for (++i; i < chart->num_reports; i++) {
- if (tests[i]->name && test_report_cmp_name (tests[i], min_test) < 0)
- min_test = tests[i];
- }
-
- test_time = 0;
- for (i = 0; i < chart->num_reports; i++) {
- double report_time = HUGE_VAL;
-
- while (tests[i]->name &&
- test_report_cmp_name (tests[i], min_test) == 0)
- {
- double time = tests[i]->stats.min_ticks;
- if (time < report_time) {
- time /= tests[i]->stats.ticks_per_ms;
- if (time < report_time)
- report_time = time;
- }
- tests[i]++;
- }
-
- if (report_time != HUGE_VAL) {
- if (test_time == 0)
- test_time = report_time;
-
- chart->average[i] += report_time / test_time;
- count[i]++;
-
- if (chart->relative) {
- if (test_time != report_time) {
- double v = to_factor (test_time / report_time);
- if (num_values == size_values) {
- size_values *= 2;
- values = xrealloc (values,
- size_values * sizeof (double));
- }
- values[num_values++] = v;
- if (v < min)
- min = v;
- if (v > max)
- max = v;
- if (v > 0)
- fast_sum += v/100, fast_count++;
- else
- slow_sum += v/100, slow_count++;
- sum += v/100;
- printf ("%s %d: %f\n", min_test->name, num_values, v);
- }
- } else {
- if (report_time < min)
- min = report_time;
- if (report_time > max)
- max = report_time;
- }
- }
- }
- }
-
- for (i = 0; i < chart->num_reports; i++) {
- if (count[i])
- chart->average[i] = count[i] / chart->average[i];
- else
- chart->average[i] = 1.;
- }
-
- if (chart->relative)
- trim_outliers (values, num_values, &min, &max);
- chart->min_value = min;
- chart->max_value = max;
- chart->num_tests = num_tests + !!chart->relative;
-
- free (values);
- free (tests);
- free (count);
-
- printf ("%d: slow[%d] average: %f, fast[%d] average: %f, %f\n",
- num_values, slow_count, slow_sum / slow_count, fast_count, fast_sum / fast_count, sum / num_values);
-}
-
-#define SET_COLOR(C, R, G, B) (C)->red = (R), (C)->green = (G), (C)->blue = (B)
-static void
-hsv_to_rgb (double h,
- double s,
- double v,
- struct color *color)
-{
- double m, n, f;
- int i;
-
- while (h < 0)
- h += 6.;
- while (h > 6.)
- h -= 6.;
-
- if (s < 0.)
- s = 0.;
- if (s > 1.)
- s = 1.;
-
- if (v < 0.)
- v = 0.;
- if (v > 1.)
- v = 1.;
-
- i = floor (h);
- f = h - i;
- if ((i & 1) == 0)
- f = 1 - f;
-
- m = v * (1 - s);
- n = v * (1 - s * f);
- switch(i){
- default:
- case 6:
- case 0: SET_COLOR (color, v, n, m); break;
- case 1: SET_COLOR (color, n, v, m); break;
- case 2: SET_COLOR (color, m, v, n); break;
- case 3: SET_COLOR (color, m, n, v); break;
- case 4: SET_COLOR (color, n, m, v); break;
- case 5: SET_COLOR (color, v, m, n); break;
- }
-}
-
-static void set_report_color (struct chart *chart, int report)
-{
- struct color color;
-
- hsv_to_rgb (6. / chart->num_reports * report, .7, .7, &color);
- cairo_set_source_rgb (chart->cr, color.red, color.green, color.blue);
-}
-
-static void set_report_gradient (struct chart *chart, int report,
- double x, double y, double w, double h)
-{
- struct color color;
- cairo_pattern_t *p;
-
- hsv_to_rgb (6. / chart->num_reports * report, .7, .7, &color);
-
- p = cairo_pattern_create_linear (x, 0, x+w, 0);
- cairo_pattern_add_color_stop_rgba (p, 0.0,
- color.red, color.green, color.blue,
- .50);
- cairo_pattern_add_color_stop_rgba (p, 0.5,
- color.red, color.green, color.blue,
- .50);
- cairo_pattern_add_color_stop_rgba (p, 1.0,
- color.red, color.green, color.blue,
- 1.0);
- cairo_set_source (chart->cr, p);
- cairo_pattern_destroy (p);
-}
-
-static void
-test_background (struct chart *c,
- int test)
-{
- double dx, x;
-
- dx = c->width / (double) c->num_tests;
- x = dx * test;
-
- if (test & 1)
- cairo_set_source_rgba (c->cr, .2, .2, .2, .2);
- else
- cairo_set_source_rgba (c->cr, .8, .8, .8, .2);
-
- cairo_rectangle (c->cr, floor (x), 0,
- floor (dx + x) - floor (x), c->height);
- cairo_fill (c->cr);
-}
-
-static void
-add_chart (struct chart *c,
- int test,
- int report,
- double value)
-{
- double dx, dy, x;
-
- if (fabs (value) < 0.1)
- return;
-
- if (c->relative) {
- cairo_text_extents_t extents;
- char buf[80];
- double y;
-
- dy = (c->height/2. - PAD) / MAX (-c->min_value, c->max_value);
- /* the first report is always skipped, as it is used as the baseline */
- dx = c->width / (double) (c->num_tests * c->num_reports);
- x = dx * (c->num_reports * test + report - .5);
-
- cairo_rectangle (c->cr,
- floor (x), c->height / 2.,
- floor (x + dx) - floor (x),
- ceil (-dy*value - c->height/2.) + c->height/2.);
- if (dx < 5) {
- set_report_color (c, report);
- cairo_fill (c->cr);
- } else {
- set_report_gradient (c, report,
- floor (x), c->height / 2.,
- floor (x + dx) - floor (x),
- ceil (-dy*value - c->height/2.) + c->height/2.);
-
- cairo_fill_preserve (c->cr);
- cairo_save (c->cr);
- cairo_clip_preserve (c->cr);
- set_report_color (c, report);
- cairo_stroke (c->cr);
- cairo_restore (c->cr);
- }
-
- /* Skip the label if the difference between the two is less than 0.1% */
- if (fabs (value) < 0.1)
- return;
-
- cairo_save (c->cr);
- cairo_set_font_size (c->cr, dx - 2);
-
- if (value < 0) {
- sprintf (buf, "%.1f", -value/100 + 1);
- } else {
- sprintf (buf, "%.1f", value/100 + 1);
- }
- cairo_text_extents (c->cr, buf, &extents);
-
- /* will it be clipped? */
- y = -dy * value;
- if (y < -c->height/2) {
- y = -c->height/2;
- } else if (y > c->height/2) {
- y = c->height/2;
- }
-
- if (y < 0) {
- if (y > -extents.width - 6)
- y -= extents.width + 6;
- } else {
- if (y < extents.width + 6)
- y += extents.width + 6;
- }
-
- cairo_translate (c->cr,
- floor (x) + (floor (x + dx) - floor (x))/2,
- floor (y) + c->height/2.);
- cairo_rotate (c->cr, -M_PI/2);
- if (y < 0) {
- cairo_move_to (c->cr, -extents.x_bearing -extents.width - 4, -extents.y_bearing/2);
- } else {
- cairo_move_to (c->cr, 2, -extents.y_bearing/2);
- }
-
- cairo_set_source_rgb (c->cr, .95, .95, .95);
- cairo_show_text (c->cr, buf);
- cairo_restore (c->cr);
- } else {
- dy = (c->height - PAD) / c->max_value;
- dx = c->width / (double) (c->num_tests * (c->num_reports+1));
- x = dx * ((c->num_reports+1) * test + report + .5);
-
- cairo_rectangle (c->cr,
- floor (x), c->height,
- floor (x + dx) - floor (x),
- floor (c->height - dy*value) - c->height);
- if (dx < 5) {
- set_report_color (c, report);
- cairo_fill (c->cr);
- } else {
- set_report_gradient (c, report,
- floor (x), c->height,
- floor (x + dx) - floor (x),
- floor (c->height - dy*value) - c->height);
- cairo_fill_preserve (c->cr);
- cairo_save (c->cr);
- cairo_clip_preserve (c->cr);
- set_report_color (c, report);
- cairo_stroke (c->cr);
- cairo_restore (c->cr);
- }
- }
-}
-
-static void
-add_average (struct chart *c,
- int test,
- int report,
- double value)
-{
- double dx, dy, x;
- cairo_text_extents_t extents;
- char buf[80];
- double y;
-
- if (fabs (value) < 0.1)
- return;
-
- dy = (c->height/2. - PAD) / MAX (-c->min_value, c->max_value);
- /* the first report is always skipped, as it is used as the baseline */
- dx = c->width / (double) (c->num_tests * c->num_reports);
- x = dx * (c->num_reports * test + report - .5);
-
- cairo_rectangle (c->cr,
- floor (x), c->height / 2.,
- floor (x + dx) - floor (x),
- ceil (-dy*value - c->height/2.) + c->height/2.);
- if (dx < 5) {
- set_report_color (c, report);
- cairo_fill (c->cr);
- } else {
- set_report_gradient (c, report,
- floor (x), c->height / 2.,
- floor (x + dx) - floor (x),
- ceil (-dy*value - c->height/2.) + c->height/2.);
-
- cairo_fill_preserve (c->cr);
- cairo_save (c->cr);
- cairo_clip_preserve (c->cr);
- set_report_color (c, report);
- cairo_stroke (c->cr);
- cairo_restore (c->cr);
- }
-
- /* Skip the label if the difference between the two is less than 0.1% */
- if (fabs (value) < 0.1)
- return;
-
- cairo_save (c->cr);
- cairo_set_font_size (c->cr, dx - 2);
-
- if (value < 0) {
- sprintf (buf, "%.1f", -value/100 + 1);
- } else {
- sprintf (buf, "%.1f", value/100 + 1);
- }
- cairo_text_extents (c->cr, buf, &extents);
-
- /* will it be clipped? */
- y = -dy * value;
- if (y < -c->height/2) {
- y = -c->height/2;
- } else if (y > c->height/2) {
- y = c->height/2;
- }
-
- if (y < 0) {
- if (y > -extents.width - 6)
- y -= extents.width + 6;
- } else {
- if (y < extents.width + 6)
- y += extents.width + 6;
- }
-
- cairo_translate (c->cr,
- floor (x) + (floor (x + dx) - floor (x))/2,
- floor (y) + c->height/2.);
- cairo_rotate (c->cr, -M_PI/2);
- if (y < 0) {
- cairo_move_to (c->cr, -extents.x_bearing -extents.width - 4, -extents.y_bearing/2);
- } else {
- cairo_move_to (c->cr, 2, -extents.y_bearing/2);
- }
-
- cairo_set_source_rgb (c->cr, .95, .95, .95);
- cairo_show_text (c->cr, buf);
- cairo_restore (c->cr);
-}
-
-static void
-add_label (struct chart *c,
- int test,
- const char *label)
-{
- cairo_text_extents_t extents;
- double dx, x;
-
- cairo_save (c->cr);
- dx = c->width / (double) c->num_tests;
- if (dx / 2 - PAD < 4)
- return;
- cairo_set_font_size (c->cr, dx / 2 - PAD);
- cairo_text_extents (c->cr, label, &extents);
-
- cairo_set_source_rgb (c->cr, .5, .5, .5);
-
- x = (test + .5) * dx;
- cairo_save (c->cr);
- cairo_translate (c->cr, x, c->height - PAD / 2);
- cairo_rotate (c->cr, -M_PI/2);
- cairo_move_to (c->cr, 0, -extents.y_bearing/2);
- cairo_show_text (c->cr, label);
- cairo_restore (c->cr);
-
- cairo_save (c->cr);
- cairo_translate (c->cr, x, PAD / 2);
- cairo_rotate (c->cr, -M_PI/2);
- cairo_move_to (c->cr, -extents.width, -extents.y_bearing/2);
- cairo_show_text (c->cr, label);
- cairo_restore (c->cr);
-
- cairo_restore (c->cr);
-}
-
-static void
-add_base_line (struct chart *c)
-{
- double y;
-
- cairo_save (c->cr);
- cairo_set_line_width (c->cr, 2.);
- if (c->relative) {
- y = c->height / 2.;
- } else {
- y = c->height;
- }
- cairo_move_to (c->cr, 0, y);
- cairo_line_to (c->cr, c->width, y);
- cairo_set_source_rgb (c->cr, 1, 1, 1);
- cairo_stroke (c->cr);
- cairo_restore (c->cr);
-}
-
-static void
-add_absolute_lines (struct chart *c)
-{
- const double dashes[] = { 2, 4 };
- const double vlog_steps[] = { 10, 5, 4, 3, 2, 1, .5, .4, .3, .2, .1};
- double v, y, dy;
- unsigned int i;
- char buf[80];
- cairo_text_extents_t extents;
-
- v = c->max_value / 2.;
-
- for (i = 0; i < sizeof (vlog_steps) / sizeof (vlog_steps[0]); i++) {
- double vlog = log (v) / log (vlog_steps[i]);
- if (vlog > 1) {
- v = pow (vlog_steps[i], floor (vlog));
- goto done;
- }
- }
- return;
-done:
-
- dy = (c->height - PAD) / c->max_value;
-
- cairo_save (c->cr);
- cairo_set_line_width (c->cr, 1.);
- cairo_set_dash (c->cr, dashes, sizeof (dashes) / sizeof (dashes[0]), 0);
-
- i = 0;
- do {
- y = c->height - ++i * v * dy;
- if (y < PAD)
- break;
-
- cairo_set_font_size (c->cr, 8);
-
- sprintf (buf, "%.0fs", i*v/1000);
- cairo_text_extents (c->cr, buf, &extents);
-
- cairo_set_source_rgba (c->cr, .75, 0, 0, .95);
- cairo_move_to (c->cr, 1-extents.x_bearing, floor (y) - (extents.height/2 + extents.y_bearing) + .5);
- cairo_show_text (c->cr, buf);
-
- cairo_move_to (c->cr, c->width-extents.width-1, floor (y) - (extents.height/2 + extents.y_bearing) + .5);
- cairo_show_text (c->cr, buf);
-
- cairo_set_source_rgba (c->cr, .75, 0, 0, .5);
- cairo_move_to (c->cr,
- ceil (extents.width + extents.x_bearing + 2),
- floor (y) + .5);
- cairo_line_to (c->cr,
- floor (c->width - (extents.width + extents.x_bearing + 2)),
- floor (y) + .5);
- cairo_stroke (c->cr);
- } while (1);
-
- cairo_restore (c->cr);
-}
-
-static void
-add_relative_lines (struct chart *c)
-{
- const double dashes[] = { 2, 4 };
- const double v_steps[] = { 10, 5, 1, .5, .1, .05, .01};
- const int precision_steps[] = { 0, 0, 0, 1, 1, 2, 2};
- int precision;
- double v, y, dy, mid;
- unsigned int i;
- char buf[80];
- cairo_text_extents_t extents;
-
- v = MAX (-c->min_value, c->max_value) / 200;
-
- for (i = 0; i < sizeof (v_steps) / sizeof (v_steps[0]); i++) {
- if (v > v_steps[i]) {
- v = v_steps[i];
- precision = precision_steps[i];
- goto done;
- }
- }
- return;
-done:
-
- mid = c->height/2.;
- dy = (mid - PAD) / MAX (-c->min_value, c->max_value);
-
- cairo_save (c->cr);
- cairo_set_line_width (c->cr, 1.);
- cairo_set_dash (c->cr, dashes, sizeof (dashes) / sizeof (dashes[0]), 0);
- cairo_set_font_size (c->cr, 8);
-
- i = 0;
- do {
- y = ++i * v * dy * 100;
- if (y > mid)
- break;
-
- sprintf (buf, "%.*fx", precision, i*v + 1);
- cairo_text_extents (c->cr, buf, &extents);
-
- cairo_set_source_rgba (c->cr, .75, 0, 0, .95);
- cairo_move_to (c->cr, 1-extents.x_bearing, floor (mid + y) - (extents.height/2 + extents.y_bearing) + .5);
- cairo_show_text (c->cr, buf);
-
- cairo_move_to (c->cr, c->width-extents.width-1, floor (mid + y) - (extents.height/2 + extents.y_bearing) + .5);
- cairo_show_text (c->cr, buf);
-
- cairo_set_source_rgba (c->cr, 0, .75, 0, .95);
- cairo_move_to (c->cr, 1-extents.x_bearing, ceil (mid - y) - (extents.height/2 + extents.y_bearing) + .5);
- cairo_show_text (c->cr, buf);
-
- cairo_move_to (c->cr, c->width-extents.width-1, ceil (mid - y) - (extents.height/2 + extents.y_bearing) + .5);
- cairo_show_text (c->cr, buf);
-
- /* trim the dashes to no obscure the labels */
- cairo_set_source_rgba (c->cr, .75, 0, 0, .5);
- cairo_move_to (c->cr,
- ceil (extents.width + extents.x_bearing + 2),
- floor (mid + y) + .5);
- cairo_line_to (c->cr,
- floor (c->width - (extents.width + 2)),
- floor (mid + y) + .5);
- cairo_stroke (c->cr);
-
- cairo_set_source_rgba (c->cr, 0, .75, 0, .5);
- cairo_move_to (c->cr,
- ceil (extents.width + extents.x_bearing + 2),
- ceil (mid - y) + .5);
- cairo_line_to (c->cr,
- floor (c->width - (extents.width + 2)),
- ceil (mid - y) + .5);
- cairo_stroke (c->cr);
-
- } while (1);
-
- cairo_restore (c->cr);
-}
-
-static void
-add_slower_faster_guide (struct chart *c)
-{
- cairo_text_extents_t extents;
-
- cairo_save (c->cr);
-
- cairo_set_font_size (c->cr, FONT_SIZE);
-
- cairo_text_extents (c->cr, "FASTER", &extents);
- cairo_set_source_rgba (c->cr, 0, .75, 0, .5);
- cairo_move_to (c->cr,
- c->width/4. - extents.width/2. + extents.x_bearing,
- 1 - extents.y_bearing);
- cairo_show_text (c->cr, "FASTER");
- cairo_move_to (c->cr,
- 3*c->width/4. - extents.width/2. + extents.x_bearing,
- 1 - extents.y_bearing);
- cairo_show_text (c->cr, "FASTER");
-
- cairo_text_extents (c->cr, "SLOWER", &extents);
- cairo_set_source_rgba (c->cr, .75, 0, 0, .5);
- cairo_move_to (c->cr,
- c->width/4. - extents.width/2. + extents.x_bearing,
- c->height - 1);
- cairo_show_text (c->cr, "SLOWER");
- cairo_move_to (c->cr,
- 3*c->width/4. - extents.width/2. + extents.x_bearing,
- c->height - 1);
- cairo_show_text (c->cr, "SLOWER");
-
- cairo_restore (c->cr);
-}
-
-static void
-cairo_perf_reports_compare (struct chart *chart,
- cairo_bool_t print)
-{
- test_report_t **tests, *min_test;
- double test_time, best_time;
- int num_test = 0;
- int seen_non_null;
- int i;
-
- tests = xmalloc (chart->num_reports * sizeof (test_report_t *));
- for (i = 0; i < chart->num_reports; i++)
- tests[i] = chart->reports[i].tests;
-
- if (print) {
- if (chart->use_html) {
- printf ("<table style=\"text-align:right\" cellspacing=\"4\">\n");
- printf ("<tr><td></td>");
- for (i = 0; i < chart->num_reports; i++) {
- printf ("<td>%s</td>", chart->names[i] ? chart->names[i] : "");
- }
- printf ("</tr>\n");
- }
- }
-
- while (1) {
- /* We expect iterations values of 0 when multiple raw reports
- * for the same test have been condensed into the stats of the
- * first. So we just skip these later reports that have no
- * stats. */
- seen_non_null = 0;
- for (i = 0; i < chart->num_reports; i++) {
- while (tests[i]->name && tests[i]->stats.iterations == 0)
- tests[i]++;
- if (tests[i]->name)
- seen_non_null++;
- }
- if (! seen_non_null)
- break;
-
- /* Find the minimum of all current tests, (we have to do this
- * in case some reports don't have a particular test). */
- for (i = 0; i < chart->num_reports; i++) {
- if (tests[i]->name) {
- min_test = tests[i];
- break;
- }
- }
- for (++i; i < chart->num_reports; i++) {
- if (tests[i]->name && test_report_cmp_name (tests[i], min_test) < 0)
- min_test = tests[i];
- }
-
- add_label (chart, num_test, min_test->name);
- if (print) {
- if (chart->use_html) {
- printf ("<tr><td>%s</td>", min_test->name);
- } else {
- if (min_test->size) {
- printf ("%16s, size %4d:\n",
- min_test->name,
- min_test->size);
- } else {
- printf ("%26s:",
- min_test->name);
- }
- }
- }
-
- test_time = 0;
- best_time = HUGE_VAL;
- for (i = 0; i < chart->num_reports; i++) {
- test_report_t *initial = tests[i];
- double report_time = HUGE_VAL;
-
- while (tests[i]->name &&
- test_report_cmp_name (tests[i], min_test) == 0)
- {
- double time = tests[i]->stats.min_ticks;
- if (time < report_time) {
- time /= tests[i]->stats.ticks_per_ms;
- if (time < report_time)
- report_time = time;
- }
- tests[i]++;
- }
-
- if (test_time == 0 && report_time != HUGE_VAL)
- test_time = report_time;
- if (report_time < best_time)
- best_time = report_time;
-
- tests[i] = initial;
- }
-
- for (i = 0; i < chart->num_reports; i++) {
- double report_time = HUGE_VAL;
-
- while (tests[i]->name &&
- test_report_cmp_name (tests[i], min_test) == 0)
- {
- double time = tests[i]->stats.min_ticks;
- if (time > 0) {
- time /= tests[i]->stats.ticks_per_ms;
- if (time < report_time)
- report_time = time;
- }
- tests[i]++;
- }
-
- if (print) {
- if (chart->use_html) {
- if (report_time < HUGE_VAL) {
- if (report_time / best_time < 1.01) {
- printf ("<td><strong>%.1f</strong></td>", report_time/1000);
- } else {
- printf ("<td>%.1f</td>", report_time/1000);
- }
- } else {
- printf ("<td></td>");
- }
- } else {
- if (report_time < HUGE_VAL)
- printf (" %6.1f", report_time/1000);
- else
- printf (" ---");
- }
- }
-
- if (report_time < HUGE_VAL) {
- if (chart->relative) {
- add_chart (chart, num_test, i,
- to_factor (test_time / report_time));
- } else {
- add_chart (chart, num_test, i, report_time);
- }
- }
- }
-
- if (print) {
- if (chart->use_html) {
- printf ("</tr>\n");
- } else {
- printf ("\n");
- }
- }
-
- num_test++;
- }
- if (chart->relative) {
- add_label (chart, num_test, "(geometric mean)");
- for (i = 0; i < chart->num_reports; i++)
- add_average (chart, num_test, i, to_factor (chart->average[i]));
- }
- free (tests);
-
- if (print) {
- if (chart->use_html)
- printf ("</table>\n");
-
- printf ("\n");
- for (i = 0; i < chart->num_reports; i++) {
- if (chart->names[i]) {
- printf ("[%s] %s\n",
- chart->names[i], chart->reports[i].configuration);
- } else {
- printf ("[%d] %s\n",
- i, chart->reports[i].configuration);
- }
- }
- }
-}
-
-static void
-add_legend (struct chart *chart)
-{
- cairo_text_extents_t extents;
- const char *str;
- int i, x, y;
-
- cairo_set_font_size (chart->cr, FONT_SIZE);
-
- x = PAD;
- y = chart->height + PAD;
- for (i = chart->relative; i < chart->num_reports; i++) {
- str = chart->names[i] ?
- chart->names[i] : chart->reports[i].configuration;
-
- set_report_color (chart, i);
-
- cairo_rectangle (chart->cr, x, y + 6, 8, 8);
- cairo_fill (chart->cr);
-
- cairo_set_source_rgb (chart->cr, 1, 1, 1);
- cairo_move_to (chart->cr, x + 10, y + FONT_SIZE + PAD / 2.);
- cairo_text_extents (chart->cr, str, &extents);
- cairo_show_text (chart->cr, str);
-
- x += 10 + 2 * PAD + ceil (extents.width);
- }
-
- if (chart->relative) {
- char buf[80];
-
- str = chart->names[0] ?
- chart->names[0] : chart->reports[0].configuration;
-
- sprintf (buf, "(relative to %s)", str);
- cairo_text_extents (chart->cr, buf, &extents);
-
- cairo_set_source_rgb (chart->cr, 1, 1, 1);
- cairo_move_to (chart->cr,
- chart->width - 1 - extents.width,
- y + FONT_SIZE + PAD / 2.);
- cairo_show_text (chart->cr, buf);
- }
-}
-
-static void
-usage (void)
-{
- printf("Usage:\n");
- printf(" cairo-perf-chart [OPTION...] <result1> <result2>...<resultN>\n");
- printf("\n");
- printf("Help Options:\n");
- printf(" --help, --?\tShow help options\n");
- printf("\n");
- printf("Application Options:\n");
- printf(" --html\tOutput an HTML table comparing the results\n");
- printf(" --height=\tSet the height of the output graph"\
- " (default 480)\n");
- printf(" --width=\tSet the width of the output graph"\
- " (default 640)\n");
- printf(" --name\tSet the name of graph series."\
- " This only sets the name for the\n\t\tfirst result file."\
- " The graph series is usually set using the\n\t\tfile name for"\
- " the results file.\n");
- printf("\n");
- printf("Example:\n");
- printf(" cairo-perf-chart --width=1024 --height=768 run1 run2 run3\n");
- return;
-}
-
-int
-main (int argc,
- const char *argv[])
-{
- cairo_surface_t *surface;
- struct chart chart;
- test_report_t *t;
- int i;
-
- chart.use_html = 0;
- chart.width = 640;
- chart.height = 480;
-
- chart.reports = xcalloc (argc-1, sizeof (cairo_perf_report_t));
- chart.names = xcalloc (argc-1, sizeof (cairo_perf_report_t));
-
- chart.num_reports = 0;
- for (i = 1; i < argc; i++) {
- if (strcmp (argv[i], "--html") == 0) {
- chart.use_html = 1;
- } else if (strncmp (argv[i], "--width=", 8) == 0) {
- chart.width = atoi (argv[i] + 8);
- } else if (strncmp (argv[i], "--height=", 9) == 0) {
- chart.height = atoi (argv[i] + 9);
- } else if (strcmp (argv[i], "--name") == 0) {
- if (i + 1 < argc)
- chart.names[chart.num_reports] = argv[++i];
- } else if (strncmp (argv[i], "--name=", 7) == 0) {
- chart.names[chart.num_reports] = argv[i] + 7;
- } else if ((strcmp (argv[i], "--help") == 0) ||
- (strcmp (argv[i], "--?") == 0)) {
- usage();
- return 0;
- } else {
- cairo_perf_report_load (&chart.reports[chart.num_reports++],
- argv[i], i,
- test_report_cmp_name);
- }
- }
-
- for (chart.relative = 0; chart.relative <= 1; chart.relative++) {
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- chart.width,
- chart.height + (FONT_SIZE + PAD) + 2*PAD);
- chart.cr = cairo_create (surface);
- cairo_surface_destroy (surface);
-
- cairo_set_source_rgb (chart.cr, 0, 0, 0);
- cairo_paint (chart.cr);
-
- find_ranges (&chart);
-
- for (i = 0; i < chart.num_tests; i++)
- test_background (&chart, i);
- if (chart.relative) {
- add_relative_lines (&chart);
- add_slower_faster_guide (&chart);
- } else
- add_absolute_lines (&chart);
-
- cairo_save (chart.cr);
- cairo_rectangle (chart.cr, 0, 0, chart.width, chart.height);
- cairo_clip (chart.cr);
- cairo_perf_reports_compare (&chart, !chart.relative);
- cairo_restore (chart.cr);
-
- add_base_line (&chart);
- add_legend (&chart);
-
- cairo_surface_write_to_png (cairo_get_target (chart.cr),
- chart.relative ? "relative.png" : "absolute.png");
- cairo_destroy (chart.cr);
- }
-
- /* Pointless memory cleanup, (would be a great place for talloc) */
- for (i = 0; i < chart.num_reports; i++) {
- for (t = chart.reports[i].tests; t->name; t++) {
- free (t->samples);
- free (t->backend);
- free (t->name);
- }
- free (chart.reports[i].tests);
- free (chart.reports[i].configuration);
- }
- free (chart.names);
- free (chart.reports);
-
- return 0;
-}
diff --git a/perf/cairo-perf-compare-backends.c b/perf/cairo-perf-compare-backends.c
deleted file mode 100644
index ff7359e1a..000000000
--- a/perf/cairo-perf-compare-backends.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <math.h>
-#include <assert.h>
-
-typedef struct _cairo_perf_report_options {
- double min_change;
- int use_utf;
- int print_change_bars;
-} cairo_perf_report_options_t;
-
-typedef struct _cairo_perf_diff_files_args {
- const char **filenames;
- int num_filenames;
- cairo_perf_report_options_t options;
-} cairo_perf_diff_files_args_t;
-
-static int
-test_diff_cmp (const void *a,
- const void *b)
-{
- const test_diff_t *a_diff = a;
- const test_diff_t *b_diff = b;
-
- /* Reverse sort by magnitude of change so larger changes come
- * first */
- if (a_diff->change > b_diff->change)
- return -1;
-
- if (a_diff->change < b_diff->change)
- return 1;
-
- return 0;
-}
-
-#define CHANGE_BAR_WIDTH 70
-static void
-print_change_bar (double change,
- double max_change,
- int use_utf)
-{
- int units_per_cell = ceil (max_change / CHANGE_BAR_WIDTH);
- static char const *ascii_boxes[8] = {
- "****","***" ,"***", "**",
- "**", "*", "*", ""
- };
- static char const *utf_boxes[8] = {
- "█", "▉", "▊", "▋",
- "▌", "▍", "▎", "▏"
- };
- char const **boxes = use_utf ? utf_boxes : ascii_boxes;
-
- /* For a 1.0x speedup we want a zero-size bar to show "no
- * change". */
- change -= 1.0;
-
- while (change > units_per_cell) {
- printf ("%s", boxes[0]);
- change -= units_per_cell;
- }
-
- change /= units_per_cell;
-
- if (change > 7.5/8.0)
- printf ("%s", boxes[0]);
- else if (change > 6.5/8.0)
- printf ("%s", boxes[1]);
- else if (change > 5.5/8.0)
- printf ("%s", boxes[2]);
- else if (change > 4.5/8.0)
- printf ("%s", boxes[3]);
- else if (change > 3.5/8.0)
- printf ("%s", boxes[4]);
- else if (change > 2.5/8.0)
- printf ("%s", boxes[5]);
- else if (change > 1.5/8.0)
- printf ("%s", boxes[6]);
- else if (change > 0.5/8.0)
- printf ("%s", boxes[7]);
-}
-
-static void
-test_diff_print (test_diff_t *diff,
- double max_change,
- cairo_perf_report_options_t *options)
-{
- int i;
- double test_time;
- double change;
-
- if (diff->tests[0]->size != 0) {
- printf ("(%s, size: %d)\n",
- diff->tests[0]->name,
- diff->tests[0]->size);
- } else {
- printf ("(%s)\n", diff->tests[0]->name);
- }
-
- for (i = 0; i < diff->num_tests; i++) {
- test_time = diff->tests[i]->stats.min_ticks;
- test_time /= diff->tests[i]->stats.ticks_per_ms;
- change = diff->max / test_time;
- printf ("%8s-%s-%s\t%6.2f: %5.2fx ",
- diff->tests[i]->backend,
- diff->tests[i]->content,
- diff->tests[i]->configuration,
- diff->tests[i]->stats.min_ticks / diff->tests[i]->stats.ticks_per_ms,
- change);
-
- if (options->print_change_bars)
- print_change_bar (change, max_change, options->use_utf);
- printf ("\n");
- }
-
- printf("\n");
-}
-
-static void
-cairo_perf_reports_compare (cairo_perf_report_t *reports,
- int num_reports,
- cairo_perf_report_options_t *options)
-{
- int i;
- test_report_t **tests, *min_test;
- test_diff_t *diff, *diffs;
- int num_diffs, max_diffs;
- double max_change;
- double test_time;
- int seen_non_null;
-
- tests = xmalloc (num_reports * sizeof (test_report_t *));
-
- max_diffs = reports[0].tests_count;
- for (i = 0; i < num_reports; i++) {
- tests[i] = reports[i].tests;
- if (reports[i].tests_count > max_diffs)
- max_diffs = reports[i].tests_count;
- }
-
- diff = diffs = xmalloc (max_diffs * sizeof (test_diff_t));
-
- num_diffs = 0;
- while (1) {
- int num_tests;
-
- /* We expect iterations values of 0 when multiple raw reports
- * for the same test have been condensed into the stats of the
- * first. So we just skip these later reports that have no
- * stats. */
- seen_non_null = 0;
- for (i = 0; i < num_reports; i++) {
- while (tests[i]->name && tests[i]->stats.iterations == 0)
- tests[i]++;
- if (tests[i]->name)
- seen_non_null++;
- }
- if (! seen_non_null)
- break;
-
- /* Find the minimum of all current tests, (we have to do this
- * in case some reports don't have a particular test). */
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name) {
- min_test = tests[i];
- break;
- }
- }
- for (++i; i < num_reports; i++) {
- if (tests[i]->name && test_report_cmp_name (tests[i], min_test) < 0)
- min_test = tests[i];
- }
-
- num_tests = 0;
- for (i = 0; i < num_reports; i++) {
- test_report_t *test;
- int n = 0;
-
- test = tests[i];
- while (test[n].name &&
- test_report_cmp_name (&test[n], min_test) == 0)
- {
- n++;
- }
-
- num_tests += n;
- }
-
- /* For each report that has the current test, record it into
- * the diff structure. */
- diff->num_tests = 0;
- diff->tests = xmalloc (num_tests * sizeof (test_diff_t));
- for (i = 0; i < num_reports; i++) {
- while (tests[i]->name &&
- test_report_cmp_name (tests[i], min_test) == 0)
- {
- test_time = tests[i]->stats.min_ticks;
- if (test_time > 0) {
- test_time /= tests[i]->stats.ticks_per_ms;
- if (diff->num_tests == 0) {
- diff->min = test_time;
- diff->max = test_time;
- } else {
- if (test_time < diff->min)
- diff->min = test_time;
- if (test_time > diff->max)
- diff->max = test_time;
- }
- diff->tests[diff->num_tests++] = tests[i];
- }
- tests[i]++;
- }
- }
- diff->change = diff->max / diff->min;
-
- diff++;
- num_diffs++;
- }
- if (num_diffs == 0)
- goto DONE;
-
- qsort (diffs, num_diffs, sizeof (test_diff_t), test_diff_cmp);
-
- max_change = 1.0;
- for (i = 0; i < num_diffs; i++) {
- if (fabs (diffs[i].change) > max_change)
- max_change = fabs (diffs[i].change);
- }
-
- for (i = 0; i < num_diffs; i++) {
- diff = &diffs[i];
-
- /* Discard as uninteresting a change which is less than the
- * minimum change required, (default may be overridden on
- * command-line). */
- if (fabs (diff->change) - 1.0 < options->min_change)
- continue;
-
- test_diff_print (diff, max_change, options);
- }
-
- for (i = 0; i < num_diffs; i++)
- free (diffs[i].tests);
- DONE:
- free (diffs);
- free (tests);
-}
-
-static void
-usage (const char *argv0)
-{
- char const *basename = strrchr(argv0, '/');
- basename = basename ? basename+1 : argv0;
- fprintf (stderr,
- "Usage: %s [options] file [...]\n\n",
- basename);
- fprintf (stderr,
- "Computes significant performance differences for cairo performance reports.\n"
- "Each file should be the output of the cairo-perf program (or \"make perf\").\n"
- "The following options are available:\n"
- "\n"
- "--no-utf Use ascii stars instead of utf-8 change bars.\n"
- " Four stars are printed per factor of speedup.\n"
- "\n"
- "--no-bars Don't display change bars at all.\n\n"
- "\n"
- "--use-ms Use milliseconds to calculate differences.\n"
- " (instead of ticks which are hardware dependent)\n"
- "\n"
- "--min-change threshold[%%]\n"
- " Suppress all changes below the given threshold.\n"
- " The default threshold of 0.05 or 5%% ignores any\n"
- " speedup or slowdown of 1.05 or less. A threshold\n"
- " of 0 will cause all output to be reported.\n"
- );
- exit(1);
-}
-
-static void
-parse_args (int argc,
- char const **argv,
- cairo_perf_diff_files_args_t *args)
-{
- int i;
-
- for (i = 1; i < argc; i++) {
- if (strcmp (argv[i], "--no-utf") == 0) {
- args->options.use_utf = 0;
- }
- else if (strcmp (argv[i], "--no-bars") == 0) {
- args->options.print_change_bars = 0;
- }
- else if (strcmp (argv[i], "--min-change") == 0) {
- char *end = NULL;
- i++;
- if (i >= argc)
- usage (argv[0]);
- args->options.min_change = strtod (argv[i], &end);
- if (*end) {
- if (*end == '%') {
- args->options.min_change /= 100;
- } else {
- usage (argv[0]);
- }
- }
- }
- else {
- args->num_filenames++;
- args->filenames = xrealloc (args->filenames,
- args->num_filenames * sizeof (char *));
- args->filenames[args->num_filenames - 1] = argv[i];
- }
- }
-}
-
-int
-main (int argc,
- const char *argv[])
-{
- cairo_perf_diff_files_args_t args = {
- NULL, /* filenames */
- 0, /* num_filenames */
- {
- 0.05, /* min change */
- 1, /* use UTF-8? */
- 1, /* display change bars? */
- }
- };
- cairo_perf_report_t *reports;
- test_report_t *t;
- int i;
-
- parse_args (argc, argv, &args);
-
- if (args.num_filenames) {
- reports = xcalloc (args.num_filenames, sizeof (cairo_perf_report_t));
- for (i = 0; i < args.num_filenames; i++) {
- cairo_perf_report_load (&reports[i], args.filenames[i], i,
- test_report_cmp_name);
- printf ("loaded: %s, %d tests\n",
- args.filenames[i], reports[i].tests_count);
- }
- } else {
- args.num_filenames = 1;
- reports = xcalloc (args.num_filenames, sizeof (cairo_perf_report_t));
- cairo_perf_report_load (&reports[0], NULL, 0, test_report_cmp_name);
- }
-
- cairo_perf_reports_compare (reports, args.num_filenames, &args.options);
-
- /* Pointless memory cleanup, (would be a great place for talloc) */
- free (args.filenames);
- for (i = 0; i < args.num_filenames; i++) {
- for (t = reports[i].tests; t->name; t++) {
- free (t->samples);
- free (t->backend);
- free (t->name);
- }
- free (reports[i].tests);
- free (reports[i].configuration);
- }
- free (reports);
-
- return 0;
-}
diff --git a/perf/cairo-perf-diff b/perf/cairo-perf-diff
deleted file mode 100755
index 5a4b7b386..000000000
--- a/perf/cairo-perf-diff
+++ /dev/null
@@ -1,255 +0,0 @@
-#!/bin/sh
-set -e
-
-usage() {
- argv0=`basename $0`
-
- cat >&2 << END
-Usage:
-For comparing files created my cairo-perf:
-
- $argv0 old.perf new.perf
-
-For comparing (cached) performance of revisions:
-
- $argv0 [OPTIONS] <revision> [-- cairo-perf options]
- $argv0 [OPTIONS] <rev1> <rev2> [-- cairo-perf-options]
-
-If given a single revision, compares its results to that of its
-(first-parent) predecessor. Otherwise compares the two given revisions.
-The revisions can be any revision accepted by git. For example:
-
- $argv0 HEAD # Show impact of latest commit
- $argv0 1.2.0 1.2.4 # Compare performance of 1.2.0 to 1.2.4
-
-Options:
-
--f, --force
- Forces cairo-perf-diff to re-run performance tests
- even if cached performance data is available.
-
--h, --html
- With this option performance changes are summarized
- as HTML table.
-
--t, --trace
- Compare performance using trace replays instead of
- microbenchmarks.
-
-Additional options can be passed the child cairo-perf process
-by separating them with a double hyphen (--). For example, to
-examine what the impact of the latest change is on the stroke
-test you might use:
-
- $argv0 HEAD -- stroke
-
-The performance results are cached in .perf next to the .git directory.
-
-Set CAIRO_AUTOGEN_OPTIONS to pass options to autogen for both
-builds.
-END
-
- exit 1
-}
-
-benchmark="cairo-perf-micro"
-
-# First, pull off any known options
-while true; do
- case $1 in
- -f|--force) force_cairo_perf="true";;
- -h|--html) html_output="$2"; shift ;;
- -t|--trace) benchmark="cairo-perf-trace";;
- *) break;;
- esac
-
- shift
-done
-
-# Then if anything is left that still looks like an option, (begins
-# with a dash), give usage to catch --help or any other -garbage
-if [ $# -eq 0 ] || [ "`echo "$1" | sed 's/^-//'`" != "$1" ]; then
- usage
-fi
-
-# Finally, pick up the actual revision arguments
-if [ $# -eq 1 ] || [ "$2" = "--" ]; then
- old="$1^"
- new="$1"
- shift 1
-else
- old="$1"
- new="$2"
- shift 2
-fi
-
-# And post-finally, pass anything after -- on to cairo-perf
-CAIRO_PERF_OPTIONS="-r -i 10"
-if [ $# -gt 0 ]; then
- if [ "$1" = "--" ]; then
- shift 1
- CAIRO_PERF_OPTIONS="$CAIRO_PERF_OPTIONS $@"
- else
- usage
- fi
-fi
-
-git_setup() {
- SUBDIRECTORY_OK='Yes'
- . "$(git --exec-path)/git-sh-setup"
- CAIRO_DIR=`dirname $GIT_DIR`
- if [ "$CAIRO_DIR" = "." ]; then
- CAIRO_DIR=`pwd`
- fi
- CAIRO_PERF_DIR=$CAIRO_DIR/.perf
-}
-
-rev2sha() {
- rev=$1
- git rev-parse --verify $rev || ( echo "Cannot resolve $rev as a git object" && exit 1 )
-}
-
-cpu_count() {
- test -f /proc/cpuinfo &&
- grep -c '^processor[[:blank:]]\+:' /proc/cpuinfo ||
- echo 1
-}
-
-# We cache performance output based on a two-part name capturing the
-# current performance test suite and the library being tested. We
-# capture these as the tree object of the perf directory in HEAD and
-# the tree object of the src directory of the revision being tested.
-#
-# This way, whenever the performance suite is updated, cached output
-# from old versions of the suite are automatically invalidated. Also,
-# if a commit just changes things outside of the src tree, (say it
-# changes the "test" test suite, or README or configure.in, or
-# whatever), cairo-perf-diff will be smart enough to still use cached
-# results from a run with an equivalent src tree.
-rev2perf() {
- rev=$1
- sha=`rev2sha $rev`
- src_tree_sha=`rev2sha $rev:src`
- perf_tree_sha=`rev2sha HEAD:perf`
- script_tree_sha=`rev2sha HEAD:util/cairo-script`
- echo "$CAIRO_PERF_DIR/${sha}-${perf_tree_sha}-${script_tree_sha}-${src_tree_sha}.perf"
-}
-rev2perf_glob() {
- rev=$1
- src_tree_sha=`rev2sha $rev:src`
- perf_tree_sha=`rev2sha HEAD:perf`
- script_tree_sha=`rev2sha HEAD:util/cairo-script`
- echo "$CAIRO_PERF_DIR/*-${perf_tree_sha}-${script_tree_sha}-${src_tree_sha}.perf"
-}
-
-build() {
- build_dir=$1
- sha=$2
-
- if [ ! -d $build_dir ]; then
- git clone -s $CAIRO_DIR $build_dir
- (cd $build_dir; git checkout -b tmp-cairo-perf-diff $sha)
- fi
- cd $build_dir
-
- git checkout tmp-cairo-perf-diff
- git reset --hard $sha
-
- if [ -z "$MAKEFLAGS" ]; then
- CPU_COUNT=`cpu_count`
- export MAKEFLAGS="-j`expr $CPU_COUNT + 1`"
- fi
-
- if [ ! -e Makefile ]; then
- ./autogen.sh $CAIRO_AUTOGEN_OPTIONS
- fi
-
- for file in $boilerplate_files; do
- rsync $CAIRO_DIR/$file boilerplate
- done
- for file in $perf_files; do
- rsync $CAIRO_DIR/$file perf
- done
- for file in $script_files; do
- rsync $CAIRO_DIR/$file util/cairo-script
- done
-
- make || (rm config.cache && make)
- (cd boilerplate && make libcairoboilerplate.la)
-
- cd perf
- make ${benchmark}
-}
-
-# Usage: run_cairo_perf_if_not_cached <rev> <suffix>
-# The <rev> argument must be a valid git ref-spec that can
-# be resolved to a commit. The suffix is just something
-# unique so that build directories can be separated for
-# multiple calls to this function.
-run_cairo_perf_if_not_cached() {
- rev=$1
- build_dir="build-$2"
-
- owd=`pwd`
- sha=`rev2sha $rev`
- perf=`rev2perf $rev`
- glob=`rev2perf_glob $rev`
- if [ -e $glob ] && [ "$force_cairo_perf" != "true" ]; then
- return 0
- fi
- if [ ! -d $CAIRO_PERF_DIR ]; then
- echo "Creating new perf cache in $CAIRO_PERF_DIR"
- mkdir $CAIRO_PERF_DIR
- fi
-
- cd $CAIRO_DIR
- boilerplate_files=`git ls-tree --name-only HEAD boilerplate/*`
- perf_files=`git ls-tree --name-only HEAD perf/*`
- script_files=`git ls-tree --name-only HEAD util/cairo-script/*`
- cd $CAIRO_PERF_DIR
-
- build $build_dir $sha || {
- rm -rf $build_dir
- build $build_dir $sha || exit 1
- }
-
- echo "Running \"cairo-perf $CAIRO_PERF_OPTIONS\" against $rev. Results will be cached in:"
- { ./$benchmark $CAIRO_PERF_OPTIONS || echo "*** Performance test crashed"; } >> $perf
-
- cd $owd
-}
-
-git_setup
-
-if [ -e ./cairo-perf-diff-files ]; then
- bindir="."
-else
- bindir=$CAIRO_DIR/perf
-
- # Build cairo-perf-diff-files if not available
- if [ ! -e $bindir/cairo-perf-diff-files ]; then
- echo "Building cairo-perf-diff-files"
- if [ "x$OS" = "xWindows_NT" ]; then
- make -f Makefile.win32 -C $bindir cairo-perf-diff-files CFG=debug
- else
- make -C $bindir cairo-perf-diff-files
- fi
- fi
-fi
-
-if [ ! -e $old ]; then
- run_cairo_perf_if_not_cached $old old
- old=`rev2perf $old`
-fi
-
-if [ ! -e $new ]; then
- run_cairo_perf_if_not_cached $new new
- new=`rev2perf $new`
-fi
-
-if [ -z "$html_output" ]; then
- $bindir/cairo-perf-diff-files $old $new
-else
- $bindir/cairo-perf-diff-files $old $new |
- $CAIRO_DIR/perf/make-html.py > $html_output
-fi
diff --git a/perf/cairo-perf-diff-files.c b/perf/cairo-perf-diff-files.c
deleted file mode 100644
index 36b80cda4..000000000
--- a/perf/cairo-perf-diff-files.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <math.h>
-#include <assert.h>
-
-typedef struct _cairo_perf_report_options {
- double min_change;
- int use_utf;
- int print_change_bars;
- int use_ticks;
-} cairo_perf_report_options_t;
-
-typedef struct _cairo_perf_diff_files_args {
- const char **filenames;
- int num_filenames;
- cairo_perf_report_options_t options;
-} cairo_perf_diff_files_args_t;
-
-static int
-test_diff_cmp_speedup_before_slowdown (const void *a,
- const void *b)
-{
- const test_diff_t *a_diff = a;
- const test_diff_t *b_diff = b;
-
- /* First make all speedups come before all slowdowns. */
- if (a_diff->change > 0 && b_diff->change < 0)
- return -1;
- if (a_diff->change < 0 && b_diff->change > 0)
- return 1;
-
- if (a_diff->change == b_diff->change)
- return 0;
-
- /* Large speedups come first. */
- if (a_diff->change > 0) {
- if (a_diff->change > b_diff->change)
- return -1;
- else
- return 1;
- }
-
- /* Large slowdowns come last. */
- if (a_diff->change < 0) {
- if (a_diff->change < b_diff->change)
- return 1;
- else
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_diff_cmp (const void *a,
- const void *b)
-{
- const test_diff_t *a_diff = a;
- const test_diff_t *b_diff = b;
-
- /* Reverse sort by magnitude of change so larger changes come
- * first */
- if (a_diff->change > b_diff->change)
- return -1;
-
- if (a_diff->change < b_diff->change)
- return 1;
-
- return 0;
-}
-
-#define CHANGE_BAR_WIDTH 70
-static void
-print_change_bar (double change,
- double max_change,
- int use_utf)
-{
- int units_per_cell = ceil (max_change / CHANGE_BAR_WIDTH);
- static char const *ascii_boxes[8] = {
- "****","***" ,"***", "**",
- "**", "*", "*", ""
- };
- static char const *utf_boxes[8] = {
- "█", "▉", "▊", "▋",
- "▌", "▍", "▎", "▏"
- };
- char const **boxes = use_utf ? utf_boxes : ascii_boxes;
-
- /* For a 1.0x speedup we want a zero-size bar to show "no
- * change". */
- change -= 1.0;
-
- while (change > units_per_cell) {
- printf ("%s", boxes[0]);
- change -= units_per_cell;
- }
-
- change /= units_per_cell;
-
- if (change > 7.5/8.0)
- printf ("%s", boxes[0]);
- else if (change > 6.5/8.0)
- printf ("%s", boxes[1]);
- else if (change > 5.5/8.0)
- printf ("%s", boxes[2]);
- else if (change > 4.5/8.0)
- printf ("%s", boxes[3]);
- else if (change > 3.5/8.0)
- printf ("%s", boxes[4]);
- else if (change > 2.5/8.0)
- printf ("%s", boxes[5]);
- else if (change > 1.5/8.0)
- printf ("%s", boxes[6]);
- else if (change > 0.5/8.0)
- printf ("%s", boxes[7]);
-
- printf ("\n");
-}
-
-static void
-test_diff_print_binary (test_diff_t *diff,
- double max_change,
- cairo_perf_report_options_t *options)
-{
- if (diff->tests[0]->size)
- printf ("%5s-%-4s %26s-%-3d",
- diff->tests[0]->backend, diff->tests[0]->content,
- diff->tests[0]->name, diff->tests[0]->size);
- else
- printf ("%5s %26s", diff->tests[0]->backend, diff->tests[0]->name);
-
- printf (" %6.2f (%.2f %4.2f%%) -> %6.2f (%.2f %4.2f%%): %5.2fx ",
- diff->tests[0]->stats.min_ticks / diff->tests[0]->stats.ticks_per_ms,
- diff->tests[0]->stats.median_ticks / diff->tests[0]->stats.ticks_per_ms,
- diff->tests[0]->stats.std_dev * 100,
- diff->tests[1]->stats.min_ticks / diff->tests[1]->stats.ticks_per_ms,
- diff->tests[1]->stats.median_ticks / diff->tests[1]->stats.ticks_per_ms,
- diff->tests[1]->stats.std_dev * 100,
- fabs (diff->change));
-
- if (diff->change > 1.0)
- printf ("speedup\n");
- else
- printf ("slowdown\n");
-
- if (options->print_change_bars)
- print_change_bar (fabs (diff->change), max_change,
- options->use_utf);
-}
-
-static void
-test_diff_print_multi (test_diff_t *diff,
- double max_change,
- cairo_perf_report_options_t *options)
-{
- int i;
- double test_time;
- double change;
-
- if (diff->tests[0]->size) {
- printf ("%s (backend: %s-%s, size: %d)\n",
- diff->tests[0]->name,
- diff->tests[0]->backend,
- diff->tests[0]->content,
- diff->tests[0]->size);
- } else {
- printf ("%s (backend: %s)\n",
- diff->tests[0]->name,
- diff->tests[0]->backend);
- }
-
- for (i = 0; i < diff->num_tests; i++) {
- test_time = diff->tests[i]->stats.min_ticks;
- if (! options->use_ticks)
- test_time /= diff->tests[i]->stats.ticks_per_ms;
- change = diff->max / test_time;
- printf ("[%d] %6.2f: %5.2fx ",
- diff->tests[i]->fileno,
- diff->tests[i]->stats.min_ticks / diff->tests[i]->stats.ticks_per_ms,
- change);
-
- if (options->print_change_bars)
- print_change_bar (change, max_change, options->use_utf);
- else
- printf("\n");
- }
-
- printf("\n");
-}
-
-static void
-cairo_perf_reports_compare (cairo_perf_report_t *reports,
- int num_reports,
- cairo_perf_report_options_t *options)
-{
- int i;
- test_report_t **tests, *min_test;
- test_diff_t *diff, *diffs;
- int num_diffs, max_diffs;
- double max_change;
- double test_time;
- int seen_non_null;
- cairo_bool_t printed_speedup = FALSE;
- cairo_bool_t printed_slowdown = FALSE;
-
- assert (num_reports >= 2);
-
- tests = xmalloc (num_reports * sizeof (test_report_t *));
-
- max_diffs = reports[0].tests_count;
- for (i = 0; i < num_reports; i++) {
- tests[i] = reports[i].tests;
- if (reports[i].tests_count > max_diffs)
- max_diffs = reports[i].tests_count;
- }
-
- diff = diffs = xmalloc (max_diffs * sizeof (test_diff_t));
-
- num_diffs = 0;
- while (1) {
- /* We expect iterations values of 0 when multiple raw reports
- * for the same test have been condensed into the stats of the
- * first. So we just skip these later reports that have no
- * stats. */
- seen_non_null = 0;
- for (i = 0; i < num_reports; i++) {
- while (tests[i]->name && tests[i]->stats.iterations == 0)
- tests[i]++;
- if (tests[i]->name)
- seen_non_null++;
- }
-
- if (seen_non_null < 2)
- break;
-
- /* Find the minimum of all current tests, (we have to do this
- * in case some reports don't have a particular test). */
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name) {
- min_test = tests[i];
- break;
- }
- }
- for (++i; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) < 0)
- {
- min_test = tests[i];
- }
- }
-
- /* For each report that has the current test, record it into
- * the diff structure. */
- diff->num_tests = 0;
- diff->tests = xmalloc (num_reports * sizeof (test_diff_t));
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- test_time = tests[i]->stats.min_ticks;
- if (! options->use_ticks)
- test_time /= tests[i]->stats.ticks_per_ms;
- if (diff->num_tests == 0) {
- diff->min = test_time;
- diff->max = test_time;
- } else {
- if (test_time < diff->min)
- diff->min = test_time;
- if (test_time > diff->max)
- diff->max = test_time;
- }
- diff->tests[diff->num_tests++] = tests[i];
- tests[i]++;
- }
- }
- diff->change = diff->max / diff->min;
-
- if (num_reports == 2) {
- double old_time, new_time;
- if (diff->num_tests == 1) {
- printf ("Only in %s: %s %s\n",
- diff->tests[0]->configuration,
- diff->tests[0]->backend,
- diff->tests[0]->name);
- continue;
- }
- old_time = diff->tests[0]->stats.min_ticks;
- new_time = diff->tests[1]->stats.min_ticks;
- if (! options->use_ticks) {
- old_time /= diff->tests[0]->stats.ticks_per_ms;
- new_time /= diff->tests[1]->stats.ticks_per_ms;
- }
- diff->change = old_time / new_time;
- if (diff->change < 1.0)
- diff->change = - 1.0 / diff->change;
- }
-
- diff++;
- num_diffs++;
- }
- if (num_diffs == 0)
- goto DONE;
-
- if (num_reports == 2)
- qsort (diffs, num_diffs, sizeof (test_diff_t),
- test_diff_cmp_speedup_before_slowdown);
- else
- qsort (diffs, num_diffs, sizeof (test_diff_t), test_diff_cmp);
-
- max_change = 1.0;
- for (i = 0; i < num_diffs; i++) {
- if (fabs (diffs[i].change) > max_change)
- max_change = fabs (diffs[i].change);
- }
-
- if (num_reports == 2)
- printf ("old: %s\n"
- "new: %s\n",
- diffs->tests[0]->configuration,
- diffs->tests[1]->configuration);
-
- for (i = 0; i < num_diffs; i++) {
- diff = &diffs[i];
-
- /* Discard as uninteresting a change which is less than the
- * minimum change required, (default may be overriden on
- * command-line). */
- if (fabs (diff->change) - 1.0 < options->min_change)
- continue;
-
- if (num_reports == 2) {
- if (diff->change > 1.0 && ! printed_speedup) {
- printf ("Speedups\n"
- "========\n");
- printed_speedup = TRUE;
- }
- if (diff->change < 1.0 && ! printed_slowdown) {
- printf ("Slowdowns\n"
- "=========\n");
- printed_slowdown = TRUE;
- }
- test_diff_print_binary (diff, max_change, options);
- } else {
- test_diff_print_multi (diff, max_change, options);
- }
- }
-
- DONE:
- for (i = 0; i < num_diffs; i++)
- free (diffs[i].tests);
- free (diffs);
- free (tests);
-}
-
-static void
-usage (const char *argv0)
-{
- char const *basename = strrchr(argv0, '/');
- basename = basename ? basename+1 : argv0;
- fprintf (stderr,
- "Usage: %s [options] file1 file2 [...]\n\n",
- basename);
- fprintf (stderr,
- "Computes significant performance differences for cairo performance reports.\n"
- "Each file should be the output of the cairo-perf program (or \"make perf\").\n"
- "The following options are available:\n"
- "\n"
- "--no-utf Use ascii stars instead of utf-8 change bars.\n"
- " Four stars are printed per factor of speedup.\n"
- "\n"
- "--no-bars Don't display change bars at all.\n\n"
- "\n"
- "--use-ms Use milliseconds to calculate differences.\n"
- " (instead of ticks which are hardware dependent)\n"
- "\n"
- "--min-change threshold[%%]\n"
- " Suppress all changes below the given threshold.\n"
- " The default threshold of 0.05 or 5%% ignores any\n"
- " speedup or slowdown of 1.05 or less. A threshold\n"
- " of 0 will cause all output to be reported.\n"
- );
- exit(1);
-}
-
-static void
-parse_args (int argc,
- char const **argv,
- cairo_perf_diff_files_args_t *args)
-{
- int i;
-
- for (i = 1; i < argc; i++) {
- if (strcmp (argv[i], "--no-utf") == 0) {
- args->options.use_utf = 0;
- }
- else if (strcmp (argv[i], "--no-bars") == 0) {
- args->options.print_change_bars = 0;
- }
- else if (strcmp (argv[i], "--use-ms") == 0) {
- /* default */
- }
- else if (strcmp (argv[i], "--use-ticks") == 0) {
- args->options.use_ticks = 1;
- }
- else if (strcmp (argv[i], "--min-change") == 0) {
- char *end = NULL;
- i++;
- if (i >= argc)
- usage (argv[0]);
- args->options.min_change = strtod (argv[i], &end);
- if (*end) {
- if (*end == '%') {
- args->options.min_change /= 100;
- } else {
- usage (argv[0]);
- }
- }
- }
- else {
- args->num_filenames++;
- args->filenames = xrealloc (args->filenames,
- args->num_filenames * sizeof (char *));
- args->filenames[args->num_filenames - 1] = argv[i];
- }
- }
-}
-
-int
-main (int argc,
- const char *argv[])
-{
- cairo_perf_diff_files_args_t args = {
- NULL, /* filenames */
- 0, /* num_filenames */
- {
- 0.05, /* min change */
- 1, /* use UTF-8? */
- 1, /* display change bars? */
- }
- };
- cairo_perf_report_t *reports;
- test_report_t *t;
- int i;
-
- parse_args (argc, argv, &args);
-
- if (args.num_filenames < 2)
- usage (argv[0]);
-
- reports = xmalloc (args.num_filenames * sizeof (cairo_perf_report_t));
-
- for (i = 0; i < args.num_filenames; i++ ) {
- cairo_perf_report_load (&reports[i], args.filenames[i], i, NULL);
- printf ("[%d] %s\n", i, args.filenames[i]);
- }
- printf ("\n");
-
- cairo_perf_reports_compare (reports, args.num_filenames, &args.options);
-
- /* Pointless memory cleanup, (would be a great place for talloc) */
- free (args.filenames);
- for (i = 0; i < args.num_filenames; i++) {
- for (t = reports[i].tests; t->name; t++) {
- free (t->samples);
- free (t->backend);
- free (t->name);
- }
- free (reports[i].tests);
- free (reports[i].configuration);
- }
- free (reports);
-
- return 0;
-}
diff --git a/perf/cairo-perf-graph b/perf/cairo-perf-graph
deleted file mode 100755
index a167351fc..000000000
--- a/perf/cairo-perf-graph
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/bin/sh
-set -e
-
-###
-### XXX Source common functions from cairo-perf-diff
-###
-
-usage() {
- argv0=`basename $0`
-
- cat >&2 << END
-Usage:
-As opposed to its sibling, cairo-perf-diff, cairo-perf-graph targets
-reviewing changes between series by graphically comparing the performance
-at each commit.
-
-The two revisions can be any revision accepted by git. For example:
-
- $argv0 1.2.0 1.2.4 # Compare performance of 1.2.0 to 1.2.4
-
-Options:
-
--f, --force
- Forces cairo-perf-diff to re-run performance tests
- even if cached performance data is available.
-
--h, --html
- With this option performance changes are summarized
- as HTML table.
-
-Additional options can be passed the child cairo-perf process
-by separating them with a double hyphen (--). For example, to
-examine what the impact of the latest change is on the stroke
-test you might use:
-
- $argv0 HEAD -- stroke
-
-The performance results are cached in .perf next to the .git directory.
-
-Set CAIRO_AUTOGEN_OPTIONS to pass options to autogen for both
-builds.
-END
-
- exit 1
-}
-
-# First, pull off any known options
-while true; do
- case $1 in
- -f|--force) force_cairo_perf="true";;
- -h|--html) html_output="true";;
- -s|--show) show_only="true";;
- *) break;;
- esac
-
- shift
-done
-
-# Then if anything is left that still looks like an option, (begins
-# with a dash), give usage to catch --help or any other -garbage
-if [ $# -eq 0 ] || [ "`echo "$1" | sed 's/^-//'`" != "$1" ]; then
- usage
-fi
-
-# Finally, pick up the actual revision arguments
-old="$1"
-new="$2"
-shift 2
-
-# And post-finally, pass anything after -- on to cairo-perf
-CAIRO_PERF_OPTIONS="-r -i 25"
-if [ $# -gt 0 ]; then
- if [ "$1" = "--" ]; then
- shift 1
- CAIRO_PERF_OPTIONS="$CAIRO_PERF_OPTIONS $@"
- else
- usage
- fi
-fi
-
-git_setup() {
- SUBDIRECTORY_OK='Yes'
- . "$(git --exec-path)/git-sh-setup"
- CAIRO_DIR=`dirname $GIT_DIR`
- if [ "$CAIRO_DIR" = "." ]; then
- CAIRO_DIR=`pwd`
- fi
- CAIRO_PERF_DIR=$CAIRO_DIR/.perf
-}
-
-rev2sha() {
- rev=$1
- git rev-parse --verify $rev || ( echo "Cannot resolve $rev as a git object" && exit 1 )
-}
-
-cpu_count() {
- test -f /proc/cpuinfo &&
- grep -c '^processor[[:blank:]]\+:' /proc/cpuinfo ||
- echo 1
-}
-
-# We cache performance output based on a two-part name capturing the
-# current performance test suite and the library being tested. We
-# capture these as the tree object of the perf directory in HEAD and
-# the tree object of the src directory of the revision being tested.
-#
-# This way, whenever the performance suite is updated, cached output
-# from old versions of the suite are automatically invalidated. Also,
-# if a commit just changes things outside of the src tree, (say it
-# changes the "test" test suite, or README or configure.in, or
-# whatever), cairo-perf-diff will be smart enough to still use cached
-# results from a run with an equivalent src tree.
-rev2perf() {
- rev=$1
- sha=`rev2sha $rev`
- src_tree_sha=`rev2sha $rev:src`
- perf_tree_sha=`rev2sha HEAD:perf`
- echo "$CAIRO_PERF_DIR/${sha}-${perf_tree_sha}-${src_tree_sha}.perf"
-}
-rev2perf_glob() {
- rev=$1
- src_tree_sha=`rev2sha $rev:src`
- perf_tree_sha=`rev2sha HEAD:perf`
- echo "$CAIRO_PERF_DIR/*-${perf_tree_sha}-${src_tree_sha}.perf"
-}
-
-# Usage: run_cairo_perf_if_not_cached <rev> <suffix>
-# The <rev> argument must be a valid git ref-spec that can
-# be resolved to a commit. The suffix is just something
-# unique so that build directories can be separated for
-# multiple calls to this function.
-run_cairo_perf_if_not_cached() {
- rev=$1
- build_dir="build-$2"
-
- owd=`pwd`
- sha=`rev2sha $rev`
- perf=`rev2perf $rev`
- glob=`rev2perf_glob $rev`
- if [ -e $glob ] && [ "$force_cairo_perf" != "true" ] || [ -n "$show_only" ]; then
- return 0
- fi
- if [ ! -d $CAIRO_PERF_DIR ]; then
- echo "Creating new perf cache in $CAIRO_PERF_DIR"
- mkdir $CAIRO_PERF_DIR
- fi
-
- cd $CAIRO_DIR
- boilerplate_files=`git ls-tree --name-only HEAD boilerplate/*`
- perf_files=`git ls-tree --name-only HEAD perf/*`
- cd $CAIRO_PERF_DIR
-
- if [ ! -d $build_dir ]; then
- git clone -s $CAIRO_DIR $build_dir
- (cd $build_dir; git checkout -b tmp-cairo-perf-diff $sha)
- fi
- cd $build_dir
-
- git checkout tmp-cairo-perf-diff
- git reset --hard $sha
-
- if [ -z "$MAKEFLAGS" ]; then
- CPU_COUNT=`cpu_count`
- export MAKEFLAGS="-j`expr $CPU_COUNT + 1`"
- fi
-
- if [ ! -e Makefile ]; then
- CFLAGS="-O2" ./autogen.sh $CAIRO_AUTOGEN_OPTIONS
- fi
- make CFLAGS="-O2" || (rm config.cache && make CFLAGS="-O2")
- for file in $boilerplate_files; do
- rsync $CAIRO_DIR/$file boilerplate
- done
- (cd boilerplate; make)
- for file in $perf_files; do
- rsync $CAIRO_DIR/$file perf
- done
- cd perf;
- make cairo-perf || exit 1
- echo "Running \"cairo-perf $CAIRO_PERF_OPTIONS\" against $rev. Results will be cached in:"
- echo "$perf"
- (./cairo-perf $CAIRO_PERF_OPTIONS || echo "*** Performance test crashed") >> $perf
- cd $owd
-}
-
-git_setup
-
-# Build cairo-perf-graph-files if not available
-if [ ! -e $CAIRO_DIR/perf/cairo-perf-graph-files ]; then
- echo "Building cairo-perf-graph-files"
- if [ "x$OS" = "xWindows_NT" ]; then
- make -f Makefile.win32 -C $CAIRO_DIR/perf/ cairo-perf-graph-files CFG=debug
- else
- make -C $CAIRO_DIR/perf/ cairo-perf-graph-files
- fi
-fi
-
-revs=""
-for rev in `git rev-list --reverse $old..$new`; do
- run_cairo_perf_if_not_cached $rev rev
- perf=`rev2perf $rev`
- [ -e "$perf" ] && revs="$revs $perf"
-done
-
-exec $CAIRO_DIR/perf/cairo-perf-graph-files $revs
-#exec $CAIRO_DIR/libtool --mode=execute gdb --args $CAIRO_DIR/perf/cairo-perf-graph-files $revs
diff --git a/perf/cairo-perf-graph-files.c b/perf/cairo-perf-graph-files.c
deleted file mode 100644
index 1fd99e4ad..000000000
--- a/perf/cairo-perf-graph-files.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * Copyright © 2008 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-#include "cairo-perf-graph.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include <cairo.h>
-
-static void
-usage (const char *argv0)
-{
- char const *basename = strrchr (argv0, '/');
- basename = basename ? basename+1 : argv0;
- g_printerr ("Usage: %s [options] file1 file2 [...]\n\n", basename);
- g_printerr ("Draws a graph illustrating the change in performance over a series.\n");
- exit(1);
-}
-
-enum {
- CASE_SHOWN,
- CASE_INCONSISTENT,
- CASE_BACKEND,
- CASE_CONTENT,
- CASE_NAME,
- CASE_SIZE,
- CASE_FG_COLOR,
- CASE_DATA,
- CASE_NCOLS
-};
-
-static GtkTreeStore *
-cases_to_store (test_case_t *cases)
-{
- GtkTreeStore *store;
- GtkTreeIter backend_iter;
- GtkTreeIter content_iter;
- const char *backend = NULL;
- const char *content = NULL;
-
- store = gtk_tree_store_new (CASE_NCOLS,
- G_TYPE_BOOLEAN, /* shown */
- G_TYPE_BOOLEAN, /* inconsistent */
- G_TYPE_STRING, /* backend */
- G_TYPE_STRING, /* content */
- G_TYPE_STRING, /* name */
- G_TYPE_INT, /* size */
- GDK_TYPE_COLOR, /* fg color */
- G_TYPE_POINTER); /* data */
- while (cases->backend != NULL) {
- GtkTreeIter iter;
-
- if (backend == NULL || strcmp (backend, cases->backend)) {
- gtk_tree_store_append (store, &backend_iter, NULL);
- gtk_tree_store_set (store, &backend_iter,
- CASE_SHOWN, TRUE,
- CASE_BACKEND, cases->backend,
- -1);
- backend = cases->backend;
- content = NULL;
- }
- if (content == NULL || strcmp (content, cases->content)) {
- gtk_tree_store_append (store, &content_iter, &backend_iter);
- gtk_tree_store_set (store, &content_iter,
- CASE_SHOWN, TRUE,
- CASE_BACKEND, cases->backend,
- CASE_CONTENT, cases->content,
- -1);
- content = cases->content;
- }
-
- gtk_tree_store_append (store, &iter, &content_iter);
- gtk_tree_store_set (store, &iter,
- CASE_SHOWN, TRUE,
- CASE_BACKEND, cases->backend,
- CASE_CONTENT, cases->content,
- CASE_NAME, cases->name,
- CASE_SIZE, cases->size,
- CASE_FG_COLOR, &cases->color,
- CASE_DATA, cases,
- -1);
- cases++;
- }
-
- return store;
-}
-
-struct _app_data {
- GtkWidget *window;
-
- test_case_t *cases;
- cairo_perf_report_t *reports;
- int num_reports;
-
- GtkTreeStore *case_store;
-
- GIOChannel *git_io;
- GtkTextBuffer *git_buffer;
-
- GtkWidget *gv;
-};
-
-static void
-recurse_set_shown (GtkTreeModel *model,
- GtkTreeIter *parent,
- gboolean shown)
-{
- GtkTreeIter iter;
-
- if (gtk_tree_model_iter_children (model, &iter, parent)) do {
- test_case_t *c;
-
- gtk_tree_model_get (model, &iter, CASE_DATA, &c, -1);
- if (c == NULL) {
- recurse_set_shown (model, &iter, shown);
- } else if (shown != c->shown) {
- c->shown = shown;
- gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
- CASE_SHOWN, shown,
- CASE_INCONSISTENT, FALSE,
- -1);
- }
- } while (gtk_tree_model_iter_next (model, &iter));
-}
-
-static gboolean
-children_consistent (GtkTreeModel *model,
- GtkTreeIter *parent)
-{
- GtkTreeIter iter;
- gboolean first = TRUE;
- gboolean first_active;
-
- if (gtk_tree_model_iter_children (model, &iter, parent)) do {
- gboolean active, inconsistent;
-
- gtk_tree_model_get (model, &iter,
- CASE_INCONSISTENT, &inconsistent,
- CASE_SHOWN, &active,
- -1);
- if (inconsistent)
- return FALSE;
-
- if (first) {
- first_active = active;
- first = FALSE;
- } else if (active != first_active)
- return FALSE;
- } while (gtk_tree_model_iter_next (model, &iter));
-
- return TRUE;
-}
-
-static void
-check_consistent (GtkTreeModel *model,
- GtkTreeIter *child)
-{
- GtkTreeIter parent;
-
- if (gtk_tree_model_iter_parent (model, &parent, child)) {
- gtk_tree_store_set (GTK_TREE_STORE (model), &parent,
- CASE_INCONSISTENT,
- ! children_consistent (model, &parent),
- -1);
- check_consistent (model, &parent);
- }
-}
-
-static void
-show_case_toggled (GtkCellRendererToggle *cell,
- gchar *str,
- struct _app_data *app)
-{
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- test_case_t *c;
- gboolean active;
-
- active = ! gtk_cell_renderer_toggle_get_active (cell);
-
- model = GTK_TREE_MODEL (app->case_store);
-
- path = gtk_tree_path_new_from_string (str);
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_path_free (path);
-
- gtk_tree_store_set (app->case_store, &iter,
- CASE_SHOWN, active,
- CASE_INCONSISTENT, FALSE,
- -1);
- gtk_tree_model_get (model, &iter, CASE_DATA, &c, -1);
- if (c != NULL) {
- if (active == c->shown)
- return;
-
- c->shown = active;
- } else {
- recurse_set_shown (model, &iter, active);
- }
- check_consistent (model, &iter);
-
- graph_view_update_visible ((GraphView *) app->gv);
-}
-
-static gboolean
-git_read (GIOChannel *io,
- GIOCondition cond,
- struct _app_data *app)
-{
- int fd;
-
- fd = g_io_channel_unix_get_fd (io);
- do {
- char buf[4096];
- int len;
- GtkTextIter end;
-
- len = read (fd, buf, sizeof (buf));
- if (len <= 0) {
- int err = len ? errno : 0;
- switch (err) {
- case EAGAIN:
- case EINTR:
- return TRUE;
- default:
- g_io_channel_unref (app->git_io);
- app->git_io = NULL;
- return FALSE;
- }
- }
-
- gtk_text_buffer_get_end_iter (app->git_buffer, &end);
- gtk_text_buffer_insert (app->git_buffer, &end, buf, len);
- } while (TRUE);
-}
-
-static void
-do_git (struct _app_data *app,
- char **argv)
-{
- gint output;
- GError *error = NULL;
- GtkTextIter start, stop;
- long flags;
-
- if (! g_spawn_async_with_pipes (NULL, argv, NULL,
- G_SPAWN_SEARCH_PATH |
- G_SPAWN_STDERR_TO_DEV_NULL |
- G_SPAWN_FILE_AND_ARGV_ZERO,
- NULL, NULL, NULL,
- NULL, &output, NULL,
- &error))
- {
- g_error ("spawn failed: %s", error->message);
- }
-
- if (app->git_io) {
- g_io_channel_shutdown (app->git_io, FALSE, NULL);
- g_io_channel_unref (app->git_io);
- }
-
- gtk_text_buffer_get_bounds (app->git_buffer, &start, &stop);
- gtk_text_buffer_delete (app->git_buffer, &start, &stop);
-
- flags = fcntl (output, F_GETFL);
- if ((flags & O_NONBLOCK) == 0)
- fcntl (output, F_SETFL, flags | O_NONBLOCK);
-
- app->git_io = g_io_channel_unix_new (output);
- g_io_add_watch (app->git_io, G_IO_IN | G_IO_HUP, (GIOFunc) git_read, app);
-}
-
-static void
-gv_report_selected (GraphView *gv,
- int i,
- struct _app_data *app)
-{
- cairo_perf_report_t *report;
- char *hyphen;
-
- if (i == -1)
- return;
-
- report = &app->reports[i];
- hyphen = strchr (report->configuration, '-');
- if (hyphen != NULL) {
- int len = hyphen - report->configuration;
- char *id = g_malloc (len + 1);
- char *argv[5];
-
- memcpy (id, report->configuration, len);
- id[len] = '\0';
-
- argv[0] = (char *) "git";
- argv[1] = (char *) "git";
- argv[2] = (char *) "show";
- argv[3] = id;
- argv[4] = NULL;
-
- do_git (app, argv);
- g_free (id);
- }
-}
-
-static GtkWidget *
-window_create (test_case_t *cases,
- cairo_perf_report_t *reports,
- int num_reports)
-{
- GtkWidget *window, *table, *w;
- GtkWidget *tv, *sw;
- GtkTreeStore *store;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- struct _app_data *data;
-
-
- data = g_new0 (struct _app_data, 1);
- data->cases = cases;
- data->reports = reports;
- data->num_reports = num_reports;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (window), "Cairo Performance Graph");
- g_object_set_data_full (G_OBJECT (window),
- "app-data", data, (GDestroyNotify)g_free);
-
- data->window = window;
-
- table = gtk_table_new (2, 2, FALSE);
-
- /* legend & show/hide lines (categorised) */
- tv = gtk_tree_view_new ();
- store = cases_to_store (cases);
- data->case_store = store;
- gtk_tree_view_set_model (GTK_TREE_VIEW (tv), GTK_TREE_MODEL (store));
-
- renderer = gtk_cell_renderer_toggle_new ();
- column = gtk_tree_view_column_new_with_attributes (NULL,
- renderer,
- "active", CASE_SHOWN,
- "inconsistent", CASE_INCONSISTENT,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column);
- g_signal_connect (renderer, "toggled",
- G_CALLBACK (show_case_toggled), data);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Backend",
- renderer,
- "text", CASE_BACKEND,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Content",
- renderer,
- "text", CASE_CONTENT,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Test",
- renderer,
- "text", CASE_NAME,
- "foreground-gdk", CASE_FG_COLOR,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Size",
- renderer,
- "text", CASE_SIZE,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column);
-
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tv), TRUE);
- g_object_unref (store);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (sw), tv);
- gtk_widget_show (tv);
- gtk_table_attach (GTK_TABLE (table), sw,
- 0, 1, 0, 2,
- GTK_FILL, GTK_FILL,
- 4, 4);
- gtk_widget_show (sw);
-
- /* the performance chart */
- w = graph_view_new ();
- data->gv = w;
- g_signal_connect (w, "report-selected",
- G_CALLBACK (gv_report_selected), data);
- graph_view_set_reports ((GraphView *)w, cases, reports, num_reports);
- gtk_table_attach (GTK_TABLE (table), w,
- 1, 2, 0, 1,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
- 4, 4);
- gtk_widget_show (w);
-
- /* interesting information - presumably the commit log */
- w = gtk_text_view_new ();
- data->git_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (w));
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (sw), w);
- gtk_widget_show (w);
- gtk_table_attach (GTK_TABLE (table), sw,
- 1, 2, 1, 2,
- GTK_FILL, GTK_FILL | GTK_EXPAND,
- 4, 4);
- gtk_widget_show (sw);
-
- gtk_container_add (GTK_CONTAINER (window), table);
- gtk_widget_show (table);
-
- return window;
-}
-
-static void
-name_to_color (const char *name,
- GdkColor *color)
-{
- gint v = g_str_hash (name);
-
- color->red = ((v >> 0) & 0xff) / 384. * 0xffff;
- color->green = ((v >> 8) & 0xff) / 384. * 0xffff;
- color->blue = ((v >> 16) & 0xff) / 384. * 0xffff;
-}
-
-static test_case_t *
-test_cases_from_reports (cairo_perf_report_t *reports,
- int num_reports)
-{
- test_case_t *cases, *c;
- test_report_t **tests;
- int i, j;
- int num_tests;
-
- num_tests = 0;
- for (i = 0; i < num_reports; i++) {
- for (j = 0; reports[i].tests[j].name != NULL; j++)
- ;
- if (j > num_tests)
- num_tests = j;
- }
-
- cases = xcalloc (num_tests+1, sizeof (test_case_t));
- tests = xmalloc (num_reports * sizeof (test_report_t *));
- for (i = 0; i < num_reports; i++)
- tests[i] = reports[i].tests;
-
- c = cases;
- while (1) {
- int seen_non_null;
- test_report_t *min_test;
-
- /* We expect iterations values of 0 when multiple raw reports
- * for the same test have been condensed into the stats of the
- * first. So we just skip these later reports that have no
- * stats. */
- seen_non_null = 0;
- for (i = 0; i < num_reports; i++) {
- while (tests[i]->name && tests[i]->stats.iterations == 0)
- tests[i]++;
- if (tests[i]->name)
- seen_non_null++;
- }
-
- if (seen_non_null < 2)
- break;
-
- /* Find the minimum of all current tests, (we have to do this
- * in case some reports don't have a particular test). */
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name) {
- min_test = tests[i];
- break;
- }
- }
- for (++i; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) < 0)
- {
- min_test = tests[i];
- }
- }
-
- c->min_test = min_test;
- c->backend = min_test->backend;
- c->content = min_test->content;
- c->name = min_test->name;
- c->size = min_test->size;
- c->baseline = min_test->stats.min_ticks;
- c->min = c->max = 1.;
- c->shown = TRUE;
- name_to_color (c->name, &c->color);
-
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- tests[i]++;
- break;
- }
- }
-
- for (++i; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- double v = tests[i]->stats.min_ticks / c->baseline;
- if (v < c->min)
- c->min = v;
- if (v > c->max)
- c->max = v;
- tests[i]++;
- }
- }
-
- c++;
- }
- free (tests);
-
- return cases;
-}
-int
-main (int argc,
- char *argv[])
-{
- cairo_perf_report_t *reports;
- test_case_t *cases;
- test_report_t *t;
- int i;
- GtkWidget *window;
-
- gtk_init (&argc, &argv);
-
- if (argc < 3)
- usage (argv[0]);
-
- reports = xmalloc ((argc-1) * sizeof (cairo_perf_report_t));
- for (i = 1; i < argc; i++ )
- cairo_perf_report_load (&reports[i-1], argv[i], i, NULL);
-
- cases = test_cases_from_reports (reports, argc-1);
-
- window = window_create (cases, reports, argc-1);
- g_signal_connect (window, "delete-event",
- G_CALLBACK (gtk_main_quit), NULL);
- gtk_widget_show (window);
-
- gtk_main ();
-
- /* Pointless memory cleanup, (would be a great place for talloc) */
- free (cases);
- for (i = 0; i < argc-1; i++) {
- for (t = reports[i].tests; t->name; t++) {
- free (t->samples);
- free (t->backend);
- free (t->name);
- }
- free (reports[i].tests);
- free (reports[i].configuration);
- }
- free (reports);
-
- return 0;
-}
diff --git a/perf/cairo-perf-graph-widget.c b/perf/cairo-perf-graph-widget.c
deleted file mode 100644
index 41311f7ee..000000000
--- a/perf/cairo-perf-graph-widget.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * Copyright © 2008 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-#include "cairo-perf-graph.h"
-
-#include <gtk/gtk.h>
-
-struct _GraphView {
- GtkWidget widget;
-
- test_case_t *cases;
- cairo_perf_report_t *reports;
- int num_reports;
- double ymin, ymax;
-
- int selected_report;
-};
-
-typedef struct _GraphViewClass {
- GtkWidgetClass parent_class;
-} GraphViewClass;
-
-static GType graph_view_get_type (void);
-
-enum {
- REPORT_SELECTED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (GraphView, graph_view, GTK_TYPE_WIDGET)
-
-static void
-draw_baseline_performance (test_case_t *cases,
- cairo_perf_report_t *reports,
- int num_reports,
- cairo_t *cr,
- const cairo_matrix_t *m)
-{
- test_report_t **tests;
- double dots[2] = { 0, 1.};
- int i;
-
- tests = xmalloc (num_reports * sizeof (test_report_t *));
- for (i = 0; i < num_reports; i++)
- tests[i] = reports[i].tests;
-
- while (cases->backend != NULL) {
- test_report_t *min_test;
- double baseline, last_y;
- double x, y;
-
- if (! cases->shown) {
- cases++;
- continue;
- }
-
- min_test = cases->min_test;
-
- for (i = 0; i < num_reports; i++) {
- while (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) < 0)
- {
- tests[i]++;
- }
- }
-
- /* first the stroke */
- cairo_save (cr);
- cairo_set_line_width (cr, 2.);
- gdk_cairo_set_source_color (cr, &cases->color);
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- baseline = tests[i]->stats.min_ticks;
-
- x = i; y = 0;
- cairo_matrix_transform_point (m, &x, &y);
- x = floor (x);
- y = floor (y);
- cairo_move_to (cr, x, y);
- last_y = y;
- break;
- }
- }
-
- for (++i; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- x = i, y = tests[i]->stats.min_ticks / baseline;
-
- if (y < 1.)
- y = -1./y + 1;
- else
- y -= 1;
-
- cairo_matrix_transform_point (m, &x, &y);
- x = floor (x);
- y = floor (y);
- cairo_line_to (cr, x, last_y);
- cairo_line_to (cr, x, y);
- last_y = y;
- }
- }
- {
- x = num_reports, y = 0;
- cairo_matrix_transform_point (m, &x, &y);
- x = floor (x);
- cairo_line_to (cr, x, last_y);
- }
-
- cairo_set_line_width (cr, 1.);
- cairo_stroke (cr);
-
- /* then draw the points */
- for (i = 0; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- baseline = tests[i]->stats.min_ticks;
-
- x = i; y = 0;
- cairo_matrix_transform_point (m, &x, &y);
- x = floor (x);
- y = floor (y);
- cairo_move_to (cr, x, y);
- cairo_close_path (cr);
- last_y = y;
-
- tests[i]++;
- break;
- }
- }
-
- for (++i; i < num_reports; i++) {
- if (tests[i]->name &&
- test_report_cmp_backend_then_name (tests[i], min_test) == 0)
- {
- x = i, y = tests[i]->stats.min_ticks / baseline;
-
- if (y < 1.)
- y = -1./y + 1;
- else
- y -= 1;
-
- cairo_matrix_transform_point (m, &x, &y);
- x = floor (x);
- y = floor (y);
- cairo_move_to (cr, x, last_y);
- cairo_close_path (cr);
- cairo_move_to (cr, x, y);
- cairo_close_path (cr);
- last_y = y;
-
- tests[i]++;
- }
- }
- {
- x = num_reports, y = 0;
- cairo_matrix_transform_point (m, &x, &y);
- x = floor (x);
- cairo_move_to (cr, x, last_y);
- cairo_close_path (cr);
- }
- cairo_set_source_rgba (cr, 0, 0, 0, .5);
- cairo_set_dash (cr, dots, 2, 0.);
- cairo_set_line_width (cr, 3.);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
- cairo_stroke (cr);
- cairo_restore (cr);
-
- cases++;
- }
- free (tests);
-}
-
-static void
-draw_hline (cairo_t *cr,
- const cairo_matrix_t *m,
- double y0,
- double xmin,
- double xmax)
-{
- double x, y;
- double py_offset;
-
- py_offset = fmod (cairo_get_line_width (cr) / 2., 1.);
-
- x = xmin; y = y0;
- cairo_matrix_transform_point (m, &x, &y);
- cairo_move_to (cr, floor (x), floor (y) + py_offset);
-
- x = xmax; y = y0;
- cairo_matrix_transform_point (m, &x, &y);
- cairo_line_to (cr, ceil (x), floor (y) + py_offset);
-
- cairo_stroke (cr);
-}
-
-static void
-draw_label (cairo_t *cr,
- const cairo_matrix_t *m,
- double y0,
- double xmin,
- double xmax)
-{
- double x, y;
- char buf[80];
- cairo_text_extents_t extents;
-
- snprintf (buf, sizeof (buf), "%.0fx", fabs (y0));
- cairo_text_extents (cr, buf, &extents);
-
- x = xmin; y = y0;
- cairo_matrix_transform_point (m, &x, &y);
- cairo_move_to (cr,
- x - extents.width - 4,
- y - (extents.height/2. + extents.y_bearing));
- cairo_show_text (cr, buf);
-
-
- snprintf (buf, sizeof (buf), "%.0fx", fabs (y0));
- cairo_text_extents (cr, buf, &extents);
-
- x = xmax; y = y0;
- cairo_matrix_transform_point (m, &x, &y);
- cairo_move_to (cr,
- x + 4,
- y - (extents.height/2. + extents.y_bearing));
- cairo_show_text (cr, buf);
-}
-
-#define ALIGN_X(v) ((v)<<0)
-#define ALIGN_Y(v) ((v)<<2)
-static void
-draw_rotated_label (cairo_t *cr,
- const char *text,
- double x,
- double y,
- double angle,
- int align)
-{
- cairo_text_extents_t extents;
-
- cairo_text_extents (cr, text, &extents);
-
- cairo_save (cr); {
- cairo_translate (cr, x, y);
- cairo_rotate (cr, angle);
- switch (align) {
- case ALIGN_X(0) | ALIGN_Y(0):
- cairo_move_to (cr,
- -extents.x_bearing,
- -extents.y_bearing);
- break;
- case ALIGN_X(0) | ALIGN_Y(1):
- cairo_move_to (cr,
- -extents.x_bearing,
- - (extents.height/2. + extents.y_bearing));
- break;
- case ALIGN_X(0) | ALIGN_Y(2):
- cairo_move_to (cr,
- -extents.x_bearing,
- - (extents.height + extents.y_bearing));
- break;
-
- case ALIGN_X(1) | ALIGN_Y(0):
- cairo_move_to (cr,
- - (extents.width/2. + extents.x_bearing),
- -extents.y_bearing);
- break;
- case ALIGN_X(1) | ALIGN_Y(1):
- cairo_move_to (cr,
- - (extents.width/2. + extents.x_bearing),
- - (extents.height/2. + extents.y_bearing));
- break;
- case ALIGN_X(1) | ALIGN_Y(2):
- cairo_move_to (cr,
- - (extents.width/2. + extents.x_bearing),
- - (extents.height + extents.y_bearing));
- break;
-
- case ALIGN_X(2) | ALIGN_Y(0):
- cairo_move_to (cr,
- - (extents.width + extents.x_bearing),
- -extents.y_bearing);
- break;
- case ALIGN_X(2) | ALIGN_Y(1):
- cairo_move_to (cr,
- - (extents.width + extents.x_bearing),
- - (extents.height/2. + extents.y_bearing));
- break;
- case ALIGN_X(2) | ALIGN_Y(2):
- cairo_move_to (cr,
- - (extents.width + extents.x_bearing),
- - (extents.height + extents.y_bearing));
- break;
- }
- cairo_show_text (cr, text);
- } cairo_restore (cr);
-}
-
-#define PAD 36
-static void
-graph_view_draw (GraphView *self,
- cairo_t *cr)
-{
- cairo_matrix_t m;
- const double dash[2] = {4, 4};
- double range;
- int i;
-
- if (self->widget.allocation.width < 4 *PAD)
- return;
- if (self->widget.allocation.height < 3 *PAD)
- return;
-
- range = floor (self->ymax+1) - ceil (self->ymin-1);
-
- cairo_matrix_init_translate (&m, PAD, self->widget.allocation.height - PAD);
- cairo_matrix_scale (&m,
- (self->widget.allocation.width-2*PAD)/(self->num_reports),
- -(self->widget.allocation.height-2*PAD)/range);
- cairo_matrix_translate (&m, 0, floor (self->ymax+1));
-
- if (self->selected_report != -1) {
- cairo_save (cr); {
- double x0, x1, y;
- x0 = self->selected_report; y = 0;
- cairo_matrix_transform_point (&m, &x0, &y);
- x0 = floor (x0);
- x1 = self->selected_report + 1; y = 0;
- cairo_matrix_transform_point (&m, &x1, &y);
- x1 = ceil (x1);
- y = (x1 - x0) / 8;
- y = MIN (y, PAD / 2);
- x0 -= y;
- x1 += y;
- cairo_rectangle (cr, x0, PAD/2, x1-x0, self->widget.allocation.height-2*PAD + PAD);
- gdk_cairo_set_source_color (cr, &self->widget.style->base[GTK_STATE_SELECTED]);
- cairo_fill (cr);
- } cairo_restore (cr);
- }
-
- cairo_save (cr); {
- cairo_pattern_t *linear;
- double x, y;
-
- gdk_cairo_set_source_color (cr,
- &self->widget.style->fg[GTK_WIDGET_STATE (self)]);
- cairo_set_line_width (cr, 2.);
- draw_hline (cr, &m, 0, 0, self->num_reports);
-
- cairo_set_line_width (cr, 1.);
- cairo_set_dash (cr, NULL, 0, 0);
-
- for (i = ceil (self->ymin-1); i <= floor (self->ymax+1); i++) {
- if (i != 0)
- draw_hline (cr, &m, i, 0, self->num_reports);
- }
-
- cairo_set_font_size (cr, 11);
-
- linear = cairo_pattern_create_linear (0, PAD, 0, self->widget.allocation.height-2*PAD);
- cairo_pattern_add_color_stop_rgb (linear, 0, 0, 1, 0);
- cairo_pattern_add_color_stop_rgb (linear, 1, 1, 0, 0);
- cairo_set_source (cr, linear);
- cairo_pattern_destroy (linear);
-
- for (i = ceil (self->ymin-1); i <= floor (self->ymax+1); i++) {
- if (i != 0)
- draw_label (cr, &m, i, 0, self->num_reports);
- }
-
- x = 0, y = floor (self->ymax+1);
- cairo_matrix_transform_point (&m, &x, &y);
- draw_rotated_label (cr, "Faster", x - 7, y + 14,
- 270./360 * 2 * G_PI,
- ALIGN_X(2) | ALIGN_Y(1));
- x = self->num_reports, y = floor (self->ymax+1);
- cairo_matrix_transform_point (&m, &x, &y);
- draw_rotated_label (cr, "Faster", x + 11, y + 14,
- 270./360 * 2 * G_PI,
- ALIGN_X(2) | ALIGN_Y(1));
-
- x = 0, y = ceil (self->ymin-1);
- cairo_matrix_transform_point (&m, &x, &y);
- draw_rotated_label (cr, "Slower", x - 7, y - 14,
- 90./360 * 2 * G_PI,
- ALIGN_X(2) | ALIGN_Y(1));
- x = self->num_reports, y = ceil (self->ymin-1);
- cairo_matrix_transform_point (&m, &x, &y);
- draw_rotated_label (cr, "Slower", x + 11, y - 14,
- 90./360 * 2 * G_PI,
- ALIGN_X(2) | ALIGN_Y(1));
- } cairo_restore (cr);
-
- draw_baseline_performance (self->cases,
- self->reports, self->num_reports,
- cr, &m);
-
- cairo_save (cr); {
- cairo_set_source_rgb (cr, 0.7, 0.7, 0.7);
- cairo_set_line_width (cr, 1.);
- cairo_set_dash (cr, dash, 2, 0);
- draw_hline (cr, &m, 0, 0, self->num_reports);
- } cairo_restore (cr);
-}
-
-static gboolean
-graph_view_expose (GtkWidget *w,
- GdkEventExpose *ev)
-{
- GraphView *self = (GraphView *) w;
- cairo_t *cr;
-
- cr = gdk_cairo_create (w->window);
- gdk_cairo_set_source_color (cr, &w->style->base[GTK_WIDGET_STATE (w)]);
- cairo_paint (cr);
-
- graph_view_draw (self, cr);
-
- cairo_destroy (cr);
-
- return FALSE;
-}
-
-static gboolean
-graph_view_button_press (GtkWidget *w,
- GdkEventButton *ev)
-{
- GraphView *self = (GraphView *) w;
- cairo_matrix_t m;
- double x,y;
- int i;
-
- cairo_matrix_init_translate (&m, PAD, self->widget.allocation.height-PAD);
- cairo_matrix_scale (&m, (self->widget.allocation.width-2*PAD)/self->num_reports, -(self->widget.allocation.height-2*PAD)/(self->ymax - self->ymin));
- cairo_matrix_translate (&m, 0, -self->ymin);
- cairo_matrix_invert (&m);
-
- x = ev->x;
- y = ev->y;
- cairo_matrix_transform_point (&m, &x, &y);
-
- i = floor (x);
- if (i < 0 || i >= self->num_reports)
- i = -1;
-
- if (i != self->selected_report) {
- self->selected_report = i;
- gtk_widget_queue_draw (w);
-
- g_signal_emit (w, signals[REPORT_SELECTED], 0, i);
- }
-
- return FALSE;
-}
-
-static gboolean
-graph_view_button_release (GtkWidget *w,
- GdkEventButton *ev)
-{
- GraphView *self = (GraphView *) w;
-
- return FALSE;
-}
-
-static void
-graph_view_realize (GtkWidget *widget)
-{
- GdkWindowAttr attributes;
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
- attributes.event_mask = gtk_widget_get_events (widget) |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_EXPOSURE_MASK;
-
- widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
- &attributes,
- GDK_WA_X | GDK_WA_Y |
- GDK_WA_VISUAL | GDK_WA_COLORMAP);
- gdk_window_set_user_data (widget->window, widget);
-
- widget->style = gtk_style_attach (widget->style, widget->window);
- gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
-}
-
-static void
-graph_view_finalize (GObject *obj)
-{
- G_OBJECT_CLASS (graph_view_parent_class)->finalize (obj);
-}
-
-static void
-graph_view_class_init (GraphViewClass *klass)
-{
- GObjectClass *object_class = (GObjectClass *) klass;
- GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
-
- object_class->finalize = graph_view_finalize;
-
- widget_class->realize = graph_view_realize;
- widget_class->expose_event = graph_view_expose;
- widget_class->button_press_event = graph_view_button_press;
- widget_class->button_release_event = graph_view_button_release;
-
- signals[REPORT_SELECTED] =
- g_signal_new ("report-selected",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST,
- 0,//G_STRUCT_OFFSET (GraphView, report_selected),
- NULL, NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-}
-
-static void
-graph_view_init (GraphView *self)
-{
- self->selected_report = -1;
-}
-
-GtkWidget *
-graph_view_new (void)
-{
- return g_object_new (graph_view_get_type (), NULL);
-}
-
-void
-graph_view_update_visible (GraphView *gv)
-{
- double min, max;
- test_case_t *cases;
-
- cases = gv->cases;
-
- min = max = 1.;
- while (cases->name != NULL) {
- if (cases->shown) {
- if (cases->min < min)
- min = cases->min;
- if (cases->max > max)
- max = cases->max;
- }
- cases++;
- }
- gv->ymin = -1/min + 1;
- gv->ymax = max - 1;
-
- gtk_widget_queue_draw (&gv->widget);
-}
-
-void
-graph_view_set_reports (GraphView *gv,
- test_case_t *cases,
- cairo_perf_report_t *reports,
- int num_reports)
-{
- /* XXX ownership? */
- gv->cases = cases;
- gv->reports = reports;
- gv->num_reports = num_reports;
-
- graph_view_update_visible (gv);
-}
diff --git a/perf/cairo-perf-graph.h b/perf/cairo-perf-graph.h
deleted file mode 100644
index 4cb62165f..000000000
--- a/perf/cairo-perf-graph.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright © 2008 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#ifndef CAIRO_PERF_GRAPH_H
-#define CAIRO_PERF_GRAPH_H
-
-#include <gtk/gtk.h>
-
-#include "cairo-perf.h"
-
-typedef struct _test_case {
- const char *backend;
- const char *content;
- const char *name;
- int size;
-
- test_report_t *min_test;
-
- cairo_bool_t shown;
- double baseline;
- double min, max;
- GdkColor color;
-} test_case_t;
-
-typedef struct _GraphView GraphView;
-
-GtkWidget *
-graph_view_new (void);
-
-void
-graph_view_set_reports (GraphView *gv,
- test_case_t *tests,
- cairo_perf_report_t *reports,
- int num_reports);
-
-void
-graph_view_update_visible (GraphView *gv);
-
-#endif
diff --git a/perf/cairo-perf-micro.c b/perf/cairo-perf-micro.c
deleted file mode 100644
index d6b52c446..000000000
--- a/perf/cairo-perf-micro.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
-/*
- * Copyright © 2006 Mozilla Corporation
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Vladimir Vukicevic <vladimir@pobox.com>
- * Carl Worth <cworth@cworth.org>
- */
-
-#define _GNU_SOURCE 1 /* for sched_getaffinity() */
-
-#include "../cairo-version.h" /* for the real version */
-
-#include "cairo-perf.h"
-#include "cairo-stats.h"
-
-#include "cairo-boilerplate-getopt.h"
-
-/* For basename */
-#ifdef HAVE_LIBGEN_H
-#include <libgen.h>
-#endif
-
-#if HAVE_FCFINI
-#include <fontconfig/fontconfig.h>
-#endif
-
-#ifdef HAVE_SCHED_H
-#include <sched.h>
-#endif
-
-#define CAIRO_PERF_ITERATIONS_DEFAULT 100
-#define CAIRO_PERF_LOW_STD_DEV 0.03
-#define CAIRO_PERF_STABLE_STD_DEV_COUNT 5
-#define CAIRO_PERF_ITERATION_MS_DEFAULT 2000
-#define CAIRO_PERF_ITERATION_MS_FAST 5
-
-typedef struct _cairo_perf_case {
- CAIRO_PERF_RUN_DECL (*run);
- cairo_bool_t (*enabled) (cairo_perf_t *perf);
- unsigned int min_size;
- unsigned int max_size;
-} cairo_perf_case_t;
-
-const cairo_perf_case_t perf_cases[];
-
-static const char *
-_content_to_string (cairo_content_t content,
- cairo_bool_t similar)
-{
- switch (content|similar) {
- case CAIRO_CONTENT_COLOR:
- return "rgb";
- case CAIRO_CONTENT_COLOR|1:
- return "rgb&";
- case CAIRO_CONTENT_ALPHA:
- return "a";
- case CAIRO_CONTENT_ALPHA|1:
- return "a&";
- case CAIRO_CONTENT_COLOR_ALPHA:
- return "rgba";
- case CAIRO_CONTENT_COLOR_ALPHA|1:
- return "rgba&";
- default:
- return "<unknown_content>";
- }
-}
-
-static cairo_bool_t
-cairo_perf_has_similar (cairo_perf_t *perf)
-{
- cairo_surface_t *target;
-
- if (getenv ("CAIRO_TEST_SIMILAR") == NULL)
- return FALSE;
-
- /* exclude the image backend */
- target = cairo_get_target (perf->cr);
- if (cairo_surface_get_type (target) == CAIRO_SURFACE_TYPE_IMAGE)
- return FALSE;
-
- return TRUE;
-}
-
-cairo_bool_t
-cairo_perf_can_run (cairo_perf_t *perf,
- const char *name,
- cairo_bool_t *is_explicit)
-{
- unsigned int i;
-
- if (is_explicit)
- *is_explicit = FALSE;
-
- if (perf->num_names == 0)
- return TRUE;
-
- for (i = 0; i < perf->num_names; i++) {
- if (strstr (name, perf->names[i])) {
- if (is_explicit)
- *is_explicit = FALSE;
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static unsigned
-cairo_perf_calibrate (cairo_perf_t *perf,
- cairo_perf_func_t perf_func)
-{
- cairo_time_t calibration, calibration_max;
- unsigned loops, min_loops;
-
- min_loops = 1;
- calibration = perf_func (perf->cr, perf->size, perf->size, min_loops);
-
- if (!perf->fast_and_sloppy) {
- calibration_max = _cairo_time_from_s (perf->ms_per_iteration * 0.0001 / 4);
- while (calibration < calibration_max) {
- min_loops *= 2;
- calibration = perf_func (perf->cr, perf->size, perf->size, min_loops);
- }
- }
-
- /* XXX
- * Compute the number of loops required for the timing
- * interval to be perf->ms_per_iteration milliseconds. This
- * helps to eliminate sampling variance due to timing and
- * other systematic errors. However, it also hides
- * synchronisation overhead as we attempt to process a large
- * batch of identical operations in a single shot. This can be
- * considered both good and bad... It would be good to perform
- * a more rigorous analysis of the synchronisation overhead,
- * that is to estimate the time for loop=0.
- */
- loops = _cairo_time_from_s (perf->ms_per_iteration * 0.001 * min_loops / calibration);
- min_loops = perf->fast_and_sloppy ? 1 : 10;
- if (loops < min_loops)
- loops = min_loops;
-
- return loops;
-}
-
-void
-cairo_perf_run (cairo_perf_t *perf,
- const char *name,
- cairo_perf_func_t perf_func,
- cairo_count_func_t count_func)
-{
- static cairo_bool_t first_run = TRUE;
- unsigned int i, similar, similar_iters;
- cairo_time_t *times;
- cairo_stats_t stats = {0.0, 0.0};
- int low_std_dev_count;
-
- if (perf->list_only) {
- printf ("%s\n", name);
- return;
- }
-
- if (first_run) {
- if (perf->raw) {
- printf ("[ # ] %s.%-s %s %s %s ...\n",
- "backend", "content", "test-size", "ticks-per-ms", "time(ticks)");
- }
-
- if (perf->summary) {
- fprintf (perf->summary,
- "[ # ] %8s.%-4s %28s %8s %8s %5s %5s %s %s\n",
- "backend", "content", "test-size", "min(ticks)", "min(ms)", "median(ms)",
- "stddev.", "iterations", "overhead");
- }
- first_run = FALSE;
- }
-
- times = perf->times;
-
- if (getenv ("CAIRO_PERF_OUTPUT") != NULL) { /* check output */
- char *filename;
- cairo_status_t status;
-
- xasprintf (&filename, "%s.%s.%s.%d.out.png",
- name, perf->target->name,
- _content_to_string (perf->target->content, 0),
- perf->size);
- cairo_save (perf->cr);
- perf_func (perf->cr, perf->size, perf->size, 1);
- cairo_restore (perf->cr);
- status = cairo_surface_write_to_png (cairo_get_target (perf->cr), filename);
- if (status) {
- fprintf (stderr, "Failed to generate output check '%s': %s\n",
- filename, cairo_status_to_string (status));
- return;
- }
-
- free (filename);
- }
-
- if (cairo_perf_has_similar (perf))
- similar_iters = 2;
- else
- similar_iters = 1;
-
- for (similar = 0; similar < similar_iters; similar++) {
- unsigned loops;
-
- if (perf->summary) {
- fprintf (perf->summary,
- "[%3d] %8s.%-5s %26s.%-3d ",
- perf->test_number, perf->target->name,
- _content_to_string (perf->target->content, similar),
- name, perf->size);
- fflush (perf->summary);
- }
-
- /* We run one iteration in advance to warm caches and calibrate. */
- cairo_perf_yield ();
- if (similar)
- cairo_push_group_with_content (perf->cr,
- cairo_boilerplate_content (perf->target->content));
- else
- cairo_save (perf->cr);
- perf_func (perf->cr, perf->size, perf->size, 1);
- loops = cairo_perf_calibrate (perf, perf_func);
- if (similar)
- cairo_pattern_destroy (cairo_pop_group (perf->cr));
- else
- cairo_restore (perf->cr);
-
- low_std_dev_count = 0;
- for (i =0; i < perf->iterations; i++) {
- cairo_perf_yield ();
- if (similar)
- cairo_push_group_with_content (perf->cr,
- cairo_boilerplate_content (perf->target->content));
- else
- cairo_save (perf->cr);
- times[i] = perf_func (perf->cr, perf->size, perf->size, loops) ;
- if (similar)
- cairo_pattern_destroy (cairo_pop_group (perf->cr));
- else
- cairo_restore (perf->cr);
- if (perf->raw) {
- if (i == 0)
- printf ("[*] %s.%s %s.%d %g",
- perf->target->name,
- _content_to_string (perf->target->content, similar),
- name, perf->size,
- _cairo_time_to_double (_cairo_time_from_s (1.)) / 1000.);
- printf (" %lld", (long long) (times[i] / (double) loops));
- } else if (! perf->exact_iterations) {
- if (i > 0) {
- _cairo_stats_compute (&stats, times, i+1);
-
- if (stats.std_dev <= CAIRO_PERF_LOW_STD_DEV) {
- low_std_dev_count++;
- if (low_std_dev_count >= CAIRO_PERF_STABLE_STD_DEV_COUNT)
- break;
- } else {
- low_std_dev_count = 0;
- }
- }
- }
- }
-
- if (perf->raw)
- printf ("\n");
-
- if (perf->summary) {
- _cairo_stats_compute (&stats, times, i);
- if (count_func != NULL) {
- double count = count_func (perf->cr, perf->size, perf->size);
- fprintf (perf->summary,
- "%.3f [%10lld/%d] %#8.3f %#8.3f %#5.2f%% %3d: %.2f\n",
- stats.min_ticks /(double) loops,
- (long long) stats.min_ticks, loops,
- _cairo_time_to_s (stats.min_ticks) * 1000.0 / loops,
- _cairo_time_to_s (stats.median_ticks) * 1000.0 / loops,
- stats.std_dev * 100.0, stats.iterations,
- count / _cairo_time_to_s (stats.min_ticks));
- } else {
- fprintf (perf->summary,
- "%.3f [%10lld/%d] %#8.3f %#8.3f %#5.2f%% %3d\n",
- stats.min_ticks /(double) loops,
- (long long) stats.min_ticks, loops,
- _cairo_time_to_s (stats.min_ticks) * 1000.0 / loops,
- _cairo_time_to_s (stats.median_ticks) * 1000.0 / loops,
- stats.std_dev * 100.0, stats.iterations);
- }
- fflush (perf->summary);
- }
-
- perf->test_number++;
- }
-}
-
-static void
-usage (const char *argv0)
-{
- fprintf (stderr,
-"Usage: %s [-flrv] [-i iterations] [test-names ...]\n"
-"\n"
-"Run the cairo performance test suite over the given tests (all by default)\n"
-"The command-line arguments are interpreted as follows:\n"
-"\n"
-" -f fast; faster, less accurate\n"
-" -i iterations; specify the number of iterations per test case\n"
-" -l list only; just list selected test case names without executing\n"
-" -r raw; display each time measurement instead of summary statistics\n"
-" -v verbose; in raw mode also show the summaries\n"
-"\n"
-"If test names are given they are used as sub-string matches so a command\n"
-"such as \"%s text\" can be used to run all text test cases.\n",
- argv0, argv0);
-}
-
-static void
-parse_options (cairo_perf_t *perf,
- int argc,
- char *argv[])
-{
- int c;
- const char *iters;
- const char *ms = NULL;
- char *end;
- int verbose = 0;
-
- if ((iters = getenv("CAIRO_PERF_ITERATIONS")) && *iters)
- perf->iterations = strtol(iters, NULL, 0);
- else
- perf->iterations = CAIRO_PERF_ITERATIONS_DEFAULT;
- perf->exact_iterations = 0;
-
- perf->fast_and_sloppy = FALSE;
- perf->ms_per_iteration = CAIRO_PERF_ITERATION_MS_DEFAULT;
- if ((ms = getenv("CAIRO_PERF_ITERATION_MS")) && *ms) {
- perf->ms_per_iteration = atof(ms);
- }
-
- perf->raw = FALSE;
- perf->list_only = FALSE;
- perf->names = NULL;
- perf->num_names = 0;
- perf->summary = stdout;
-
- while (1) {
- c = _cairo_getopt (argc, argv, "fi:lrv");
- if (c == -1)
- break;
-
- switch (c) {
- case 'f':
- perf->fast_and_sloppy = TRUE;
- if (ms == NULL)
- perf->ms_per_iteration = CAIRO_PERF_ITERATION_MS_FAST;
- break;
- case 'i':
- perf->exact_iterations = TRUE;
- perf->iterations = strtoul (optarg, &end, 10);
- if (*end != '\0') {
- fprintf (stderr, "Invalid argument for -i (not an integer): %s\n",
- optarg);
- exit (1);
- }
- break;
- case 'l':
- perf->list_only = TRUE;
- break;
- case 'r':
- perf->raw = TRUE;
- perf->summary = NULL;
- break;
- case 'v':
- verbose = 1;
- break;
- default:
- fprintf (stderr, "Internal error: unhandled option: %c\n", c);
- /* fall-through */
- case '?':
- usage (argv[0]);
- exit (1);
- }
- }
-
- if (verbose && perf->summary == NULL)
- perf->summary = stderr;
-
- if (optind < argc) {
- perf->names = &argv[optind];
- perf->num_names = argc - optind;
- }
-}
-
-static int
-check_cpu_affinity (void)
-{
-#ifdef HAVE_SCHED_GETAFFINITY
-
- cpu_set_t affinity;
- int i, cpu_count;
-
- if (sched_getaffinity(0, sizeof(affinity), &affinity)) {
- perror("sched_getaffinity");
- return -1;
- }
-
- for(i = 0, cpu_count = 0; i < CPU_SETSIZE; ++i) {
- if (CPU_ISSET(i, &affinity))
- ++cpu_count;
- }
-
- if (cpu_count > 1) {
- fputs(
- "WARNING: cairo-perf has not been bound to a single CPU.\n",
- stderr);
- return -1;
- }
-
- return 0;
-#else
- fputs(
- "WARNING: Cannot check CPU affinity for this platform.\n",
- stderr);
- return -1;
-#endif
-}
-
-static void
-cairo_perf_fini (cairo_perf_t *perf)
-{
- cairo_boilerplate_free_targets (perf->targets);
- cairo_boilerplate_fini ();
-
- free (perf->times);
- cairo_debug_reset_static_data ();
-#if HAVE_FCFINI
- FcFini ();
-#endif
-}
-
-
-int
-main (int argc,
- char *argv[])
-{
- int i, j;
- cairo_perf_t perf;
- cairo_surface_t *surface;
-
- parse_options (&perf, argc, argv);
-
- if (check_cpu_affinity()) {
- fputs(
- "NOTICE: cairo-perf and the X server should be bound to CPUs (either the same\n"
- "or separate) on SMP systems. Not doing so causes random results when the X\n"
- "server is moved to or from cairo-perf's CPU during the benchmarks:\n"
- "\n"
- " $ sudo taskset -cp 0 $(pidof X)\n"
- " $ taskset -cp 1 $$\n"
- "\n"
- "See taskset(1) for information about changing CPU affinity.\n",
- stderr);
- }
-
- perf.targets = cairo_boilerplate_get_targets (&perf.num_targets, NULL);
- perf.times = xmalloc (perf.iterations * sizeof (cairo_time_t));
-
- for (i = 0; i < perf.num_targets; i++) {
- const cairo_boilerplate_target_t *target = perf.targets[i];
-
- if (! target->is_measurable)
- continue;
-
- perf.target = target;
- perf.test_number = 0;
-
- for (j = 0; perf_cases[j].run; j++) {
- const cairo_perf_case_t *perf_case = &perf_cases[j];
-
- if (! perf_case->enabled (&perf))
- continue;
-
- for (perf.size = perf_case->min_size;
- perf.size <= perf_case->max_size;
- perf.size *= 2)
- {
- void *closure;
-
- surface = (target->create_surface) (NULL,
- target->content,
- perf.size, perf.size,
- perf.size, perf.size,
- CAIRO_BOILERPLATE_MODE_PERF,
- &closure);
- if (surface == NULL) {
- fprintf (stderr,
- "Error: Failed to create target surface: %s\n",
- target->name);
- continue;
- }
-
- cairo_perf_timer_set_synchronize (target->synchronize, closure);
-
- perf.cr = cairo_create (surface);
-
- perf_case->run (&perf, perf.cr, perf.size, perf.size);
-
- if (cairo_status (perf.cr)) {
- fprintf (stderr, "Error: Test left cairo in an error state: %s\n",
- cairo_status_to_string (cairo_status (perf.cr)));
- }
-
- cairo_destroy (perf.cr);
- cairo_surface_destroy (surface);
-
- if (target->cleanup)
- target->cleanup (closure);
- }
- }
- }
-
- cairo_perf_fini (&perf);
-
- return 0;
-}
-
-#define FUNC(f) f, f##_enabled
-const cairo_perf_case_t perf_cases[] = {
- { FUNC(pixel), 1, 1 },
- { FUNC(a1_pixel), 1, 1 },
- { FUNC(paint), 64, 512},
- { FUNC(paint_with_alpha), 64, 512},
- { FUNC(fill), 64, 512},
- { FUNC(stroke), 64, 512},
- { FUNC(text), 64, 512},
- { FUNC(glyphs), 64, 512},
- { FUNC(mask), 64, 512},
- { FUNC(line), 32, 512},
- { FUNC(a1_line), 32, 512},
- { FUNC(curve), 32, 512},
- { FUNC(a1_curve), 32, 512},
- { FUNC(disjoint), 64, 512},
- { FUNC(hatching), 64, 512},
- { FUNC(tessellate), 100, 100},
- { FUNC(subimage_copy), 16, 512},
- { FUNC(hash_table), 16, 16},
- { FUNC(pattern_create_radial), 16, 16},
- { FUNC(zrusin), 415, 415},
- { FUNC(world_map), 800, 800},
- { FUNC(box_outline), 100, 100},
- { FUNC(mosaic), 800, 800 },
- { FUNC(long_lines), 100, 100},
- { FUNC(unaligned_clip), 100, 100},
- { FUNC(rectangles), 512, 512},
- { FUNC(rounded_rectangles), 512, 512},
- { FUNC(long_dashed_lines), 512, 512},
- { FUNC(composite_checker), 16, 512},
- { FUNC(twin), 800, 800},
- { FUNC(dragon), 1024, 1024 },
- { FUNC(sierpinski), 32, 1024 },
- { FUNC(pythagoras_tree), 768, 768 },
- { FUNC(intersections), 512, 512 },
- { FUNC(many_strokes), 32, 512 },
- { FUNC(wide_strokes), 32, 512 },
- { FUNC(many_fills), 32, 512 },
- { FUNC(wide_fills), 32, 512 },
- { FUNC(many_curves), 32, 512 },
- { FUNC(spiral), 512, 512 },
- { FUNC(wave), 500, 500 },
- { FUNC(fill_clip), 16, 512 },
- { FUNC(tiger), 16, 1024 },
- { NULL }
-};
diff --git a/perf/cairo-perf-print.c b/perf/cairo-perf-print.c
deleted file mode 100644
index d7ae1311e..000000000
--- a/perf/cairo-perf-print.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "cairo-perf.h"
-#include "cairo-stats.h"
-
-#include <stdio.h>
-
-#if HAVE_UNISTD_H && HAVE_SYS_IOCTL_H
-#define USE_TERMINAL_SIZE 1
-#else
-#define USE_TERMINAL_SIZE 0
-#endif
-
-#if USE_TERMINAL_SIZE
-#include <unistd.h>
-#include <sys/ioctl.h>
-#endif
-
-static void
-report_print (const cairo_perf_report_t *report,
- int show_histogram)
-{
- const test_report_t *test;
- cairo_histogram_t h;
-
- if (show_histogram) {
- int num_rows = 23;
- int num_cols = 80;
-
-#if USE_TERMINAL_SIZE
- int fd = fileno(stdout);
- if (isatty(fd)) {
- struct winsize ws;
-
- if(ioctl(fd, TIOCGWINSZ, &ws) == 0 ) {
- num_rows = ws.ws_row - 1;
- num_cols = ws.ws_col;
- }
- }
-#endif
-
- if (!_cairo_histogram_init (&h, num_cols, num_rows))
- show_histogram = 0;
- }
-
- for (test = report->tests; test->name != NULL; test++) {
- if (test->stats.iterations == 0)
- continue;
-
- if (show_histogram) {
- const cairo_time_t *values;
- int num_values;
-
- if (show_histogram > 1) {
- values = test->stats.values;
- num_values = test->stats.iterations;
- } else {
- values = test->samples;
- num_values = test->samples_count;
- }
-
- if (_cairo_histogram_compute (&h, values, num_values))
- _cairo_histogram_printf (&h, stdout);
- }
-
- if (test->size) {
- printf ("%5s-%-4s %26s-%-3d ",
- test->backend, test->content,
- test->name, test->size);
- } else {
- printf ("%5s %26s ", test->backend, test->name);
- }
- printf("%6.2f %4.2f%% (%d/%d)\n",
- test->stats.median_ticks / test->stats.ticks_per_ms,
- test->stats.std_dev * 100,
- test->stats.iterations, test->samples_count);
- }
-
- if (show_histogram)
- _cairo_histogram_fini (&h);
-}
-
-int
-main (int argc,
- const char *argv[])
-{
- cairo_bool_t show_histogram = 0;
- int i;
-
- for (i = 1; i < argc; i++ ) {
- cairo_perf_report_t report;
-
- if (strcmp(argv[i], "--histogram") == 0) {
- show_histogram = 1;
- continue;
- }
-
- if (strcmp(argv[i], "--short-histogram") == 0) {
- show_histogram = 2;
- continue;
- }
-
- cairo_perf_report_load (&report, argv[i], i, NULL);
- report_print (&report, show_histogram);
- }
-
- return 0;
-}
diff --git a/perf/cairo-perf-report.c b/perf/cairo-perf-report.c
deleted file mode 100644
index 2325f4793..000000000
--- a/perf/cairo-perf-report.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of the
- * copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- */
-
-#define _GETDELIM 1/* for getline() on AIX */
-
-#include "cairo-perf.h"
-#include "cairo-missing.h"
-#include "cairo-stats.h"
-
-/* We use _GNU_SOURCE for getline and strndup if available. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <math.h>
-#include <assert.h>
-#ifdef HAVE_LIBGEN_H
-#include <libgen.h>
-#endif
-
-#ifdef _MSC_VER
-static long long
-strtoll (const char *nptr,
- char **endptr,
- int base);
-
-static char *
-basename (char *path);
-#endif
-
-/* Ad-hoc parsing, macros with a strong dependence on the calling
- * context, and plenty of other ugliness is here. But at least it's
- * not perl... */
-#define parse_error(...) fprintf(stderr, __VA_ARGS__); return TEST_REPORT_STATUS_ERROR;
-#define skip_char(c) \
-do { \
- if (*s && *s == (c)) { \
- s++; \
- } else { \
- parse_error ("expected '%c' but found '%c'", c, *s); \
- } \
-} while (0)
-#define skip_space() while (*s && (*s == ' ' || *s == '\t')) s++;
-#define parse_int(result) \
-do { \
- (result) = strtol (s, &end, 10); \
- if (*s && end != s) { \
- s = end; \
- } else { \
- parse_error("expected integer but found %s", s); \
- } \
-} while (0)
-#define parse_long_long(result) \
-do { \
- (result) = strtoll (s, &end, 10); \
- if (*s && end != s) { \
- s = end; \
- } else { \
- parse_error("expected integer but found %s", s); \
- } \
-} while (0)
-#define parse_double(result) \
-do { \
- (result) = strtod (s, &end); \
- if (*s && end != s) { \
- s = end; \
- } else { \
- parse_error("expected floating-point value but found %s", s); \
- } \
-} while (0)
-/* Here a string is simply a sequence of non-whitespace */
-#define parse_string(result) \
-do { \
- for (end = s; *end; end++) \
- if (isspace (*end)) \
- break; \
- (result) = strndup (s, end - s); \
- if ((result) == NULL) { \
- fprintf (stderr, "Out of memory.\n"); \
- exit (1); \
- } \
- s = end; \
-} while (0)
-
-static test_report_status_t
-test_report_parse (test_report_t *report,
- int fileno,
- char *line,
- char *configuration)
-{
- char *end;
- char *s = line;
- cairo_bool_t is_raw = FALSE;
- double min_time, median_time;
-
- /* The code here looks funny unless you understand that these are
- * all macro calls, (and then the code just looks sick). */
- if (*s == '\n')
- return TEST_REPORT_STATUS_COMMENT;
-
- skip_char ('[');
- skip_space ();
- if (*s == '#')
- return TEST_REPORT_STATUS_COMMENT;
- if (*s == '*') {
- s++;
- is_raw = TRUE;
- } else {
- parse_int (report->id);
- }
- skip_char (']');
-
- skip_space ();
-
- report->fileno = fileno;
- report->configuration = configuration;
- parse_string (report->backend);
- end = strrchr (report->backend, '.');
- if (end)
- *end++ = '\0';
- report->content = end ? end : xstrdup ("???");
-
- skip_space ();
-
- parse_string (report->name);
- end = strrchr (report->name, '.');
- if (end)
- *end++ = '\0';
- report->size = end ? atoi (end) : 0;
-
- skip_space ();
-
- report->samples = NULL;
- report->samples_size = 0;
- report->samples_count = 0;
-
- if (is_raw) {
- parse_double (report->stats.ticks_per_ms);
- skip_space ();
-
- report->samples_size = 5;
- report->samples = xmalloc (report->samples_size * sizeof (cairo_time_t));
- report->stats.min_ticks = 0;
- do {
- if (report->samples_count == report->samples_size) {
- report->samples_size *= 2;
- report->samples = xrealloc (report->samples,
- report->samples_size * sizeof (cairo_time_t));
- }
- parse_long_long (report->samples[report->samples_count]);
- if (report->samples_count == 0) {
- report->stats.min_ticks =
- report->samples[report->samples_count];
- } else if (report->stats.min_ticks >
- report->samples[report->samples_count]){
- report->stats.min_ticks =
- report->samples[report->samples_count];
- }
- report->samples_count++;
- skip_space ();
- } while (*s && *s != '\n');
- report->stats.iterations = 0;
- if (*s) skip_char ('\n');
- } else {
- parse_double (report->stats.min_ticks);
- skip_space ();
-
- parse_double (min_time);
- report->stats.ticks_per_ms = report->stats.min_ticks / min_time;
-
- skip_space ();
-
- parse_double (median_time);
- report->stats.median_ticks = median_time * report->stats.ticks_per_ms;
-
- skip_space ();
-
- parse_double (report->stats.std_dev);
- report->stats.std_dev /= 100.0;
- skip_char ('%');
-
- skip_space ();
-
- parse_int (report->stats.iterations);
-
- skip_space ();
- skip_char ('\n');
- }
-
- return TEST_REPORT_STATUS_SUCCESS;
-}
-
-/* We provide hereafter a win32 implementation of the basename
- * and strtoll functions which are not available otherwise.
- * The basename function is fully compliant to its GNU specs.
- */
-#ifdef _MSC_VER
-long long
-strtoll (const char *nptr,
- char **endptr,
- int base)
-{
- return _atoi64(nptr);
-}
-
-static char *
-basename (char *path)
-{
- char *end, *s;
-
- end = (path + strlen(path) - 1);
- while (end && (end >= path + 1) && (*end == '/')) {
- *end = '\0';
- end--;
- }
-
- s = strrchr(path, '/');
- if (s) {
- if (s == end) {
- return s;
- } else {
- return s+1;
- }
- } else {
- return path;
- }
-}
-#endif /* ifndef _MSC_VER */
-
-int
-test_report_cmp_backend_then_name (const void *a,
- const void *b)
-{
- const test_report_t *a_test = a;
- const test_report_t *b_test = b;
-
- int cmp;
-
- cmp = strcmp (a_test->backend, b_test->backend);
- if (cmp)
- return cmp;
-
- cmp = strcmp (a_test->content, b_test->content);
- if (cmp)
- return cmp;
-
- /* A NULL name is a list-termination marker, so force it last. */
- if (a_test->name == NULL)
- if (b_test->name == NULL)
- return 0;
- else
- return 1;
- else if (b_test->name == NULL)
- return -1;
-
- cmp = strcmp (a_test->name, b_test->name);
- if (cmp)
- return cmp;
-
- if (a_test->size < b_test->size)
- return -1;
- if (a_test->size > b_test->size)
- return 1;
-
- return 0;
-}
-
-int
-test_report_cmp_name (const void *a,
- const void *b)
-{
- const test_report_t *a_test = a;
- const test_report_t *b_test = b;
-
- int cmp;
-
- /* A NULL name is a list-termination marker, so force it last. */
- if (a_test->name == NULL)
- if (b_test->name == NULL)
- return 0;
- else
- return 1;
- else if (b_test->name == NULL)
- return -1;
-
- cmp = strcmp (a_test->name, b_test->name);
- if (cmp)
- return cmp;
-
- if (a_test->size < b_test->size)
- return -1;
- if (a_test->size > b_test->size)
- return 1;
-
- return 0;
-}
-
-void
-cairo_perf_report_sort_and_compute_stats (cairo_perf_report_t *report,
- int (*cmp) (const void*, const void*))
-{
- test_report_t *base, *next, *last, *t;
-
- if (cmp == NULL)
- cmp = test_report_cmp_backend_then_name;
-
- /* First we sort, since the diff needs both lists in the same
- * order */
- qsort (report->tests, report->tests_count, sizeof (test_report_t), cmp);
-
- /* The sorting also brings all related raw reports together so we
- * can condense them and compute the stats.
- */
- base = &report->tests[0];
- last = &report->tests[report->tests_count - 1];
- while (base <= last) {
- next = base+1;
- if (next <= last) {
- while (next <= last &&
- test_report_cmp_backend_then_name (base, next) == 0)
- {
- next++;
- }
- if (next != base) {
- unsigned int new_samples_count = base->samples_count;
- for (t = base + 1; t < next; t++)
- new_samples_count += t->samples_count;
- if (new_samples_count > base->samples_size) {
- base->samples_size = new_samples_count;
- base->samples = xrealloc (base->samples,
- base->samples_size * sizeof (cairo_time_t));
- }
- for (t = base + 1; t < next; t++) {
- memcpy (&base->samples[base->samples_count], t->samples,
- t->samples_count * sizeof (cairo_time_t));
- base->samples_count += t->samples_count;
- }
- }
- }
- if (base->samples)
- _cairo_stats_compute (&base->stats, base->samples, base->samples_count);
- base = next;
- }
-}
-
-void
-cairo_perf_report_load (cairo_perf_report_t *report,
- const char *filename, int id,
- int (*cmp) (const void *, const void *))
-{
- FILE *file;
- test_report_status_t status;
- int line_number = 0;
- char *line = NULL;
- size_t line_size = 0;
- char *configuration;
- char *dot;
- char *baseName;
- const char *name;
-
- name = filename;
- if (name == NULL)
- name = "stdin";
-
- configuration = xstrdup (name);
- baseName = basename (configuration);
- report->configuration = xstrdup (baseName);
- free (configuration);
-
- dot = strrchr (report->configuration, '.');
- if (dot)
- *dot = '\0';
-
- report->name = name;
- report->tests_size = 16;
- report->tests = xmalloc (report->tests_size * sizeof (test_report_t));
- report->tests_count = 0;
- report->fileno = id;
-
- if (filename == NULL) {
- file = stdin;
- } else {
- file = fopen (filename, "r");
- if (file == NULL) {
- fprintf (stderr, "Failed to open %s: %s\n",
- filename, strerror (errno));
- exit (1);
- }
- }
-
- while (1) {
- if (report->tests_count == report->tests_size) {
- report->tests_size *= 2;
- report->tests = xrealloc (report->tests,
- report->tests_size * sizeof (test_report_t));
- }
-
- line_number++;
- if (getline (&line, &line_size, file) == -1)
- break;
-
- status = test_report_parse (&report->tests[report->tests_count],
- id, line, report->configuration);
- if (status == TEST_REPORT_STATUS_ERROR)
- fprintf (stderr, "Ignoring unrecognized line %d of %s:\n%s",
- line_number, filename, line);
- if (status == TEST_REPORT_STATUS_SUCCESS)
- report->tests_count++;
- /* Do nothing on TEST_REPORT_STATUS_COMMENT */
- }
-
- free (line);
-
- if (filename != NULL)
- fclose (file);
-
- cairo_perf_report_sort_and_compute_stats (report, cmp);
-
- /* Add one final report with a NULL name to terminate the list. */
- if (report->tests_count == report->tests_size) {
- report->tests_size *= 2;
- report->tests = xrealloc (report->tests,
- report->tests_size * sizeof (test_report_t));
- }
- report->tests[report->tests_count].name = NULL;
-}
diff --git a/perf/cairo-perf-trace.c b/perf/cairo-perf-trace.c
deleted file mode 100644
index 02e0e29f9..000000000
--- a/perf/cairo-perf-trace.c
+++ /dev/null
@@ -1,1067 +0,0 @@
-/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
-/*
- * Copyright © 2006 Mozilla Corporation
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Vladimir Vukicevic <vladimir@pobox.com>
- * Carl Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#define _GNU_SOURCE 1 /* for sched_getaffinity() and getline() */
-
-#include "../cairo-version.h" /* for the real version */
-
-#include "cairo-missing.h"
-#include "cairo-perf.h"
-#include "cairo-stats.h"
-
-#include "cairo-boilerplate-getopt.h"
-#include <cairo-script-interpreter.h>
-#include <cairo-types-private.h> /* for INTERNAL_SURFACE_TYPE */
-
-/* rudely reuse bits of the library... */
-#include "../src/cairo-hash-private.h"
-#include "../src/cairo-error-private.h"
-
-/* For basename */
-#ifdef HAVE_LIBGEN_H
-#include <libgen.h>
-#endif
-#include <ctype.h> /* isspace() */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef _MSC_VER
-#include "dirent-win32.h"
-
-static char *
-basename_no_ext (char *path)
-{
- static char name[_MAX_FNAME + 1];
-
- _splitpath (path, NULL, NULL, name, NULL);
-
- name[_MAX_FNAME] = '\0';
-
- return name;
-}
-
-
-#else
-#include <dirent.h>
-
-static char *
-basename_no_ext (char *path)
-{
- char *dot, *name;
-
- name = basename (path);
-
- dot = strrchr (name, '.');
- if (dot)
- *dot = '\0';
-
- return name;
-}
-
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <signal.h>
-
-#if HAVE_FCFINI
-#include <fontconfig/fontconfig.h>
-#endif
-
-#define CAIRO_PERF_ITERATIONS_DEFAULT 15
-#define CAIRO_PERF_LOW_STD_DEV 0.05
-#define CAIRO_PERF_MIN_STD_DEV_COUNT 3
-#define CAIRO_PERF_STABLE_STD_DEV_COUNT 3
-
-struct trace {
- const cairo_boilerplate_target_t *target;
- void *closure;
- cairo_surface_t *surface;
- cairo_bool_t observe;
- int tile_size;
-};
-
-cairo_bool_t
-cairo_perf_can_run (cairo_perf_t *perf,
- const char *name,
- cairo_bool_t *is_explicit)
-{
- unsigned int i;
- char *copy, *dot;
- cairo_bool_t ret;
-
- if (is_explicit)
- *is_explicit = FALSE;
-
- if (perf->exact_names) {
- if (is_explicit)
- *is_explicit = TRUE;
- return TRUE;
- }
-
- if (perf->num_names == 0 && perf->num_exclude_names == 0)
- return TRUE;
-
- copy = xstrdup (name);
- dot = strrchr (copy, '.');
- if (dot != NULL)
- *dot = '\0';
-
- if (perf->num_names) {
- ret = TRUE;
- for (i = 0; i < perf->num_names; i++)
- if (strstr (copy, perf->names[i])) {
- if (is_explicit)
- *is_explicit = strcmp (copy, perf->names[i]) == 0;
- goto check_exclude;
- }
-
- ret = FALSE;
- goto done;
- }
-
-check_exclude:
- if (perf->num_exclude_names) {
- ret = FALSE;
- for (i = 0; i < perf->num_exclude_names; i++)
- if (strstr (copy, perf->exclude_names[i])) {
- if (is_explicit)
- *is_explicit = strcmp (copy, perf->exclude_names[i]) == 0;
- goto done;
- }
-
- ret = TRUE;
- goto done;
- }
-
-done:
- free (copy);
-
- return ret;
-}
-
-static void
-fill_surface (cairo_surface_t *surface)
-{
- cairo_t *cr = cairo_create (surface);
- /* This needs to be an operation that the backends can't optimise away */
- cairo_set_source_rgba (cr, 0.5, 0.5, 0.5, 0.5);
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
- cairo_paint (cr);
- cairo_destroy (cr);
-}
-
-struct scache {
- cairo_hash_entry_t entry;
- cairo_content_t content;
- int width, height;
- cairo_surface_t *surface;
-};
-
-static cairo_hash_table_t *surface_cache;
-static cairo_surface_t *surface_holdovers[16];
-
-static cairo_bool_t
-scache_equal (const void *A,
- const void *B)
-{
- const struct scache *a = A, *b = B;
- return a->entry.hash == b->entry.hash;
-}
-
-static void
-scache_mark_active (cairo_surface_t *surface)
-{
- cairo_surface_t *t0, *t1;
- unsigned n;
-
- if (surface_cache == NULL)
- return;
-
- t0 = cairo_surface_reference (surface);
- for (n = 0; n < ARRAY_LENGTH (surface_holdovers); n++) {
- if (surface_holdovers[n] == surface) {
- surface_holdovers[n] = t0;
- t0 = surface;
- break;
- }
-
- t1 = surface_holdovers[n];
- surface_holdovers[n] = t0;
- t0 = t1;
- }
- cairo_surface_destroy (t0);
-}
-
-static void
-scache_clear (void)
-{
- unsigned n;
-
- if (surface_cache == NULL)
- return;
-
- for (n = 0; n < ARRAY_LENGTH (surface_holdovers); n++) {
- cairo_surface_destroy (surface_holdovers[n]);
- surface_holdovers[n] = NULL;
- }
-}
-
-static void
-scache_remove (void *closure)
-{
- _cairo_hash_table_remove (surface_cache, closure);
- free (closure);
-}
-
-static cairo_surface_t *
-_similar_surface_create (void *closure,
- cairo_content_t content,
- double width,
- double height,
- long uid)
-{
- struct trace *args = closure;
- cairo_surface_t *surface;
- struct scache skey, *s;
-
- if (args->observe)
- return cairo_surface_create_similar (args->surface,
- content, width, height);
-
- if (uid == 0 || surface_cache == NULL)
- return args->target->create_similar (args->surface, content, width, height);
-
- skey.entry.hash = uid;
- s = _cairo_hash_table_lookup (surface_cache, &skey.entry);
- if (s != NULL) {
- if (s->content == content &&
- s->width == width &&
- s->height == height)
- {
- return cairo_surface_reference (s->surface);
- }
-
- /* The surface has been resized, allow the original entry to expire
- * as it becomes inactive.
- */
- }
-
- surface = args->target->create_similar (args->surface, content, width, height);
- s = malloc (sizeof (struct scache));
- if (s == NULL)
- return surface;
-
- s->entry.hash = uid;
- s->content = content;
- s->width = width;
- s->height = height;
- s->surface = surface;
- if (_cairo_hash_table_insert (surface_cache, &s->entry)) {
- free (s);
- } else if (cairo_surface_set_user_data
- (surface,
- (const cairo_user_data_key_t *) &surface_cache,
- s, scache_remove))
- {
- scache_remove (s);
- }
-
- return surface;
-}
-
-static cairo_surface_t *
-_source_image_create (void *closure,
- cairo_format_t format,
- int width,
- int height,
- long uid)
-{
- struct trace *args = closure;
-
- return cairo_surface_create_similar_image (args->surface,
- format, width, height);
-}
-
-static cairo_t *
-_context_create (void *closure,
- cairo_surface_t *surface)
-{
- scache_mark_active (surface);
- return cairo_create (surface);
-}
-
-static int user_interrupt;
-
-static void
-interrupt (int sig)
-{
- if (user_interrupt) {
- signal (sig, SIG_DFL);
- raise (sig);
- }
-
- user_interrupt = 1;
-}
-
-static void
-describe (cairo_perf_t *perf,
- void *closure)
-{
- char *description = NULL;
-
- if (perf->has_described_backend)
- return;
- perf->has_described_backend = TRUE;
-
- if (perf->target->describe)
- description = perf->target->describe (closure);
-
- if (description == NULL)
- return;
-
- if (perf->raw) {
- printf ("[ # ] %s: %s\n", perf->target->name, description);
- }
-
- if (perf->summary) {
- fprintf (perf->summary,
- "[ # ] %8s: %s\n",
- perf->target->name,
- description);
- }
-
- free (description);
-}
-
-static void
-usage (const char *argv0)
-{
- fprintf (stderr,
-"Usage: %s [-clrsv] [-i iterations] [-t tile-size] [-x exclude-file] [test-names ... | traces ...]\n"
-"\n"
-"Run the cairo performance test suite over the given tests (all by default)\n"
-"The command-line arguments are interpreted as follows:\n"
-"\n"
-" -c use surface cache; keep a cache of surfaces to be reused\n"
-" -i iterations; specify the number of iterations per test case\n"
-" -l list only; just list selected test case names without executing\n"
-" -r raw; display each time measurement instead of summary statistics\n"
-" -s sync; only sum the elapsed time of the indiviual operations\n"
-" -t tile size; draw to tiled surfaces\n"
-" -v verbose; in raw mode also show the summaries\n"
-" -x exclude; specify a file to read a list of traces to exclude\n"
-"\n"
-"If test names are given they are used as sub-string matches so a command\n"
-"such as \"%s firefox\" can be used to run all firefox traces.\n"
-"Alternatively, you can specify a list of filenames to execute.\n",
- argv0, argv0);
-}
-
-static cairo_bool_t
-read_excludes (cairo_perf_t *perf,
- const char *filename)
-{
- FILE *file;
- char *line = NULL;
- size_t line_size = 0;
- char *s, *t;
-
- file = fopen (filename, "r");
- if (file == NULL)
- return FALSE;
-
- while (getline (&line, &line_size, file) != -1) {
- /* terminate the line at a comment marker '#' */
- s = strchr (line, '#');
- if (s)
- *s = '\0';
-
- /* whitespace delimits */
- s = line;
- while (*s != '\0' && isspace (*s))
- s++;
-
- t = s;
- while (*t != '\0' && ! isspace (*t))
- t++;
-
- if (s != t) {
- int i = perf->num_exclude_names;
- perf->exclude_names = xrealloc (perf->exclude_names,
- sizeof (char *) * (i+1));
- perf->exclude_names[i] = strndup (s, t-s);
- perf->num_exclude_names++;
- }
- }
- free (line);
-
- fclose (file);
-
- return TRUE;
-}
-
-static void
-parse_options (cairo_perf_t *perf,
- int argc,
- char *argv[])
-{
- int c;
- const char *iters;
- char *end;
- int verbose = 0;
- int use_surface_cache = 0;
-
- if ((iters = getenv ("CAIRO_PERF_ITERATIONS")) && *iters)
- perf->iterations = strtol (iters, NULL, 0);
- else
- perf->iterations = CAIRO_PERF_ITERATIONS_DEFAULT;
- perf->exact_iterations = 0;
-
- perf->raw = FALSE;
- perf->observe = FALSE;
- perf->list_only = FALSE;
- perf->tile_size = 0;
- perf->names = NULL;
- perf->num_names = 0;
- perf->summary = stdout;
- perf->summary_continuous = FALSE;
- perf->exclude_names = NULL;
- perf->num_exclude_names = 0;
-
- while (1) {
- c = _cairo_getopt (argc, argv, "ci:lrst:vx:");
- if (c == -1)
- break;
-
- switch (c) {
- case 'c':
- use_surface_cache = 1;
- break;
- case 'i':
- perf->exact_iterations = TRUE;
- perf->iterations = strtoul (optarg, &end, 10);
- if (*end != '\0') {
- fprintf (stderr, "Invalid argument for -i (not an integer): %s\n",
- optarg);
- exit (1);
- }
- break;
- case 'l':
- perf->list_only = TRUE;
- break;
- case 'r':
- perf->raw = TRUE;
- perf->summary = NULL;
- break;
- case 's':
- perf->observe = TRUE;
- break;
- case 't':
- perf->tile_size = strtoul (optarg, &end, 10);
- if (*end != '\0') {
- fprintf (stderr, "Invalid argument for -t (not an integer): %s\n",
- optarg);
- exit (1);
- }
- break;
- case 'v':
- verbose = 1;
- break;
- case 'x':
- if (! read_excludes (perf, optarg)) {
- fprintf (stderr, "Invalid argument for -x (not readable file): %s\n",
- optarg);
- exit (1);
- }
- break;
- default:
- fprintf (stderr, "Internal error: unhandled option: %c\n", c);
- /* fall-through */
- case '?':
- usage (argv[0]);
- exit (1);
- }
- }
-
- if (perf->observe && perf->tile_size) {
- fprintf (stderr, "Can't mix observer and tiling. Sorry.\n");
- exit (1);
- }
-
- if (verbose && perf->summary == NULL)
- perf->summary = stderr;
-#if HAVE_UNISTD_H
- if (perf->summary && isatty (fileno (perf->summary)))
- perf->summary_continuous = TRUE;
-#endif
-
- if (optind < argc) {
- perf->names = &argv[optind];
- perf->num_names = argc - optind;
- }
-
- if (use_surface_cache)
- surface_cache = _cairo_hash_table_create (scache_equal);
-}
-
-static void
-cairo_perf_fini (cairo_perf_t *perf)
-{
- cairo_boilerplate_free_targets (perf->targets);
- cairo_boilerplate_fini ();
-
- free (perf->times);
- cairo_debug_reset_static_data ();
-#if HAVE_FCFINI
- FcFini ();
-#endif
-}
-
-static cairo_bool_t
-have_trace_filenames (cairo_perf_t *perf)
-{
- unsigned int i;
-
- if (perf->num_names == 0)
- return FALSE;
-
-#if HAVE_UNISTD_H
- for (i = 0; i < perf->num_names; i++)
- if (access (perf->names[i], R_OK) == 0)
- return TRUE;
-#endif
-
- return FALSE;
-}
-
-static void
-_tiling_surface_finish (cairo_surface_t *observer,
- cairo_surface_t *target,
- void *closure)
-{
- struct trace *args = closure;
- cairo_surface_t *surface;
- cairo_content_t content;
- cairo_rectangle_t r;
- int width, height;
- int x, y, w, h;
-
- cairo_recording_surface_get_extents (target, &r);
- w = r.width;
- h = r.height;
-
- content = cairo_surface_get_content (target);
-
- for (y = 0; y < h; y += args->tile_size) {
- height = args->tile_size;
- if (y + height > h)
- height = h - y;
-
- for (x = 0; x < w; x += args->tile_size) {
- cairo_t *cr;
-
- width = args->tile_size;
- if (x + width > w)
- width = w - x;
-
- /* XXX to correctly observe the playback we would need
- * to replay the target onto the observer directly.
- */
- surface = args->target->create_similar (args->surface,
- content, width, height);
-
- cr = cairo_create (surface);
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_set_source_surface (cr, target, -x, -y);
- cairo_paint (cr);
- cairo_destroy (cr);
-
- cairo_surface_destroy (surface);
- }
- }
-}
-
-static cairo_surface_t *
-_tiling_surface_create (void *closure,
- cairo_content_t content,
- double width,
- double height,
- long uid)
-{
- cairo_rectangle_t r;
- cairo_surface_t *surface, *observer;
-
- r.x = r.y = 0;
- r.width = width;
- r.height = height;
-
- surface = cairo_recording_surface_create (content, &r);
- observer = cairo_surface_create_observer (surface,
- CAIRO_SURFACE_OBSERVER_NORMAL);
- cairo_surface_destroy (surface);
-
- cairo_surface_observer_add_finish_callback (observer,
- _tiling_surface_finish,
- closure);
-
- return observer;
-}
-
-static void
-cairo_perf_trace (cairo_perf_t *perf,
- const cairo_boilerplate_target_t *target,
- const char *trace)
-{
- static cairo_bool_t first_run = TRUE;
- unsigned int i;
- cairo_time_t *times, *paint, *mask, *fill, *stroke, *glyphs;
- cairo_stats_t stats = {0.0, 0.0};
- struct trace args = { target };
- int low_std_dev_count;
- char *trace_cpy, *name;
- const cairo_script_interpreter_hooks_t hooks = {
- &args,
- perf->tile_size ? _tiling_surface_create : _similar_surface_create,
- NULL, /* surface_destroy */
- _context_create,
- NULL, /* context_destroy */
- NULL, /* show_page */
- NULL, /* copy_page */
- _source_image_create,
- };
-
- args.tile_size = perf->tile_size;
- args.observe = perf->observe;
-
- trace_cpy = xstrdup (trace);
- name = basename_no_ext (trace_cpy);
-
- if (perf->list_only) {
- printf ("%s\n", name);
- free (trace_cpy);
- return;
- }
-
- if (first_run) {
- if (perf->raw) {
- printf ("[ # ] %s.%-s %s %s %s ...\n",
- "backend", "content", "test-size", "ticks-per-ms", "time(ticks)");
- }
-
- if (perf->summary) {
- if (perf->observe) {
- fprintf (perf->summary,
- "[ # ] %8s %28s %9s %9s %9s %9s %9s %9s %5s\n",
- "backend", "test",
- "total(s)", "paint(s)", "mask(s)", "fill(s)", "stroke(s)", "glyphs(s)",
- "count");
- } else {
- fprintf (perf->summary,
- "[ # ] %8s %28s %8s %5s %5s %s\n",
- "backend", "test", "min(s)", "median(s)",
- "stddev.", "count");
- }
- }
- first_run = FALSE;
- }
-
- times = perf->times;
- paint = times + perf->iterations;
- mask = paint + perf->iterations;
- stroke = mask + perf->iterations;
- fill = stroke + perf->iterations;
- glyphs = fill + perf->iterations;
-
- low_std_dev_count = 0;
- for (i = 0; i < perf->iterations && ! user_interrupt; i++) {
- cairo_script_interpreter_t *csi;
- cairo_status_t status;
- unsigned int line_no;
-
- args.surface = target->create_surface (NULL,
- CAIRO_CONTENT_COLOR_ALPHA,
- 1, 1,
- 1, 1,
- CAIRO_BOILERPLATE_MODE_PERF,
- &args.closure);
- fill_surface(args.surface); /* remove any clear flags */
-
- if (perf->observe) {
- cairo_surface_t *obs;
- obs = cairo_surface_create_observer (args.surface,
- CAIRO_SURFACE_OBSERVER_NORMAL);
- cairo_surface_destroy (args.surface);
- args.surface = obs;
- }
- if (cairo_surface_status (args.surface)) {
- fprintf (stderr,
- "Error: Failed to create target surface: %s\n",
- target->name);
- return;
- }
-
- cairo_perf_timer_set_synchronize (target->synchronize, args.closure);
-
- if (i == 0) {
- describe (perf, args.closure);
- if (perf->summary) {
- fprintf (perf->summary,
- "[%3d] %8s %28s ",
- perf->test_number,
- perf->target->name,
- name);
- fflush (perf->summary);
- }
- }
-
- csi = cairo_script_interpreter_create ();
- cairo_script_interpreter_install_hooks (csi, &hooks);
-
- if (! perf->observe) {
- cairo_perf_yield ();
- cairo_perf_timer_start ();
- }
-
- cairo_script_interpreter_run (csi, trace);
- line_no = cairo_script_interpreter_get_line_number (csi);
-
- /* Finish before querying timings in case we are using an intermediate
- * target and so need to destroy all surfaces before rendering
- * commences.
- */
- cairo_script_interpreter_finish (csi);
-
- if (perf->observe) {
- cairo_device_t *observer = cairo_surface_get_device (args.surface);
- times[i] = _cairo_time_from_s (1.e-9 * cairo_device_observer_elapsed (observer));
- paint[i] = _cairo_time_from_s (1.e-9 * cairo_device_observer_paint_elapsed (observer));
- mask[i] = _cairo_time_from_s (1.e-9 * cairo_device_observer_mask_elapsed (observer));
- stroke[i] = _cairo_time_from_s (1.e-9 * cairo_device_observer_stroke_elapsed (observer));
- fill[i] = _cairo_time_from_s (1.e-9 * cairo_device_observer_fill_elapsed (observer));
- glyphs[i] = _cairo_time_from_s (1.e-9 * cairo_device_observer_glyphs_elapsed (observer));
- } else {
- fill_surface (args.surface); /* queue a write to the sync'ed surface */
- cairo_perf_timer_stop ();
- times[i] = cairo_perf_timer_elapsed ();
- }
-
- scache_clear ();
-
- cairo_surface_destroy (args.surface);
-
- if (target->cleanup)
- target->cleanup (args.closure);
-
- status = cairo_script_interpreter_destroy (csi);
- if (status) {
- if (perf->summary) {
- fprintf (perf->summary, "Error during replay, line %d: %s\n",
- line_no,
- cairo_status_to_string (status));
- }
- goto out;
- }
-
- if (perf->raw) {
- if (i == 0)
- printf ("[*] %s.%s %s.%d %g",
- perf->target->name,
- "rgba",
- name,
- 0,
- _cairo_time_to_double (_cairo_time_from_s (1)) / 1000.);
- printf (" %lld", (long long) times[i]);
- fflush (stdout);
- } else if (! perf->exact_iterations) {
- if (i > CAIRO_PERF_MIN_STD_DEV_COUNT) {
- _cairo_stats_compute (&stats, times, i+1);
-
- if (stats.std_dev <= CAIRO_PERF_LOW_STD_DEV) {
- if (++low_std_dev_count >= CAIRO_PERF_STABLE_STD_DEV_COUNT)
- break;
- } else {
- low_std_dev_count = 0;
- }
- }
- }
-
- if (perf->summary && perf->summary_continuous) {
- _cairo_stats_compute (&stats, times, i+1);
-
- fprintf (perf->summary,
- "\r[%3d] %8s %28s ",
- perf->test_number,
- perf->target->name,
- name);
- if (perf->observe) {
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, paint, i+1);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, mask, i+1);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, fill, i+1);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, stroke, i+1);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, glyphs, i+1);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- fprintf (perf->summary,
- " %5d", i+1);
- } else {
- fprintf (perf->summary,
- "%#8.3f %#8.3f %#6.2f%% %4d/%d",
- _cairo_time_to_s (stats.min_ticks),
- _cairo_time_to_s (stats.median_ticks),
- stats.std_dev * 100.0,
- stats.iterations, i+1);
- }
- fflush (perf->summary);
- }
- }
- user_interrupt = 0;
-
- if (perf->summary) {
- _cairo_stats_compute (&stats, times, i);
- if (perf->summary_continuous) {
- fprintf (perf->summary,
- "\r[%3d] %8s %28s ",
- perf->test_number,
- perf->target->name,
- name);
- }
- if (perf->observe) {
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, paint, i);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, mask, i);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, fill, i);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, stroke, i);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- _cairo_stats_compute (&stats, glyphs, i);
- fprintf (perf->summary,
- " %#9.3f", _cairo_time_to_s (stats.median_ticks));
-
- fprintf (perf->summary,
- " %5d\n", i);
- } else {
- fprintf (perf->summary,
- "%#8.3f %#8.3f %#6.2f%% %4d/%d\n",
- _cairo_time_to_s (stats.min_ticks),
- _cairo_time_to_s (stats.median_ticks),
- stats.std_dev * 100.0,
- stats.iterations, i);
- }
- fflush (perf->summary);
- }
-
-out:
- if (perf->raw) {
- printf ("\n");
- fflush (stdout);
- }
-
- perf->test_number++;
- free (trace_cpy);
-}
-
-static void
-warn_no_traces (const char *message,
- const char *trace_dir)
-{
- fprintf (stderr,
-"Error: %s '%s'.\n"
-"Have you cloned the cairo-traces repository and uncompressed the traces?\n"
-" git clone git://anongit.freedesktop.org/cairo-traces\n"
-" cd cairo-traces && make\n"
-"Or set the env.var CAIRO_TRACE_DIR to point to your traces?\n",
- message, trace_dir);
-}
-
-static int
-cairo_perf_trace_dir (cairo_perf_t *perf,
- const cairo_boilerplate_target_t *target,
- const char *dirname)
-{
- DIR *dir;
- struct dirent *de;
- int num_traces = 0;
- cairo_bool_t force;
- cairo_bool_t is_explicit;
-
- dir = opendir (dirname);
- if (dir == NULL)
- return 0;
-
- force = FALSE;
- if (cairo_perf_can_run (perf, dirname, &is_explicit))
- force = is_explicit;
-
- while ((de = readdir (dir)) != NULL) {
- char *trace;
- struct stat st;
-
- if (de->d_name[0] == '.')
- continue;
-
- xasprintf (&trace, "%s/%s", dirname, de->d_name);
- if (stat (trace, &st) != 0)
- goto next;
-
- if (S_ISDIR(st.st_mode)) {
- num_traces += cairo_perf_trace_dir (perf, target, trace);
- } else {
- const char *dot;
-
- dot = strrchr (de->d_name, '.');
- if (dot == NULL)
- goto next;
- if (strcmp (dot, ".trace"))
- goto next;
-
- num_traces++;
- if (!force && ! cairo_perf_can_run (perf, de->d_name, NULL))
- goto next;
-
- cairo_perf_trace (perf, target, trace);
- }
-next:
- free (trace);
-
- }
- closedir (dir);
-
- return num_traces;
-}
-
-int
-main (int argc,
- char *argv[])
-{
- cairo_perf_t perf;
- const char *trace_dir = "cairo-traces:/usr/src/cairo-traces:/usr/share/cairo-traces";
- unsigned int n;
- int i;
-
- parse_options (&perf, argc, argv);
-
- signal (SIGINT, interrupt);
-
- if (getenv ("CAIRO_TRACE_DIR") != NULL)
- trace_dir = getenv ("CAIRO_TRACE_DIR");
-
- perf.targets = cairo_boilerplate_get_targets (&perf.num_targets, NULL);
- perf.times = xmalloc (6 * perf.iterations * sizeof (cairo_time_t));
-
- /* do we have a list of filenames? */
- perf.exact_names = have_trace_filenames (&perf);
-
- for (i = 0; i < perf.num_targets; i++) {
- const cairo_boilerplate_target_t *target = perf.targets[i];
-
- if (! perf.list_only && ! target->is_measurable)
- continue;
-
- perf.target = target;
- perf.test_number = 0;
- perf.has_described_backend = FALSE;
-
- if (perf.exact_names) {
- for (n = 0; n < perf.num_names; n++) {
- struct stat st;
-
- if (stat (perf.names[n], &st) == 0) {
- if (S_ISDIR (st.st_mode)) {
- cairo_perf_trace_dir (&perf, target, perf.names[n]);
- } else
- cairo_perf_trace (&perf, target, perf.names[n]);
- }
- }
- } else {
- int num_traces = 0;
- const char *dir;
-
- dir = trace_dir;
- do {
- char buf[1024];
- const char *end = strchr (dir, ':');
- if (end != NULL) {
- memcpy (buf, dir, end-dir);
- buf[end-dir] = '\0';
- end++;
-
- dir = buf;
- }
-
- num_traces += cairo_perf_trace_dir (&perf, target, dir);
- dir = end;
- } while (dir != NULL);
-
- if (num_traces == 0) {
- warn_no_traces ("Found no traces in", trace_dir);
- return 1;
- }
- }
-
- if (perf.list_only)
- break;
- }
-
- cairo_perf_fini (&perf);
-
- return 0;
-}
diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c
deleted file mode 100644
index 18db0c544..000000000
--- a/perf/cairo-perf.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2007 Netlabs
- * Copyright (c) 2006 Mozilla Corporation
- * Copyright (c) 2006 Red Hat, Inc.
- * Copyright (c) 2011 Andrea Canciani
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Peter Weilbacher <mozilla@weilbacher.org>
- * Vladimir Vukicevic <vladimir@pobox.com> (win32/linux code)
- * Carl Worth <cworth@cworth.org> (win32/linux code)
- * Andrea Canciani <ranma42@gmail.com>
- */
-
-#include "cairo-perf.h"
-#include "../src/cairo-time-private.h"
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if defined(__OS2__)
-#define INCL_BASE
-#include <os2.h>
-#elif defined(_WIN32)
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#elif defined(_POSIX_PRIORITY_SCHEDULING)
-#include <sched.h>
-#endif
-
-
-/* timers */
-static cairo_time_t timer;
-static cairo_perf_timer_synchronize_t cairo_perf_timer_synchronize = NULL;
-static void *cairo_perf_timer_synchronize_closure = NULL;
-
-void
-cairo_perf_timer_set_synchronize (cairo_perf_timer_synchronize_t synchronize,
- void *closure)
-{
- cairo_perf_timer_synchronize = synchronize;
- cairo_perf_timer_synchronize_closure = closure;
-}
-
-void
-cairo_perf_timer_start (void)
-{
- timer = _cairo_time_get ();
-}
-
-void
-cairo_perf_timer_stop (void)
-{
- if (cairo_perf_timer_synchronize)
- cairo_perf_timer_synchronize (cairo_perf_timer_synchronize_closure);
-
- timer = _cairo_time_get_delta (timer);
-}
-
-cairo_time_t
-cairo_perf_timer_elapsed (void)
-{
- return timer;
-}
-
-void
-cairo_perf_yield (void)
-{
- /* try to deactivate this thread until the scheduler calls it again */
-
-#if defined(__OS2__)
- DosSleep (0);
-#elif defined(_WIN32)
- SleepEx(0, TRUE);
-#elif defined(_POSIX_PRIORITY_SCHEDULING)
- sched_yield ();
-#else
- sleep (0);
-#endif
-}
diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h
deleted file mode 100644
index eb53d13c2..000000000
--- a/perf/cairo-perf.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright © 2006 Mozilla Corporation
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Vladimir Vukicevic <vladimir@pobox.com>
- * Carl Worth <cworth@cworth.org>
- */
-
-#ifndef _CAIRO_PERF_H_
-#define _CAIRO_PERF_H_
-
-#include "cairo-boilerplate.h"
-#include "../src/cairo-time-private.h"
-#include <stdio.h>
-
-typedef struct _cairo_stats {
- cairo_time_t min_ticks;
- cairo_time_t median_ticks;
- double ticks_per_ms;
- double std_dev;
- int iterations;
- cairo_time_t *values;
-} cairo_stats_t;
-
-typedef struct _cairo_histogram {
- int width, height, max_count;
- int num_columns, num_rows;
- cairo_time_t min_value, max_value;
- int *columns;
-} cairo_histogram_t;
-
-
-/* timers */
-
-void
-cairo_perf_timer_start (void);
-
-void
-cairo_perf_timer_stop (void);
-
-typedef void
-(*cairo_perf_timer_synchronize_t) (void *closure);
-
-void
-cairo_perf_timer_set_synchronize (cairo_perf_timer_synchronize_t synchronize,
- void *closure);
-
-cairo_time_t
-cairo_perf_timer_elapsed (void);
-
-/* yield */
-
-void
-cairo_perf_yield (void);
-
-/* running a test case */
-typedef struct _cairo_perf {
- FILE *summary;
- cairo_bool_t summary_continuous;
-
- /* Options from command-line */
- unsigned int iterations;
- cairo_bool_t exact_iterations;
- cairo_bool_t raw;
- cairo_bool_t list_only;
- cairo_bool_t observe;
- char **names;
- unsigned int num_names;
- char **exclude_names;
- unsigned int num_exclude_names;
- cairo_bool_t exact_names;
-
- double ms_per_iteration;
- cairo_bool_t fast_and_sloppy;
-
- unsigned int tile_size;
-
- /* Stuff used internally */
- cairo_time_t *times;
- const cairo_boilerplate_target_t **targets;
- int num_targets;
- const cairo_boilerplate_target_t *target;
- cairo_bool_t has_described_backend;
- unsigned int test_number;
- unsigned int size;
- cairo_t *cr;
-} cairo_perf_t;
-
-typedef cairo_time_t
-(*cairo_perf_func_t) (cairo_t *cr, int width, int height, int loops);
-
-typedef double
-(*cairo_count_func_t) (cairo_t *cr, int width, int height);
-
-cairo_bool_t
-cairo_perf_can_run (cairo_perf_t *perf,
- const char *name,
- cairo_bool_t *is_explicit);
-
-void
-cairo_perf_run (cairo_perf_t *perf,
- const char *name,
- cairo_perf_func_t perf_func,
- cairo_count_func_t count_func);
-
-void
-cairo_perf_cover_sources_and_operators (cairo_perf_t *perf,
- const char *name,
- cairo_perf_func_t perf_func,
- cairo_count_func_t count_func);
-
-/* reporter convenience routines */
-
-typedef struct _test_report {
- int id;
- int fileno;
- const char *configuration;
- char *backend;
- char *content;
- char *name;
- int size;
-
- /* The samples only exists for "raw" reports */
- cairo_time_t *samples;
- unsigned int samples_size;
- unsigned int samples_count;
-
- /* The stats are either read directly or computed from samples.
- * If the stats have not yet been computed from samples, then
- * iterations will be 0. */
- cairo_stats_t stats;
-} test_report_t;
-
-typedef struct _test_diff {
- test_report_t **tests;
- int num_tests;
- double min;
- double max;
- double change;
-} test_diff_t;
-
-typedef struct _cairo_perf_report {
- char *configuration;
- const char *name;
- int fileno;
- test_report_t *tests;
- int tests_size;
- int tests_count;
-} cairo_perf_report_t;
-
-typedef enum {
- TEST_REPORT_STATUS_SUCCESS,
- TEST_REPORT_STATUS_COMMENT,
- TEST_REPORT_STATUS_ERROR
-} test_report_status_t;
-
-void
-cairo_perf_report_load (cairo_perf_report_t *report,
- const char *filename, int id,
- int (*cmp) (const void *, const void *));
-
-void
-cairo_perf_report_sort_and_compute_stats (cairo_perf_report_t *report,
- int (*cmp) (const void *, const void *));
-
-int
-test_report_cmp_backend_then_name (const void *a,
- const void *b);
-
-int
-test_report_cmp_name (const void *a,
- const void *b);
-
-#define CAIRO_PERF_ENABLED_DECL(func) cairo_bool_t (func ## _enabled) (cairo_perf_t *perf)
-#define CAIRO_PERF_RUN_DECL(func) void (func) (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-
-#define CAIRO_PERF_DECL(func) CAIRO_PERF_RUN_DECL(func); CAIRO_PERF_ENABLED_DECL(func)
-
-#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-
-CAIRO_PERF_DECL (fill);
-CAIRO_PERF_DECL (paint);
-CAIRO_PERF_DECL (paint_with_alpha);
-CAIRO_PERF_DECL (mask);
-CAIRO_PERF_DECL (stroke);
-CAIRO_PERF_DECL (subimage_copy);
-CAIRO_PERF_DECL (disjoint);
-CAIRO_PERF_DECL (hatching);
-CAIRO_PERF_DECL (tessellate);
-CAIRO_PERF_DECL (text);
-CAIRO_PERF_DECL (glyphs);
-CAIRO_PERF_DECL (hash_table);
-CAIRO_PERF_DECL (pattern_create_radial);
-CAIRO_PERF_DECL (zrusin);
-CAIRO_PERF_DECL (world_map);
-CAIRO_PERF_DECL (box_outline);
-CAIRO_PERF_DECL (mosaic);
-CAIRO_PERF_DECL (long_lines);
-CAIRO_PERF_DECL (unaligned_clip);
-CAIRO_PERF_DECL (rectangles);
-CAIRO_PERF_DECL (rounded_rectangles);
-CAIRO_PERF_DECL (long_dashed_lines);
-CAIRO_PERF_DECL (composite_checker);
-CAIRO_PERF_DECL (twin);
-CAIRO_PERF_DECL (dragon);
-CAIRO_PERF_DECL (pythagoras_tree);
-CAIRO_PERF_DECL (intersections);
-CAIRO_PERF_DECL (spiral);
-CAIRO_PERF_DECL (wave);
-CAIRO_PERF_DECL (many_strokes);
-CAIRO_PERF_DECL (wide_strokes);
-CAIRO_PERF_DECL (many_fills);
-CAIRO_PERF_DECL (wide_fills);
-CAIRO_PERF_DECL (many_curves);
-CAIRO_PERF_DECL (curve);
-CAIRO_PERF_DECL (a1_curve);
-CAIRO_PERF_DECL (line);
-CAIRO_PERF_DECL (a1_line);
-CAIRO_PERF_DECL (pixel);
-CAIRO_PERF_DECL (a1_pixel);
-CAIRO_PERF_DECL (sierpinski);
-CAIRO_PERF_DECL (fill_clip);
-CAIRO_PERF_DECL (tiger);
-
-#endif
diff --git a/perf/cairo-stats.c b/perf/cairo-stats.c
deleted file mode 100644
index aee9fe8b5..000000000
--- a/perf/cairo-stats.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- */
-
-#include "cairo-stats.h"
-
-#include <assert.h>
-
-void
-_cairo_stats_compute (cairo_stats_t *stats,
- cairo_time_t *values,
- int num_values)
-{
- cairo_time_t sum, mean, q1, q3, iqr;
- cairo_time_t outlier_min, outlier_max;
- int i, min_valid, num_valid;
- double s;
-
- assert (num_values > 0);
-
- if (num_values == 1) {
- stats->min_ticks = stats->median_ticks = values[0];
- stats->std_dev = 0;
- stats->iterations = 1;
- stats->values = values;
- return;
- }
-
- /* First, identify any outliers, using the definition of "mild
- * outliers" from:
- *
- * http://en.wikipedia.org/wiki/Outliers
- *
- * Which is that outliers are any values less than Q1 - 1.5 * IQR
- * or greater than Q3 + 1.5 * IQR where Q1 and Q3 are the first
- * and third quartiles and IQR is the inter-quartile range (Q3 -
- * Q1).
- */
- num_valid = num_values;
- do {
- num_values = num_valid;
- qsort (values, num_values, sizeof (cairo_time_t), _cairo_time_cmp);
-
- q1 = values[1*num_values/4];
- q3 = values[3*num_values/4];
-
- /* XXX assumes we have native uint64_t */
- iqr = q3 - q1;
- outlier_min = q1 - 3 * iqr / 2;
- outlier_max = q3 + 3 * iqr / 2;
-
- for (i = 0; i < num_values && values[i] < outlier_min; i++)
- ;
- min_valid = i;
-
- for (i = 0; i < num_values && values[i] <= outlier_max; i++)
- ;
- num_valid = i - min_valid;
- assert(num_valid);
- values += min_valid;
- } while (num_valid != num_values);
-
- stats->values = values;
- stats->iterations = num_valid;
- stats->min_ticks = values[0];
- stats->median_ticks = values[num_valid / 2];
-
- sum = 0;
- for (i = 0; i < num_valid; i++)
- sum = _cairo_time_add (sum, values[i]);
- mean = sum / num_valid;
-
- /* Let's use a normalized std. deviation for easier comparison. */
- s = 0;
- for (i = 0; i < num_valid; i++) {
- double delta = (values[i] - mean) / (double)mean;
- s += delta * delta;
- }
- stats->std_dev = sqrt(s / num_valid);
-}
-
-cairo_bool_t
-_cairo_histogram_init (cairo_histogram_t *h,
- int width, int height)
-{
- h->width = width;
- h->height = height;
- if (h->width < 2 || h->height < 1)
- return FALSE;
-
- h->num_columns = width - 2;
- h->num_rows = height - 1;
- h->columns = malloc (sizeof(int)*h->num_columns);
- return h->columns != NULL;
-}
-
-cairo_bool_t
-_cairo_histogram_compute (cairo_histogram_t *h,
- const cairo_time_t *values,
- int num_values)
-{
- cairo_time_t delta;
- int i;
-
- if (num_values == 0)
- return FALSE;
-
- h->min_value = values[0];
- h->max_value = values[0];
-
- for (i = 1; i < num_values; i++) {
- if (values[i] < h->min_value)
- h->min_value = values[i];
- if (values[i] > h->max_value)
- h->max_value = values[i];
- }
-
- delta = h->max_value - h->min_value;
- if (delta == 0)
- return FALSE;
-
- memset(h->columns, 0, sizeof(int)*h->num_columns);
- h->max_count = 0;
-
- for (i = 0; i < num_values; i++) {
- int count = h->columns[(values[i] - h->min_value) * (h->num_columns - 1) / delta]++;
- if (count > h->max_count)
- h->max_count = count;
- }
-
- return TRUE;
-}
-
-void
-_cairo_histogram_printf (cairo_histogram_t *h,
- FILE *file)
-{
- int x, y, num_rows;
-
- num_rows = h->num_rows;
- if (h->max_count < num_rows)
- num_rows = h->max_count;
- for (y = 0; y < num_rows; y++) {
- int min_count = ((num_rows - y - 1) * h->max_count) / num_rows + h->max_count / (2*num_rows);
- fprintf (file, "|");
- for (x = 0; x < h->num_columns; x++)
- fprintf (file, "%c", h->columns[x] > min_count ? 'x' : ' ');
- fprintf (file, "|\n");
- }
-
- fprintf(file, ".");
- for (x = 0; x < h->num_columns; x++)
- fprintf (file, "-");
- fprintf (file, ".\n");
-}
-
-void
-_cairo_histogram_fini (cairo_histogram_t *h)
-{
- free(h->columns);
-}
diff --git a/perf/cairo-stats.h b/perf/cairo-stats.h
deleted file mode 100644
index 2b32d67ae..000000000
--- a/perf/cairo-stats.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Carl Worth <cworth@cworth.org>
- */
-
-#ifndef _CAIRO_STATS_H_
-#define _CAIRO_STATS_H_
-
-#include "cairo-perf.h"
-
-void
-_cairo_stats_compute (cairo_stats_t *stats,
- cairo_time_t *values,
- int num_values);
-
-cairo_bool_t
-_cairo_histogram_init (cairo_histogram_t *h,
- int width, int height);
-
-cairo_bool_t
-_cairo_histogram_compute (cairo_histogram_t *h,
- const cairo_time_t *values,
- int num_values);
-
-void
-_cairo_histogram_printf (cairo_histogram_t *h,
- FILE *file);
-
-void
-_cairo_histogram_fini (cairo_histogram_t *h);
-
-#endif /* _CAIRO_STATS_H_ */
diff --git a/perf/dirent-win32.h b/perf/dirent-win32.h
deleted file mode 100644
index 0f2ed05e5..000000000
--- a/perf/dirent-win32.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
-/*
- * Copyright 2011 Andrea Canciani
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Andrea Canciani <ranma42@gmail.com>
- */
-
-#include "cairo-compiler-private.h"
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-#define stat _stat
-
-#define S_ISDIR(s) ((s) & _S_IFDIR)
-
-struct dirent {
- ino_t d_ino;
- char d_name[FILENAME_MAX + 1];
-};
-
-typedef struct _DIR {
- HANDLE handle;
- cairo_bool_t has_next;
- WIN32_FIND_DATA data;
- struct dirent de;
-} DIR;
-
-static DIR *
-opendir(const char *dirname)
-{
- DIR *dirp;
-
- dirp = malloc (sizeof (*dirp));
- if (unlikely (dirp == NULL))
- return NULL;
-
- dirp->handle = FindFirstFile(dirname, &dirp->data);
-
- if (unlikely (dirp->handle == INVALID_HANDLE_VALUE)) {
- free (dirp);
- return NULL;
- }
-
- memcpy (dirp->de.d_name, dirp->data.cFileName,
- sizeof (dirp->data.cFileName));
- dirp->de.d_name[FILENAME_MAX] = '\0';
-
- dirp->has_next = TRUE;
-
- return dirp;
-}
-
-static int
-closedir(DIR *dirp)
-{
- int ret;
-
- ret = ! FindClose (dirp->handle);
-
- free (dirp);
-
- /* TODO: set errno */
-
- return ret;
-}
-
-static struct dirent *
-readdir(DIR *dirp)
-{
- if (! dirp->has_next)
- return NULL;
-
- /* COMPILE_TIME_ASSERT (FILENAME_MAX == sizeof (dirp->data.cFileName)); */
-
- memcpy (dirp->de.d_name, dirp->data.cFileName,
- sizeof (dirp->data.cFileName));
- dirp->de.d_name[FILENAME_MAX] = '\0';
-
- dirp->has_next = FindNextFile (dirp->handle, &dirp->data);
-
- return &dirp->de;
-}
diff --git a/perf/make-html.py b/perf/make-html.py
deleted file mode 100755
index 0b4533581..000000000
--- a/perf/make-html.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/python
-
-from string import strip
-from sys import stdin
-
-targets = {}
-smilies = {'slowdown': '&#9785;' , 'speedup': '&#9786;'}
-
-for line in stdin:
- line = map(strip, filter(None, line.split(' ')))
-
- if 9 == len(line):
- target, name = line[0:2]
- factor, dir = line[-2:]
-
- name = name.split('-')
- name, size = '-'.join(name[:-1]), name[-1]
-
- target_tests = targets.get(target, {})
- name_tests = target_tests.get(name, {})
-
- name_tests[int(size)] = (factor, dir)
- target_tests[name] = name_tests
- targets[target] = target_tests
-
-print '''\
-<html><head>
-<title>Performance Changes</title>
-<style type="text/css">/*<![CDATA[*/
- body { background: white; color: black; }
- table { border-collapse: collapse; }
-
- th, td { border: 1px solid silver; padding: 0.2em; }
- td { text-align: center; }
- th:first-child { text-align: left; }
- th { background: #eee; }
-
- /* those colors also should work for color blinds */
- td.slowdown { background: #f93; }
- td.speedup { background: #6f9; }
-/*]]>*/</style>
-</head><body>
-<h1>Performance Changes</h1>'''
-
-targets = targets.items()
-targets.sort(lambda a, b: cmp(a[0], b[0]))
-
-for target, names in targets:
- sizes = {}
-
- for tests in names.values():
- for size in tests.keys():
- sizes[size] = True
-
- sizes = sizes.keys()
- sizes.sort()
-
- names = names.items()
- names.sort(lambda a, b: cmp(a[0], b[0]))
-
- print '<h2><a name="%s">%s</a></h2>' % (target, target)
- print '<table><thead><tr><th>&nbsp;</th>'
-
- for size in sizes:
- print '<th>%s</th>' % size
-
- print '</tr></thead><tbody>'
-
- for name, tests in names:
- print '<tr><th>%s</th>' % name
-
- for size in sizes:
- result = tests.get(size)
-
- if result:
- factor, dir = result
- print '<td class="%s">%s %s</td>' % (
- dir, factor, smilies[dir])
-
- else:
- print '<td>&nbsp;</td>'
-
- print '</tr>'
-
-
- print '</tbody></table>'
-
-print '</body></html>'
diff --git a/perf/micro/Makefile.am b/perf/micro/Makefile.am
deleted file mode 100644
index 3edbf531c..000000000
--- a/perf/micro/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-include $(top_srcdir)/build/Makefile.am.common
-
-include $(top_srcdir)/perf/micro/Makefile.sources
-
-noinst_LTLIBRARIES = libcairo-perf-micro.la
-libcairo_perf_micro_la_SOURCES = \
- $(libcairo_perf_micro_sources) \
- $(libcairo_perf_micro_headers)
-
-AM_CPPFLAGS = \
- -I$(srcdir) \
- -I$(top_srcdir)/boilerplate \
- -I$(top_srcdir)/src \
- -I$(top_srcdir)/perf \
- -I$(top_builddir)/src \
- $(CAIRO_CFLAGS)
diff --git a/perf/micro/Makefile.sources b/perf/micro/Makefile.sources
deleted file mode 100644
index 19ead179d..000000000
--- a/perf/micro/Makefile.sources
+++ /dev/null
@@ -1,51 +0,0 @@
-libcairo_perf_micro_sources = \
- cairo-perf-cover.c \
- box-outline.c \
- composite-checker.c \
- disjoint.c \
- fill.c \
- hatching.c \
- hash-table.c \
- line.c \
- a1-line.c \
- long-lines.c \
- mosaic.c \
- paint.c \
- paint-with-alpha.c \
- mask.c \
- pattern_create_radial.c \
- rectangles.c \
- rounded-rectangles.c \
- stroke.c \
- subimage_copy.c \
- tessellate.c \
- text.c \
- tiger.c \
- glyphs.c \
- twin.c \
- unaligned-clip.c \
- wave.c \
- world-map.c \
- zrusin.c \
- long-dashed-lines.c \
- dragon.c \
- pythagoras-tree.c \
- intersections.c \
- many-strokes.c \
- wide-strokes.c \
- many-fills.c \
- wide-fills.c \
- many-curves.c \
- curve.c \
- a1-curve.c \
- spiral.c \
- pixel.c \
- sierpinski.c \
- fill-clip.c \
- $(NULL)
-
-libcairo_perf_micro_headers = \
- mosaic.h \
- world-map.h \
- zrusin-another.h \
- $(NULL)
diff --git a/perf/micro/Makefile.win32 b/perf/micro/Makefile.win32
deleted file mode 100644
index f41f781d7..000000000
--- a/perf/micro/Makefile.win32
+++ /dev/null
@@ -1,12 +0,0 @@
-top_srcdir = ../..
-include $(top_srcdir)/build/Makefile.win32.common
-include $(top_srcdir)/perf/micro/Makefile.sources
-
-CFLAGS += -I$(top_srcdir)/perf -I$(top_srcdir)/boilerplate/
-
-OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(libcairo_perf_micro_sources))
-
-all: inform $(CFG)/libcairo-perf-micro.lib
-
-$(CFG)/libcairo-perf-micro.lib: $(OBJECTS)
- @$(AR) $(CAIRO_ARFLAGS) -OUT:$@ $(OBJECTS)
diff --git a/perf/micro/a1-curve.c b/perf/micro/a1-curve.c
deleted file mode 100644
index 594c46d5c..000000000
--- a/perf/micro/a1-curve.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_curve_stroke (cairo_t *cr, int width, int height, int loops)
-{
- state = 0xc0ffee;
- cairo_set_line_width (cr, 2.);
- cairo_perf_timer_start ();
-
- while (loops--) {
- double x1 = uniform_random (0, width);
- double x2 = uniform_random (0, width);
- double x3 = uniform_random (0, width);
- double y1 = uniform_random (0, height);
- double y2 = uniform_random (0, height);
- double y3 = uniform_random (0, height);
- cairo_move_to (cr, uniform_random (0, width), uniform_random (0, height));
- cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);
- cairo_stroke(cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_curve_fill (cairo_t *cr, int width, int height, int loops)
-{
- state = 0xc0ffee;
- cairo_perf_timer_start ();
-
- while (loops--) {
- double x0 = uniform_random (0, width);
- double x1 = uniform_random (0, width);
- double x2 = uniform_random (0, width);
- double x3 = uniform_random (0, width);
- double xm = uniform_random (0, width);
- double xn = uniform_random (0, width);
- double y0 = uniform_random (0, height);
- double y1 = uniform_random (0, height);
- double y2 = uniform_random (0, height);
- double y3 = uniform_random (0, height);
- double ym = uniform_random (0, height);
- double yn = uniform_random (0, height);
-
- cairo_move_to (cr, xm, ym);
- cairo_curve_to (cr, x1, y1, x2, y2, xn, yn);
- cairo_curve_to (cr, x3, y3, x0, y0, xm, ym);
- cairo_close_path (cr);
-
- cairo_fill(cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-a1_curve_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "a1-curve", NULL);
-}
-
-void
-a1_curve (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
-
- cairo_perf_run (perf, "a1-curve-stroked", do_curve_stroke, NULL);
- cairo_perf_run (perf, "a1-curve-filled", do_curve_fill, NULL);
-}
diff --git a/perf/micro/a1-line.c b/perf/micro/a1-line.c
deleted file mode 100644
index ae8660212..000000000
--- a/perf/micro/a1-line.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-horizontal (cairo_t *cr, int width, int height, int loops)
-{
- double h = height/2 + .5;
-
- cairo_move_to (cr, 0, h);
- cairo_line_to (cr, width, h);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-horizontal_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return horizontal (cr, width, height, loops);
-}
-
-static cairo_time_t
-horizontal_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return horizontal (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_horizontal (cairo_t *cr, int width, int height, int loops)
-{
- double h = height/2;
-
- cairo_move_to (cr, 0, h);
- cairo_line_to (cr, width, h+1);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-nearly_horizontal_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return nearly_horizontal (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_horizontal_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return nearly_horizontal (cr, width, height, loops);
-}
-
-
-static cairo_time_t
-vertical (cairo_t *cr, int width, int height, int loops)
-{
- double w = width/2 + .5;
-
- cairo_move_to (cr, w, 0);
- cairo_line_to (cr, w, height);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-vertical_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return vertical (cr, width, height, loops);
-}
-
-static cairo_time_t
-vertical_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return vertical (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_vertical (cairo_t *cr, int width, int height, int loops)
-{
- double w = width/2;
-
- cairo_move_to (cr, w, 0);
- cairo_line_to (cr, w+1, height);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-nearly_vertical_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return nearly_vertical (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_vertical_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return nearly_vertical (cr, width, height, loops);
-}
-
-
-static cairo_time_t
-diagonal (cairo_t *cr, int width, int height, int loops)
-{
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, width, height);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-diagonal_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return diagonal (cr, width, height, loops);
-}
-
-static cairo_time_t
-diagonal_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return diagonal (cr, width, height, loops);
-}
-
-cairo_bool_t
-a1_line_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "a1-line", NULL);
-}
-
-void
-a1_line (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
-
- cairo_perf_run (perf, "a1-line-hh", horizontal_hair, NULL);
- cairo_perf_run (perf, "a1-line-hw", horizontal_wide, NULL);
- cairo_perf_run (perf, "a1-line-nhh", nearly_horizontal_hair, NULL);
- cairo_perf_run (perf, "a1-line-nhw", nearly_horizontal_wide, NULL);
-
- cairo_perf_run (perf, "a1-line-vh", vertical_hair, NULL);
- cairo_perf_run (perf, "a1-line-vw", vertical_wide, NULL);
- cairo_perf_run (perf, "a1-line-nvh", nearly_vertical_hair, NULL);
- cairo_perf_run (perf, "a1-line-nvw", nearly_vertical_wide, NULL);
-
- cairo_perf_run (perf, "a1-line-dh", diagonal_hair, NULL);
- cairo_perf_run (perf, "a1-line-dw", diagonal_wide, NULL);
-}
diff --git a/perf/micro/box-outline.c b/perf/micro/box-outline.c
deleted file mode 100644
index 1e654eb95..000000000
--- a/perf/micro/box-outline.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-/* This test case is designed to illustrate a performance bug that
- * exists in cairo in which using cairo_stroke is much slower than
- * cairo_fill to draw an identical figure, (and in particular a figure
- * that is much more natural to draw with cairo_stroke). The figure is
- * a 100x100 square outline 1-pixel wide, nicely pixel aligned.
- *
- * The performance bug should affect any path whose resulting contour
- * consists only of pixel-aligned horizontal and vertical elements.
- *
- * Initial testing on on machine shows stroke as 5x slower than fill
- * for the xlib backend and 16x slower for the image backend.
- */
-
-static cairo_time_t
-box_outline_stroke (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- cairo_rectangle (cr,
- 1.5, 1.5,
- width - 3, height - 3);
- cairo_set_line_width (cr, 1.0);
- cairo_set_source_rgb (cr, 1, 0, 0); /* red */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-box_outline_alpha_stroke (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- cairo_rectangle (cr,
- 1.5, 1.5,
- width - 3, height - 3);
- cairo_set_line_width (cr, 1.0);
- cairo_set_source_rgba (cr, 1, 0, 0, .5); /* red */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-box_outline_aa_stroke (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- cairo_translate (cr, .5, .5);
- cairo_rectangle (cr,
- 1.5, 1.5,
- width - 3, height - 3);
- cairo_set_line_width (cr, 1.0);
- cairo_set_source_rgb (cr, 1, 0, 0); /* red */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-box_outline_fill (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- cairo_rectangle (cr,
- 1.0, 1.0,
- width - 2, height - 2);
- cairo_rectangle (cr,
- 2.0, 2.0,
- width - 4, height - 4);
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_set_source_rgb (cr, 0, 1, 0); /* green */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-box_outline_alpha_fill (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- cairo_rectangle (cr,
- 1.0, 1.0,
- width - 2, height - 2);
- cairo_rectangle (cr,
- 2.0, 2.0,
- width - 4, height - 4);
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_set_source_rgba (cr, 0, 1, 0, .5); /* green */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-box_outline_aa_fill (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- cairo_translate (cr, .5, .5);
- cairo_rectangle (cr,
- 1.0, 1.0,
- width - 2, height - 2);
- cairo_rectangle (cr,
- 2.0, 2.0,
- width - 4, height - 4);
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_set_source_rgb (cr, 0, 1, 0); /* green */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-box_outline_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "box-outline", NULL);
-}
-
-void
-box_outline (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "box-outline-stroke", box_outline_stroke, NULL);
- cairo_perf_run (perf, "box-outline-fill", box_outline_fill, NULL);
-
- cairo_perf_run (perf, "box-outline-alpha-stroke", box_outline_alpha_stroke, NULL);
- cairo_perf_run (perf, "box-outline-alpha-fill", box_outline_alpha_fill, NULL);
-
- cairo_perf_run (perf, "box-outline-aa-stroke", box_outline_aa_stroke, NULL);
- cairo_perf_run (perf, "box-outline-aa-fill", box_outline_aa_fill, NULL);
-}
diff --git a/perf/micro/cairo-perf-cover.c b/perf/micro/cairo-perf-cover.c
deleted file mode 100644
index c2499021f..000000000
--- a/perf/micro/cairo-perf-cover.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static void
-init_and_set_source_surface (cairo_t *cr,
- cairo_surface_t *source,
- int width,
- int height)
-{
- cairo_t *cr2;
-
- /* Fill it with something known */
- cr2 = cairo_create (source);
- cairo_set_operator (cr2, CAIRO_OPERATOR_SOURCE);
- cairo_set_source_rgb (cr2, 0, 0, 1); /* blue */
- cairo_paint (cr2);
-
- cairo_set_source_rgba (cr2, 1, 0, 0, 0.5); /* 50% red */
- cairo_new_path (cr2);
- cairo_rectangle (cr2, 0, 0, width/2.0, height/2.0);
- cairo_rectangle (cr2, width/2.0, height/2.0, width/2.0, height/2.0);
- cairo_fill (cr2);
-
- cairo_set_source_surface (cr, cairo_get_target (cr2), 0, 0);
- cairo_destroy (cr2);
-}
-
-static void
-set_source_solid_rgb (cairo_t *cr,
- int width,
- int height)
-{
- cairo_set_source_rgb (cr, 0.2, 0.6, 0.9);
-}
-
-static void
-set_source_solid_rgba (cairo_t *cr,
- int width,
- int height)
-{
- cairo_set_source_rgba (cr, 0.2, 0.6, 0.9, 0.7);
-}
-
-static void
-set_source_image_surface_rgb (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
- width, height);
- init_and_set_source_surface (cr, source, width, height);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_image_surface_rgba (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- width, height);
- init_and_set_source_surface (cr, source, width, height);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_image_surface_rgba_mag (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- width/2, height/2);
- cairo_scale(cr, 2.1, 2.1);
- init_and_set_source_surface (cr, source, width/2, height/2);
- cairo_scale(cr, 1/2.1, 1/2.1);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_image_surface_rgba_min (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- width*2, height*2);
- cairo_scale(cr, 1/1.9, 1/1.9);
- init_and_set_source_surface (cr, source, width*2, height*2);
- cairo_scale(cr, 1.9, 1.9);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_similar_surface_rgb (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_COLOR,
- width, height);
- init_and_set_source_surface (cr, source, width, height);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_similar_surface_rgba (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_COLOR_ALPHA,
- width, height);
- init_and_set_source_surface (cr, source, width, height);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_similar_surface_rgba_mag (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_COLOR_ALPHA,
- width/2, height/2);
- cairo_scale(cr, 2.1, 2.1);
- init_and_set_source_surface (cr, source, width/2, height/2);
- cairo_scale(cr, 1/2.1, 1/2.1);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_similar_surface_rgba_min (cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *source;
-
- source = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_COLOR_ALPHA,
- width*2, height*2);
- cairo_scale(cr, 1/1.9, 1/1.9);
- init_and_set_source_surface (cr, source, width*2, height*2);
- cairo_scale(cr, 1.9, 1.9);
-
- cairo_surface_destroy (source);
-}
-
-static void
-set_source_linear_rgb (cairo_t *cr,
- int width,
- int height)
-{
- cairo_pattern_t *linear;
-
- linear = cairo_pattern_create_linear (0.0, 0.0, width, height);
- cairo_pattern_add_color_stop_rgb (linear, 0.0, 1, 0, 0); /* red */
- cairo_pattern_add_color_stop_rgb (linear, 1.0, 0, 0, 1); /* blue */
-
- cairo_set_source (cr, linear);
-
- cairo_pattern_destroy (linear);
-}
-
-static void
-set_source_linear_rgba (cairo_t *cr,
- int width,
- int height)
-{
- cairo_pattern_t *linear;
-
- linear = cairo_pattern_create_linear (0.0, 0.0, width, height);
- cairo_pattern_add_color_stop_rgba (linear, 0.0, 1, 0, 0, 0.5); /* 50% red */
- cairo_pattern_add_color_stop_rgba (linear, 1.0, 0, 0, 1, 0.0); /* 0% blue */
-
- cairo_set_source (cr, linear);
-
- cairo_pattern_destroy (linear);
-}
-
-static void
-set_source_linear3_rgb (cairo_t *cr,
- int width,
- int height)
-{
- cairo_pattern_t *linear;
-
- linear = cairo_pattern_create_linear (0.0, 0.0, width, height);
- cairo_pattern_add_color_stop_rgb (linear, 0.0, 1, 0, 0); /* red */
- cairo_pattern_add_color_stop_rgb (linear, 0.5, 0, 1, 0); /* green */
- cairo_pattern_add_color_stop_rgb (linear, 1.0, 0, 0, 1); /* blue */
-
- cairo_set_source (cr, linear);
-
- cairo_pattern_destroy (linear);
-}
-
-static void
-set_source_linear3_rgba (cairo_t *cr,
- int width,
- int height)
-{
- cairo_pattern_t *linear;
-
- linear = cairo_pattern_create_linear (0.0, 0.0, width, height);
- cairo_pattern_add_color_stop_rgba (linear, 0.0, 1, 0, 0, 0.5); /* 50% red */
- cairo_pattern_add_color_stop_rgba (linear, 0.5, 0, 1, 0, 0.0); /* 0% green */
- cairo_pattern_add_color_stop_rgba (linear, 1.0, 0, 0, 1, 0.5); /* 50% blue */
-
- cairo_set_source (cr, linear);
-
- cairo_pattern_destroy (linear);
-}
-
-static void
-set_source_radial_rgb (cairo_t *cr,
- int width,
- int height)
-{
- cairo_pattern_t *radial;
-
- radial = cairo_pattern_create_radial (width/2.0, height/2.0, 0.0,
- width/2.0, height/2.0, width/2.0);
- cairo_pattern_add_color_stop_rgb (radial, 0.0, 1, 0, 0); /* red */
- cairo_pattern_add_color_stop_rgb (radial, 1.0, 0, 0, 1); /* blue */
-
- cairo_set_source (cr, radial);
-
- cairo_pattern_destroy (radial);
-}
-
-static void
-set_source_radial_rgba (cairo_t *cr,
- int width,
- int height)
-{
- cairo_pattern_t *radial;
-
- radial = cairo_pattern_create_radial (width/2.0, height/2.0, 0.0,
- width/2.0, height/2.0, width/2.0);
- cairo_pattern_add_color_stop_rgba (radial, 0.0, 1, 0, 0, 0.5); /* 50% red */
- cairo_pattern_add_color_stop_rgba (radial, 1.0, 0, 0, 1, 0.0); /* 0% blue */
-
- cairo_set_source (cr, radial);
-
- cairo_pattern_destroy (radial);
-}
-
-typedef void (*set_source_func_t) (cairo_t *cr, int width, int height);
-
-void
-cairo_perf_cover_sources_and_operators (cairo_perf_t *perf,
- const char *name,
- cairo_perf_func_t perf_func,
- cairo_count_func_t count_func)
-{
- unsigned int i, j;
- char *expanded_name;
-
- struct { set_source_func_t set_source; const char *name; } sources[] = {
- { set_source_solid_rgb, "solid-rgb" },
- { set_source_solid_rgba, "solid-rgba" },
- { set_source_image_surface_rgb, "image-rgb" },
- { set_source_image_surface_rgba, "image-rgba" },
- { set_source_image_surface_rgba_mag, "image-rgba-mag" },
- { set_source_image_surface_rgba_min, "image-rgba-min" },
- { set_source_similar_surface_rgb, "similar-rgb" },
- { set_source_similar_surface_rgba, "similar-rgba" },
- { set_source_similar_surface_rgba_mag, "similar-rgba-mag" },
- { set_source_similar_surface_rgba_min, "similar-rgba-min" },
- { set_source_linear_rgb, "linear-rgb" },
- { set_source_linear_rgba, "linear-rgba" },
- { set_source_linear3_rgb, "linear3-rgb" },
- { set_source_linear3_rgba, "linear3-rgba" },
- { set_source_radial_rgb, "radial-rgb" },
- { set_source_radial_rgba, "radial-rgba" }
- };
-
- struct { cairo_operator_t op; const char *name; } operators[] = {
- { CAIRO_OPERATOR_OVER, "over" },
- { CAIRO_OPERATOR_SOURCE, "source" }
- };
-
- for (i = 0; i < ARRAY_LENGTH (sources); i++) {
- (sources[i].set_source) (perf->cr, perf->size, perf->size);
-
- for (j = 0; j < ARRAY_LENGTH (operators); j++) {
- cairo_set_operator (perf->cr, operators[j].op);
-
- xasprintf (&expanded_name, "%s_%s_%s",
- name, sources[i].name, operators[j].name);
- cairo_perf_run (perf, expanded_name, perf_func, count_func);
- free (expanded_name);
- }
- }
-}
diff --git a/perf/micro/composite-checker.c b/perf/micro/composite-checker.c
deleted file mode 100644
index d6d17ab63..000000000
--- a/perf/micro/composite-checker.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright © 2007 Björn Lindqvist
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Björn Lindqvist <bjourne@gmail.com>
- */
-
-#include "cairo-perf.h"
-
-/* This test case measures how much time cairo takes to render the
- * equivalent of the following gdk-pixbuf operation:
- *
- * gdk_pixbuf_composite_color(dest,
- * 0, 0, DST_SIZE, DST_SIZE,
- * 0, 0,
- * SCALE, SCALE,
- * gdk.INTERP_NEAREST,
- * 255,
- * 0, 0,
- * 8, 0x33333333, 0x88888888);
- *
- * Cairo is (at the time of writing) about 2-3 times as slow as
- * gdk-pixbuf.
- */
-#define PAT_SIZE 16
-#define SRC_SIZE 64
-
-static cairo_pattern_t *checkerboard = NULL;
-static cairo_pattern_t *src_pattern = NULL;
-
-static cairo_time_t
-do_composite_checker (cairo_t *cr,
- int width,
- int height,
- int loops)
-{
- /* Compute zoom so that the src_pattern covers the whole output image. */
- double xscale = width / (double) SRC_SIZE;
- double yscale = height / (double) SRC_SIZE;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- /* Fill the surface with our background. */
- cairo_identity_matrix (cr);
- cairo_set_source (cr, checkerboard);
- cairo_paint (cr);
-
- /* Draw the scaled image on top. */
- cairo_scale (cr, xscale, yscale);
- cairo_set_source (cr, src_pattern);
- cairo_paint (cr);
- }
-
- cairo_perf_timer_stop ();
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-composite_checker_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "composite-checker", NULL);
-}
-
-void
-composite_checker (cairo_perf_t *perf,
- cairo_t *cr,
- int width,
- int height)
-{
- cairo_surface_t *image;
-
- /* Create the checker pattern. We don't actually need to draw
- * anything on it since that wouldn't affect performance.
- */
- image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- PAT_SIZE,
- PAT_SIZE);
- checkerboard = cairo_pattern_create_for_surface (image);
- cairo_pattern_set_filter (checkerboard, CAIRO_FILTER_NEAREST);
- cairo_pattern_set_extend (checkerboard, CAIRO_EXTEND_REPEAT);
- cairo_surface_destroy (image);
-
- /* Create the image source pattern. Again we use the NEAREST
- * filtering which should be fastest.
- */
- image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- SRC_SIZE,
- SRC_SIZE);
- src_pattern = cairo_pattern_create_for_surface (image);
- cairo_pattern_set_filter (src_pattern, CAIRO_FILTER_NEAREST);
- cairo_surface_destroy (image);
-
- cairo_perf_run (perf, "composite-checker", do_composite_checker, NULL);
-
- cairo_pattern_destroy (checkerboard);
- cairo_pattern_destroy (src_pattern);
-}
diff --git a/perf/micro/curve.c b/perf/micro/curve.c
deleted file mode 100644
index 3b5a16342..000000000
--- a/perf/micro/curve.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_curve_stroke (cairo_t *cr, int width, int height, int loops)
-{
- state = 0xc0ffee;
- cairo_set_line_width (cr, 2.);
- cairo_perf_timer_start ();
-
- while (loops--) {
- double x1 = uniform_random (0, width);
- double x2 = uniform_random (0, width);
- double x3 = uniform_random (0, width);
- double y1 = uniform_random (0, height);
- double y2 = uniform_random (0, height);
- double y3 = uniform_random (0, height);
- cairo_move_to (cr, uniform_random (0, width), uniform_random (0, height));
- cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);
- cairo_stroke(cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_curve_fill (cairo_t *cr, int width, int height, int loops)
-{
- state = 0xc0ffee;
- cairo_perf_timer_start ();
-
- while (loops--) {
- double x0 = uniform_random (0, width);
- double x1 = uniform_random (0, width);
- double x2 = uniform_random (0, width);
- double x3 = uniform_random (0, width);
- double xm = uniform_random (0, width);
- double xn = uniform_random (0, width);
- double y0 = uniform_random (0, height);
- double y1 = uniform_random (0, height);
- double y2 = uniform_random (0, height);
- double y3 = uniform_random (0, height);
- double ym = uniform_random (0, height);
- double yn = uniform_random (0, height);
-
- cairo_move_to (cr, xm, ym);
- cairo_curve_to (cr, x1, y1, x2, y2, xn, yn);
- cairo_curve_to (cr, x3, y3, x0, y0, xm, ym);
- cairo_close_path (cr);
-
- cairo_fill(cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-curve_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "curve", NULL);
-}
-
-void
-curve (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
-
- cairo_perf_run (perf, "curve-stroked", do_curve_stroke, NULL);
- cairo_perf_run (perf, "curve-filled", do_curve_fill, NULL);
-}
diff --git a/perf/micro/disjoint.c b/perf/micro/disjoint.c
deleted file mode 100644
index 847860c7e..000000000
--- a/perf/micro/disjoint.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
-/* cairo - a vector graphics library with display and print output
- *
- * Copyright (c) 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-#include "cairo-perf.h"
-#include <assert.h>
-
-#define STEP 5
-
-static void path (cairo_t *cr, int width, int height)
-{
- int i;
-
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_clip (cr);
-
- cairo_translate (cr, width/2, height/2);
- cairo_rotate (cr, M_PI/4);
- cairo_translate (cr, -width/2, -height/2);
-
- for (i = 0; i < width; i += STEP) {
- cairo_rectangle (cr, i, -2, 1, height+4);
- cairo_rectangle (cr, -2, i, width+4, 1);
- }
-}
-
-static void clip (cairo_t *cr, int width, int height)
-{
- int i, j;
-
- for (j = 0; j < height; j += 2*STEP) {
- for (i = 0; i < width; i += 2*STEP)
- cairo_rectangle (cr, i, j, STEP, STEP);
-
- j += 2*STEP;
- for (i = 0; i < width; i += 2*STEP)
- cairo_rectangle (cr, i+STEP/2, j, STEP, STEP);
- }
-
- cairo_clip (cr);
-}
-
-static cairo_time_t
-draw (cairo_t *cr, int width, int height, int loops)
-{
- cairo_save (cr);
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_paint (cr);
- cairo_set_source_rgb (cr, 1, 0, 0);
-
- cairo_perf_timer_start ();
- while (loops--) {
- cairo_save (cr);
- clip (cr, width, height);
- path (cr, width, height);
- cairo_fill (cr);
- cairo_restore (cr);
- }
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-disjoint_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "disjoint", NULL);
-}
-
-void
-disjoint (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- if (! cairo_perf_can_run (perf, "disjoint", NULL))
- return;
-
- cairo_perf_run (perf, "disjoint", draw, NULL);
-}
diff --git a/perf/micro/dragon.c b/perf/micro/dragon.c
deleted file mode 100644
index aa5daf534..000000000
--- a/perf/micro/dragon.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright © 2007 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Chris Wilson not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Chris Wilson makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * CHRIS WILSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL CHRIS WILSON BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- *
- * Inspiration (and path!) taken from
- * http://labs.trolltech.com/blogs/2007/08/31/rasterizing-dragons/
- */
-
-#include "cairo-perf.h"
-
-static inline int
-next_pot (int v)
-{
- v--;
- v |= v >> 1;
- v |= v >> 2;
- v |= v >> 4;
- v |= v >> 8;
- v |= v >> 16;
- v++;
- return v;
-}
-
-static cairo_bool_t
-direction (int i)
-{
- int pivot, np2;
-
- if (i < 2)
- return TRUE;
-
- np2 = next_pot (i + 1);
- if (np2 == i + 1)
- return TRUE;
-
- pivot = np2 / 2 - 1;
- return ! direction (2 * pivot - i);
-}
-
-static void
-path (cairo_t *cr, int step, int dir, int iterations)
-{
- double dx, dy;
- int i;
-
- switch (dir) {
- default:
- case 0: dx = step; dy = 0; break;
- case 1: dx = -step; dy = 0; break;
- case 2: dx = 0; dy = step; break;
- case 3: dx = 0; dy = -step; break;
- }
-
- for (i = 0; i < iterations; i++) {
- cairo_rel_line_to (cr, dx, dy);
-
- if (direction (i)) {
- double t = dx;
- dx = dy;
- dy = -t;
- } else {
- double t = dx;
- dx = -dy;
- dy = t;
- }
- }
-}
-
-static cairo_time_t
-do_dragon (cairo_t *cr, int width, int height, int loops)
-{
- cairo_pattern_t *pattern;
- double cx, cy, r;
-
- cx = cy = .5 * MAX (width, height);
- r = .5 * MIN (width, height);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- pattern = cairo_pattern_create_radial (cx, cy, 0., cx, cy, r);
- cairo_pattern_add_color_stop_rgb (pattern, 0., .0, .0, .0);
- cairo_pattern_add_color_stop_rgb (pattern, 0.25, .5, .4, .4);
- cairo_pattern_add_color_stop_rgb (pattern, .5, .8, .8, .9);
- cairo_pattern_add_color_stop_rgb (pattern, 1., .9, .9, 1.);
- cairo_set_source (cr, pattern);
- cairo_pattern_destroy (pattern);
- cairo_paint (cr);
-
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
- cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
- cairo_set_line_width (cr, 4.);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 0, 2048);
- pattern = cairo_pattern_create_radial (cx, cy, 0., cx, cy, r);
- cairo_pattern_add_color_stop_rgb (pattern, 0., 1., 1., 1.);
- cairo_pattern_add_color_stop_rgb (pattern, 1., 0., 0., 0.);
- cairo_set_source (cr, pattern);
- cairo_pattern_destroy (pattern);
- cairo_stroke(cr);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 1, 2048);
- pattern = cairo_pattern_create_radial (cx, cy, 0., cx, cy, r);
- cairo_pattern_add_color_stop_rgb (pattern, 1., 1., 1., 0.);
- cairo_pattern_add_color_stop_rgb (pattern, 0., 1., 0., 0.);
- cairo_set_source (cr, pattern);
- cairo_pattern_destroy (pattern);
- cairo_stroke(cr);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 2, 2048);
- pattern = cairo_pattern_create_radial (cx, cy, 0., cx, cy, r);
- cairo_pattern_add_color_stop_rgb (pattern, 1., 0., 1., 1.);
- cairo_pattern_add_color_stop_rgb (pattern, 0., 0., 1., 0.);
- cairo_set_source (cr, pattern);
- cairo_pattern_destroy (pattern);
- cairo_stroke(cr);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 3, 2048);
- pattern = cairo_pattern_create_radial (cx, cy, 0., cx, cy, r);
- cairo_pattern_add_color_stop_rgb (pattern, 1., 1., 0., 1.);
- cairo_pattern_add_color_stop_rgb (pattern, 0., 0., 0., 1.);
- cairo_set_source (cr, pattern);
- cairo_pattern_destroy (pattern);
- cairo_stroke(cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_dragon_solid (cairo_t *cr, int width, int height, int loops)
-{
- double cx, cy;
-
- cx = cy = .5 * MAX (width, height);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_paint (cr);
-
- cairo_set_line_width (cr, 4.);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 0, 2048);
- cairo_set_source_rgb (cr, 1, 0, 0);
- cairo_stroke(cr);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 1, 2048);
- cairo_set_source_rgb (cr, 0, 1, 0);
- cairo_stroke(cr);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 2, 2048);
- cairo_set_source_rgb (cr, 0, 0, 1);
- cairo_stroke(cr);
-
- cairo_move_to (cr, cx, cy);
- path (cr, 12, 3, 2048);
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_stroke(cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_dragon_solid_unaligned (cairo_t *cr, int width, int height, int loops)
-{
- cairo_translate (cr, 0.01, 0.01);
- return do_dragon_solid (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_dragon_solid_aligned_clip (cairo_t *cr, int width, int height, int loops)
-{
- cairo_reset_clip (cr);
- cairo_rectangle (cr, 10, 10, width/2 + 10, height/2 + 10);
- cairo_rectangle (cr, width/2-20, height/2-20, width/2 + 10, height/2 + 10);
- cairo_clip (cr);
-
- return do_dragon_solid (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_dragon_unaligned_solid_aligned_clip (cairo_t *cr, int width, int height, int loops)
-{
- cairo_translate (cr, 0.01, 0.01);
- cairo_reset_clip (cr);
- cairo_rectangle (cr, 10, 10, width/2 + 10, height/2 + 10);
- cairo_rectangle (cr, width/2-20, height/2-20, width/2 + 10, height/2 + 10);
- cairo_clip (cr);
-
- return do_dragon_solid (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_dragon_solid_unaligned_clip (cairo_t *cr, int width, int height, int loops)
-{
- cairo_reset_clip (cr);
- cairo_rectangle (cr, 10.5, 10.5, width/2 + 10, height/2 + 10);
- cairo_rectangle (cr, width/2-20, height/2-20, width/2 + 9.5, height/2 + 9.5);
- cairo_clip (cr);
-
- return do_dragon_solid (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_dragon_unaligned_solid_unaligned_clip (cairo_t *cr, int width, int height, int loops)
-{
- cairo_translate (cr, 0.01, 0.01);
- cairo_reset_clip (cr);
- cairo_rectangle (cr, 10.5, 10.5, width/2 + 10, height/2 + 10);
- cairo_rectangle (cr, width/2-20, height/2-20, width/2 + 9.5, height/2 + 9.5);
- cairo_clip (cr);
-
- return do_dragon_solid (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_dragon_solid_circle_clip (cairo_t *cr, int width, int height, int loops)
-{
- cairo_reset_clip (cr);
- cairo_arc (cr, width/2., height/2., MIN (width, height)/2. - 10, 0, 2 * M_PI);
- cairo_clip (cr);
-
- return do_dragon_solid (cr, width, height, loops);
-}
-
-cairo_bool_t
-dragon_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "dragon", NULL);
-}
-
-void
-dragon (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "dragon-solid", do_dragon_solid, NULL);
- cairo_perf_run (perf, "dragon-unaligned-solid", do_dragon_solid_unaligned, NULL);
- cairo_perf_run (perf, "dragon-solid-aligned-clip", do_dragon_solid_aligned_clip, NULL);
- cairo_perf_run (perf, "dragon-unaligned-solid-aligned-clip", do_dragon_unaligned_solid_aligned_clip, NULL);
- cairo_perf_run (perf, "dragon-solid-unaligned-clip", do_dragon_solid_unaligned_clip, NULL);
- cairo_perf_run (perf, "dragon-unaligned-solid-unaligned-clip", do_dragon_unaligned_solid_unaligned_clip, NULL);
- cairo_perf_run (perf, "dragon-solid-circle-clip", do_dragon_solid_circle_clip, NULL);
- cairo_perf_run (perf, "dragon", do_dragon, NULL);
-}
diff --git a/perf/micro/fill-clip.c b/perf/micro/fill-clip.c
deleted file mode 100644
index 2d014aca8..000000000
--- a/perf/micro/fill-clip.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-/* Compares the overhead for WebKit's drawRect() */
-
-#include "cairo-perf.h"
-
-#include <pixman.h>
-
-static cairo_time_t
-clip_paint (cairo_t *cr, int width, int height, int loops)
-{
- int x = width/4, w = width/2;
- int y = height/4, h = height/2;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_reset_clip (cr);
- cairo_rectangle (cr, x, y, w, h);
- cairo_clip (cr);
- cairo_paint (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-rect_fill (cairo_t *cr, int width, int height, int loops)
-{
- int x = width/4, w = width/2;
- int y = height/4, h = height/2;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_rectangle (cr, x, y, w, h);
- cairo_fill (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-direct (cairo_t *cr, int width, int height, int loops)
-{
- int x = width/4, w = width/2;
- int y = height/4, h = height/2;
- cairo_surface_t *surface, *image;
- uint8_t *data;
- int stride, bpp;
-
-
- surface = cairo_get_target (cr);
- image = cairo_surface_map_to_image (surface, NULL);
- data = cairo_image_surface_get_data (image);
- stride = cairo_image_surface_get_stride (image);
-
- switch (cairo_image_surface_get_format (image)) {
- default:
- case CAIRO_FORMAT_INVALID:
- case CAIRO_FORMAT_A1: bpp = 0; break;
- case CAIRO_FORMAT_A8: bpp = 8; break;
- case CAIRO_FORMAT_RGB16_565: bpp = 16; break;
- case CAIRO_FORMAT_RGB24:
- case CAIRO_FORMAT_RGB30:
- case CAIRO_FORMAT_ARGB32: bpp = 32; break;
- }
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- pixman_fill ((uint32_t *)data, stride / sizeof(uint32_t), bpp,
- x, y, w, h,
- -1);
- }
-
- cairo_perf_timer_stop ();
-
- cairo_surface_unmap_image (surface, image);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-fill_clip_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "fillclip", NULL);
-}
-
-void
-fill_clip (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
-
- cairo_perf_run (perf, "fillclip-clip", clip_paint, NULL);
- cairo_perf_run (perf, "fillclip-fill", rect_fill, NULL);
- cairo_perf_run (perf, "fillclip-direct", direct, NULL);
-}
diff --git a/perf/micro/fill.c b/perf/micro/fill.c
deleted file mode 100644
index d356c26d5..000000000
--- a/perf/micro/fill.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_fill (cairo_t *cr, int width, int height, int loops)
-{
- cairo_arc (cr,
- width/2.0, height/2.0,
- width/3.0,
- 0, 2 * M_PI);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_fill_annuli (cairo_t *cr, int width, int height, int loops)
-{
- cairo_new_sub_path (cr);
- cairo_arc (cr,
- width/2.0, height/2.0,
- width/3.0,
- 0, 2 * M_PI);
-
- cairo_new_sub_path (cr);
- cairo_arc_negative (cr,
- width/2.0, height/2.0,
- width/4.0,
- 2 * M_PI, 0);
-
- cairo_new_sub_path (cr);
- cairo_arc (cr,
- width/2.0, height/2.0,
- width/6.0,
- 0, 2 * M_PI);
-
- cairo_new_sub_path (cr);
- cairo_arc_negative (cr,
- width/2.0, height/2.0,
- width/8.0,
- 2 * M_PI, 0);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_fill_eo_noaa (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
-
- cairo_arc (cr,
- width/2.0, height/2.0,
- width/3.0,
- 0, 2 * M_PI);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-fill_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "fill", NULL);
-}
-
-void
-fill (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "fill", do_fill, NULL);
- cairo_perf_cover_sources_and_operators (perf, "fill-annuli", do_fill_annuli, NULL);
- cairo_perf_cover_sources_and_operators (perf, "fill-eo-noaa", do_fill_eo_noaa, NULL);
-}
diff --git a/perf/micro/glyphs.c b/perf/micro/glyphs.c
deleted file mode 100644
index 5f088b29e..000000000
--- a/perf/micro/glyphs.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_glyphs (double font_size,
- cairo_antialias_t antialias,
- cairo_t *cr, int width, int height, int loops)
-{
- const char text[] = "the jay, pig, fox, zebra and my wolves quack";
- cairo_scaled_font_t *scaled_font;
- cairo_glyph_t *glyphs = NULL, *glyphs_copy;
- cairo_text_extents_t extents;
- cairo_font_options_t *options;
- cairo_status_t status;
- double x, y;
- int num_glyphs, n;
-
- options = cairo_font_options_create ();
- cairo_font_options_set_antialias (options, antialias);
- cairo_set_font_options (cr, options);
- cairo_font_options_destroy (options);
-
- cairo_select_font_face (cr,
- "@cairo:",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_NORMAL);
- cairo_set_font_size (cr, font_size);
- scaled_font = cairo_get_scaled_font (cr);
- status = cairo_scaled_font_text_to_glyphs (scaled_font, 0., 0.,
- text, -1,
- &glyphs, &num_glyphs,
- NULL, NULL,
- NULL);
- if (status)
- return 0;
-
- glyphs_copy = cairo_glyph_allocate (num_glyphs);
- if (glyphs_copy == NULL) {
- cairo_glyph_free (glyphs);
- return 0;
- }
-
- cairo_scaled_font_glyph_extents (scaled_font,
- glyphs, num_glyphs,
- &extents);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- y = 0;
- do {
- x = 0;
- do {
- for (n = 0; n < num_glyphs; n++) {
- glyphs_copy[n] = glyphs[n];
- glyphs_copy[n].x += x;
- glyphs_copy[n].y += y;
- }
- cairo_show_glyphs (cr, glyphs_copy, num_glyphs);
-
- x += extents.width;
- } while (x < width);
- y += extents.height;
- } while (y < height);
- }
-
- cairo_perf_timer_stop ();
-
- cairo_glyph_free (glyphs);
- cairo_glyph_free (glyphs_copy);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static double
-count_glyphs (double font_size,
- cairo_antialias_t antialias,
- cairo_t *cr, int width, int height)
-{
- const char text[] = "the jay, pig, fox, zebra and my wolves quack";
- cairo_scaled_font_t *scaled_font;
- cairo_glyph_t *glyphs = NULL;
- cairo_text_extents_t extents;
- cairo_font_options_t *options;
- cairo_status_t status;
- int num_glyphs;
- int glyphs_per_line, lines_per_loop;
-
- options = cairo_font_options_create ();
- cairo_font_options_set_antialias (options, antialias);
- cairo_set_font_options (cr, options);
- cairo_font_options_destroy (options);
-
- cairo_select_font_face (cr,
- "@cairo:",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_NORMAL);
- cairo_set_font_size (cr, font_size);
- scaled_font = cairo_get_scaled_font (cr);
- status = cairo_scaled_font_text_to_glyphs (scaled_font, 0., 0.,
- text, -1,
- &glyphs, &num_glyphs,
- NULL, NULL,
- NULL);
- if (status)
- return 0;
-
- cairo_scaled_font_glyph_extents (scaled_font,
- glyphs, num_glyphs,
- &extents);
- cairo_glyph_free (glyphs);
-
- glyphs_per_line = num_glyphs * width / extents.width + 1;
- lines_per_loop = height / extents.height + 1;
- return glyphs_per_line * lines_per_loop / 1000.; /* kiloglyphs */
-}
-
-#define DECL(name,size, aa) \
-static cairo_time_t \
-do_glyphs##name (cairo_t *cr, int width, int height, int loops) \
-{ \
- return do_glyphs (size, aa, cr, width, height, loops); \
-} \
-\
-static double \
-count_glyphs##name (cairo_t *cr, int width, int height) \
-{ \
- return count_glyphs (size, aa, cr, width, height); \
-}
-
-DECL(8, 8, CAIRO_ANTIALIAS_GRAY)
-DECL(10, 10, CAIRO_ANTIALIAS_GRAY)
-DECL(12, 12, CAIRO_ANTIALIAS_GRAY)
-DECL(16, 16, CAIRO_ANTIALIAS_GRAY)
-DECL(20, 20, CAIRO_ANTIALIAS_GRAY)
-DECL(24, 24, CAIRO_ANTIALIAS_GRAY)
-DECL(32, 32, CAIRO_ANTIALIAS_GRAY)
-DECL(40, 40, CAIRO_ANTIALIAS_GRAY)
-DECL(48, 48, CAIRO_ANTIALIAS_GRAY)
-
-DECL(8ca, 8, CAIRO_ANTIALIAS_SUBPIXEL)
-DECL(48ca, 48, CAIRO_ANTIALIAS_SUBPIXEL)
-
-DECL(8mono, 8, CAIRO_ANTIALIAS_NONE)
-DECL(48mono, 48, CAIRO_ANTIALIAS_NONE)
-
-cairo_bool_t
-glyphs_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "glyphs", NULL);
-}
-
-void
-glyphs (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "glyphs8mono", do_glyphs8mono, count_glyphs8mono);
- cairo_perf_cover_sources_and_operators (perf, "glyphs8", do_glyphs8, count_glyphs8);
- cairo_perf_cover_sources_and_operators (perf, "glyphs8ca", do_glyphs8ca, count_glyphs8ca);
-
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
- cairo_set_source_rgb (cr, 0, 0, 0);
-
- cairo_perf_run (perf, "glyphs8", do_glyphs8, count_glyphs8);
- cairo_perf_run (perf, "glyphs10", do_glyphs10, count_glyphs10);
- cairo_perf_run (perf, "glyphs12", do_glyphs12, count_glyphs12);
- cairo_perf_run (perf, "glyphs16", do_glyphs16, count_glyphs16);
- cairo_perf_run (perf, "glyphs20", do_glyphs20, count_glyphs20);
- cairo_perf_run (perf, "glyphs24", do_glyphs24, count_glyphs24);
- cairo_perf_run (perf, "glyphs32", do_glyphs32, count_glyphs32);
- cairo_perf_run (perf, "glyphs40", do_glyphs40, count_glyphs40);
- cairo_perf_run (perf, "glyphs48", do_glyphs48, count_glyphs48);
-
- cairo_perf_cover_sources_and_operators (perf, "glyphs48mono", do_glyphs48mono, count_glyphs48mono);
- cairo_perf_cover_sources_and_operators (perf, "glyphs48", do_glyphs48, count_glyphs48);
- cairo_perf_cover_sources_and_operators (perf, "glyphs48ca", do_glyphs48ca, count_glyphs48ca);
-}
diff --git a/perf/micro/hash-table.c b/perf/micro/hash-table.c
deleted file mode 100644
index d16291770..000000000
--- a/perf/micro/hash-table.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright © 2011 Andrea Canciani
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Andrea Canciani <ranma42@gmail.com>
- */
-
-#include "cairo-perf.h"
-
-#define ITER 1000
-#define HOLDOVERS 256
-#define LIVE_ENTRIES 257
-#define ACTIVE_FONTS (LIVE_ENTRIES - HOLDOVERS - 1)
-
-/*
- * The original implementation of hash tables was very inefficient, as
- * pointed out in https://bugs.freedesktop.org/show_bug.cgi?id=17399
- *
- * This benchmark tries to fill up the scaled_font_map hash table to
- * show the O(n) behavior.
- */
-
-static cairo_time_t
-do_hash_table (cairo_t *cr, int width, int height, int loops)
-{
- /*
- * Microsoft C Compiler complains that:
- * error C2466: cannot allocate an array of constant size 0
- * so we add an unused element to make it happy
- */
- cairo_scaled_font_t *active_fonts[ACTIVE_FONTS + 1];
- cairo_matrix_t m;
- int i;
-
- cairo_matrix_init_identity (&m);
-
- /* Touch HOLDOVERS scaled fonts to fill up the holdover list. */
- for (i = 0; i < HOLDOVERS; i++) {
- m.yy = m.xx * (i + 1);
- cairo_set_font_matrix (cr, &m);
- cairo_get_scaled_font (cr);
- }
-
- /*
- * Reference some scaled fonts so that they will be kept in the
- * scaled fonts map. We want LIVE_ENTRIES elements in the font
- * map, but cairo keeps HOLDOVERS recently used fonts in it and we
- * will be activating a new font in the cr context, so we just
- * keep references to ACTIVE_FONTS fonts.
- *
- * Note: setting LIVE_ENTRIES == HOLDOVERS+1 means that we keep no
- * font in active_fonts and the slowness is caused by the holdover
- * fonts only.
- */
- for (i = 0; i < ACTIVE_FONTS; i++) {
- cairo_scaled_font_t *scaled_font;
-
- m.yy = m.xx * (i + 1);
- cairo_set_font_matrix (cr, &m);
-
- scaled_font = cairo_get_scaled_font (cr);
- active_fonts[i] = cairo_scaled_font_reference (scaled_font);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- m.xx += 1.0;
-
- /* Generate ITER new scaled fonts per loop */
- for (i = 0; i < ITER; i++) {
- m.yy = m.xx * (i + 1);
- cairo_set_font_matrix (cr, &m);
- cairo_get_scaled_font (cr);
- }
- }
-
- cairo_perf_timer_stop ();
-
- for (i = 0; i < ACTIVE_FONTS; i++)
- cairo_scaled_font_destroy (active_fonts[i]);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-hash_table_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "hash-table", NULL);
-}
-
-void
-hash_table (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "hash-table",
- do_hash_table, NULL);
-}
diff --git a/perf/micro/hatching.c b/perf/micro/hatching.c
deleted file mode 100644
index d1d9fb8a6..000000000
--- a/perf/micro/hatching.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
-/* cairo - a vector graphics library with display and print output
- *
- * Copyright (c) 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-#include "cairo-perf.h"
-#include <assert.h>
-
-
-#define STEP 5
-#define WIDTH 100
-#define HEIGHT 100
-
-static void path (cairo_t *cr, unsigned int width, unsigned int height)
-{
- unsigned int i;
-
- for (i = 0; i < width+1; i += STEP) {
- cairo_rectangle (cr, i-1, -1, 2, height+2);
- cairo_rectangle (cr, -1, i-1, width+2, 2);
- }
-}
-
-static void aa (cairo_t *cr)
-{
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
-}
-
-static void mono (cairo_t *cr)
-{
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
-}
-
-static void aligned (cairo_t *cr, int width, int height)
-{
-}
-
-static void misaligned (cairo_t *cr, int width, int height)
-{
- cairo_translate (cr, 0.25, 0.25);
-}
-
-static void rotated (cairo_t *cr, int width, int height)
-{
- cairo_translate (cr, width/2, height/2);
- cairo_rotate (cr, M_PI/4);
- cairo_translate (cr, -width/2, -height/2);
-}
-
-static void clip (cairo_t *cr)
-{
- cairo_clip (cr);
- cairo_paint (cr);
-}
-
-static void clip_alpha (cairo_t *cr)
-{
- cairo_clip (cr);
- cairo_paint_with_alpha (cr, .5);
-}
-
-static cairo_time_t
-draw (cairo_t *cr,
- void (*prepare) (cairo_t *cr),
- void (*transform) (cairo_t *cr, int width, int height),
- void (*op) (cairo_t *cr),
- int width, int height, int loops)
-{
- cairo_save (cr);
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_paint (cr);
- cairo_set_source_rgb (cr, 1, 0, 0);
-
- prepare (cr);
-
- cairo_perf_timer_start ();
- while (loops--) {
- cairo_save (cr);
- transform (cr, width, height);
- path (cr, width, height);
- op (cr);
- cairo_restore (cr);
- }
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-draw_aligned_aa (cairo_t *cr, int width, int height, int loops)
-{
- return draw(cr, aa, aligned, cairo_fill,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_misaligned_aa (cairo_t *cr, int width, int height, int loops)
-{
- return draw(cr, aa, misaligned, cairo_fill,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_rotated_aa (cairo_t *cr, int width, int height, int loops)
-{
- return draw(cr, aa, rotated, cairo_fill,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_aligned_mono (cairo_t *cr, int width, int height, int loops)
-{
- return draw(cr, mono, aligned, cairo_fill,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_misaligned_mono (cairo_t *cr, int width, int height, int loops)
-{
- return draw(cr, mono, misaligned, cairo_fill,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_rotated_mono (cairo_t *cr, int width, int height, int loops)
-{
- return draw(cr, mono, rotated, cairo_fill,
- width, height, loops);
-}
-
-#define F(name, op,transform,aa) \
-static cairo_time_t \
-draw_##name (cairo_t *cr, int width, int height, int loops) \
-{ return draw(cr, (aa), (transform), (op), width, height, loops); }
-
-F(clip_aligned, clip, aligned, aa)
-F(clip_misaligned, clip, misaligned, aa)
-F(clip_rotated, clip, rotated, aa)
-F(clip_aligned_mono, clip, aligned, mono)
-F(clip_misaligned_mono, clip, misaligned, mono)
-F(clip_rotated_mono, clip, rotated, mono)
-
-F(clip_alpha_aligned, clip_alpha, aligned, aa)
-F(clip_alpha_misaligned, clip_alpha, misaligned, aa)
-F(clip_alpha_rotated, clip_alpha, rotated, aa)
-F(clip_alpha_aligned_mono, clip_alpha, aligned, mono)
-F(clip_alpha_misaligned_mono, clip_alpha, misaligned, mono)
-F(clip_alpha_rotated_mono, clip_alpha, rotated, mono)
-
-cairo_bool_t
-hatching_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "hatching", NULL);
-}
-
-void
-hatching (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "hatching-aligned-aa", draw_aligned_aa, NULL);
- cairo_perf_run (perf, "hatching-misaligned-aa", draw_misaligned_aa, NULL);
- cairo_perf_run (perf, "hatching-rotated-aa", draw_rotated_aa, NULL);
- cairo_perf_run (perf, "hatching-aligned-mono", draw_aligned_mono, NULL);
- cairo_perf_run (perf, "hatching-misaligned-mono", draw_misaligned_mono, NULL);
- cairo_perf_run (perf, "hatching-rotated-mono", draw_rotated_mono, NULL);
-
- cairo_perf_run (perf, "hatching-clip-aligned-aa", draw_clip_aligned, NULL);
- cairo_perf_run (perf, "hatching-clip-misaligned-aa", draw_clip_misaligned, NULL);
- cairo_perf_run (perf, "hatching-clip-rotated-aa", draw_clip_rotated, NULL);
- cairo_perf_run (perf, "hatching-clip-aligned-mono", draw_clip_aligned_mono, NULL);
- cairo_perf_run (perf, "hatching-clip-misaligned-mono", draw_clip_misaligned_mono, NULL);
- cairo_perf_run (perf, "hatching-clip-rotated-mono", draw_clip_rotated_mono, NULL);
-
- cairo_perf_run (perf, "hatching-clip-alpha-aligned-aa", draw_clip_alpha_aligned, NULL);
- cairo_perf_run (perf, "hatching-clip-alpha-misaligned-aa", draw_clip_alpha_misaligned, NULL);
- cairo_perf_run (perf, "hatching-clip-alpha-rotated-aa", draw_clip_alpha_rotated, NULL);
- cairo_perf_run (perf, "hatching-clip-alpha-aligned-mono", draw_clip_alpha_aligned_mono, NULL);
- cairo_perf_run (perf, "hatching-clip-alpha-misaligned-mono", draw_clip_alpha_misaligned_mono, NULL);
- cairo_perf_run (perf, "hatching-clip-alpha-rotated-mono", draw_clip_alpha_rotated_mono, NULL);
-}
diff --git a/perf/micro/intersections.c b/perf/micro/intersections.c
deleted file mode 100644
index 57931faf8..000000000
--- a/perf/micro/intersections.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
-/* cairo - a vector graphics library with display and print output
- *
- * Copyright (c) 2008 M Joonas Pihlaja
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-#include "cairo-perf.h"
-
-#define NUM_SEGMENTS 256
-
-static unsigned state;
-static double
-uniform_random (double minval, double maxval)
-{
- static unsigned const poly = 0x9a795537U;
- unsigned n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-draw_random (cairo_t *cr, cairo_fill_rule_t fill_rule,
- int width, int height, int loops)
-{
- double x[NUM_SEGMENTS];
- double y[NUM_SEGMENTS];
- int i;
-
- cairo_save (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_paint (cr);
-
- for (i = 0; i < NUM_SEGMENTS; i++) {
- x[i] = uniform_random (0, width);
- y[i] = uniform_random (0, height);
- }
-
- state = 0x12345678;
- cairo_translate (cr, 1, 1);
- cairo_set_fill_rule (cr, fill_rule);
- cairo_set_source_rgb (cr, 1, 0, 0);
-
- cairo_new_path (cr);
- cairo_move_to (cr, 0, 0);
- for (i = 0; i < NUM_SEGMENTS; i++)
- cairo_line_to (cr, x[i], y[i]);
- cairo_close_path (cr);
-
- cairo_perf_timer_start ();
- while (loops--)
- cairo_fill_preserve (cr);
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-draw_random_curve (cairo_t *cr, cairo_fill_rule_t fill_rule,
- int width, int height, int loops)
-{
- double x[3*NUM_SEGMENTS];
- double y[3*NUM_SEGMENTS];
- int i;
-
- cairo_save (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_paint (cr);
-
- for (i = 0; i < 3*NUM_SEGMENTS; i++) {
- x[i] = uniform_random (0, width);
- y[i] = uniform_random (0, height);
- }
-
- state = 0x12345678;
- cairo_translate (cr, 1, 1);
- cairo_set_fill_rule (cr, fill_rule);
- cairo_set_source_rgb (cr, 1, 0, 0);
-
- cairo_new_path (cr);
- cairo_move_to (cr, 0, 0);
- for (i = 0; i < NUM_SEGMENTS; i++) {
- cairo_curve_to (cr,
- x[3*i+0], y[3*i+0],
- x[3*i+1], y[3*i+1],
- x[3*i+2], y[3*i+2]);
- }
- cairo_close_path (cr);
-
- cairo_perf_timer_start ();
- while (loops--)
- cairo_fill_preserve (cr);
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-random_eo (cairo_t *cr, int width, int height, int loops)
-{
- return draw_random (cr, CAIRO_FILL_RULE_EVEN_ODD, width, height, loops);
-}
-
-static cairo_time_t
-random_nz (cairo_t *cr, int width, int height, int loops)
-{
- return draw_random (cr, CAIRO_FILL_RULE_WINDING, width, height, loops);
-}
-
-static cairo_time_t
-random_curve_eo (cairo_t *cr, int width, int height, int loops)
-{
- return draw_random_curve (cr, CAIRO_FILL_RULE_EVEN_ODD, width, height, loops);
-}
-
-static cairo_time_t
-random_curve_nz (cairo_t *cr, int width, int height, int loops)
-{
- return draw_random_curve (cr, CAIRO_FILL_RULE_WINDING, width, height, loops);
-}
-
-cairo_bool_t
-intersections_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "intersections", NULL);
-}
-
-void
-intersections (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "intersections-nz-fill", random_nz, NULL);
- cairo_perf_run (perf, "intersections-eo-fill", random_eo, NULL);
-
- cairo_perf_run (perf, "intersections-nz-curve-fill", random_curve_nz, NULL);
- cairo_perf_run (perf, "intersections-eo-curve-fill", random_curve_eo, NULL);
-}
diff --git a/perf/micro/line.c b/perf/micro/line.c
deleted file mode 100644
index 3ed5f8dac..000000000
--- a/perf/micro/line.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-horizontal (cairo_t *cr, int width, int height, int loops)
-{
- double h = height/2 + .5;
-
- cairo_move_to (cr, 0, h);
- cairo_line_to (cr, width, h);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-horizontal_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return horizontal (cr, width, height, loops);
-}
-
-static cairo_time_t
-horizontal_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return horizontal (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_horizontal (cairo_t *cr, int width, int height, int loops)
-{
- double h = height/2;
-
- cairo_move_to (cr, 0, h);
- cairo_line_to (cr, width, h+1);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-nearly_horizontal_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return nearly_horizontal (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_horizontal_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return nearly_horizontal (cr, width, height, loops);
-}
-
-
-static cairo_time_t
-vertical (cairo_t *cr, int width, int height, int loops)
-{
- double w = width/2 + .5;
-
- cairo_move_to (cr, w, 0);
- cairo_line_to (cr, w, height);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-vertical_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return vertical (cr, width, height, loops);
-}
-
-static cairo_time_t
-vertical_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return vertical (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_vertical (cairo_t *cr, int width, int height, int loops)
-{
- double w = width/2;
-
- cairo_move_to (cr, w, 0);
- cairo_line_to (cr, w+1, height);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-nearly_vertical_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return nearly_vertical (cr, width, height, loops);
-}
-
-static cairo_time_t
-nearly_vertical_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return nearly_vertical (cr, width, height, loops);
-}
-
-
-static cairo_time_t
-diagonal (cairo_t *cr, int width, int height, int loops)
-{
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, width, height);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-diagonal_hair (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return diagonal (cr, width, height, loops);
-}
-
-static cairo_time_t
-diagonal_wide (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return diagonal (cr, width, height, loops);
-}
-
-cairo_bool_t
-line_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "line", NULL);
-}
-
-void
-line (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
-
- cairo_perf_run (perf, "line-hh", horizontal_hair, NULL);
- cairo_perf_run (perf, "line-hw", horizontal_wide, NULL);
- cairo_perf_run (perf, "line-nhh", nearly_horizontal_hair, NULL);
- cairo_perf_run (perf, "line-nhw", nearly_horizontal_wide, NULL);
-
- cairo_perf_run (perf, "line-vh", vertical_hair, NULL);
- cairo_perf_run (perf, "line-vw", vertical_wide, NULL);
- cairo_perf_run (perf, "line-nvh", nearly_vertical_hair, NULL);
- cairo_perf_run (perf, "line-nvw", nearly_vertical_wide, NULL);
-
- cairo_perf_run (perf, "line-dh", diagonal_hair, NULL);
- cairo_perf_run (perf, "line-dw", diagonal_wide, NULL);
-}
diff --git a/perf/micro/long-dashed-lines.c b/perf/micro/long-dashed-lines.c
deleted file mode 100644
index ba66a4af4..000000000
--- a/perf/micro/long-dashed-lines.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
-/*
- * Copyright © 2007 Mozilla Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Vladimir Vukicevic <vladimir@pobox.com>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_long_dashed_lines (cairo_t *cr, int width, int height, int loops)
-{
- double dash[2] = { 2.0, 2.0 };
- int i;
-
- cairo_save (cr);
- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
- cairo_paint (cr);
-
- cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
- cairo_set_dash (cr, dash, 2, 0.0);
-
- cairo_new_path (cr);
- cairo_set_line_width (cr, 1.0);
-
- for (i = 0; i < height-1; i++) {
- double y0 = (double) i + 0.5;
- cairo_move_to (cr, 0.0, y0);
- cairo_line_to (cr, width, y0);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-long_dashed_lines_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "long-dashed-lines", NULL);
-}
-
-void
-long_dashed_lines (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "long-dashed-lines", do_long_dashed_lines, NULL);
-}
diff --git a/perf/micro/long-lines.c b/perf/micro/long-lines.c
deleted file mode 100644
index a0d134c2d..000000000
--- a/perf/micro/long-lines.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-/* This test case is designed to illustrate a performance bug in
- * drawing very long lines, where most of the line is out of bounds of
- * the destination surface, (but some portion of the line is
- * visibile). These results are in the "long-lines-uncropped" report.
- *
- * For comparison, this test also renders the visible portions of the
- * same lines, (this is the "long-lines-cropped" report).
- */
-
-typedef enum {
- LONG_LINES_CROPPED = 0x1,
- LONG_LINES_ONCE = 0x2,
-} long_lines_crop_t;
-#define NUM_LINES 20
-#define LONG_FACTOR 50.0
-
-static cairo_time_t
-do_long_lines (cairo_t *cr, int width, int height, int loops, long_lines_crop_t crop)
-{
- int i;
- double x, y, dx, dy, min_x, min_y, max_x, max_y;
- double outer_width, outer_height;
-
- cairo_save (cr);
-
- cairo_translate (cr, width / 2, height / 2);
-
- if (crop & LONG_LINES_CROPPED) {
- outer_width = width;
- outer_height = height;
- cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); /* green */
- } else {
- outer_width = LONG_FACTOR * width;
- outer_height = LONG_FACTOR * height;
- cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); /* red */
- }
-
- min_x = x = - outer_width / 2.0;
- min_y = y = - outer_height / 2.0;
- max_x = outer_width / 2.0;
- max_y = outer_height / 2.0;
- dx = outer_width / NUM_LINES;
- dy = outer_height / NUM_LINES;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- for (i = 0; i <= NUM_LINES; i++) {
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, x, min_y);
- if ((crop & LONG_LINES_ONCE) == 0)
- cairo_stroke (cr);
-
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, x, max_y);
- if ((crop & LONG_LINES_ONCE) == 0)
- cairo_stroke (cr);
-
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, min_x, y);
- if ((crop & LONG_LINES_ONCE) == 0)
- cairo_stroke (cr);
-
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, max_x, y);
- if ((crop & LONG_LINES_ONCE) == 0)
- cairo_stroke (cr);
-
- x += dx;
- y += dy;
- }
- if (crop & LONG_LINES_ONCE)
- cairo_stroke (cr);
- }
-
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-long_lines_uncropped (cairo_t *cr, int width, int height, int loops)
-{
- return do_long_lines (cr, width, height, loops, 0);
-}
-
-static cairo_time_t
-long_lines_uncropped_once (cairo_t *cr, int width, int height, int loops)
-{
- return do_long_lines (cr, width, height, loops, LONG_LINES_ONCE);
-}
-
-static cairo_time_t
-long_lines_cropped (cairo_t *cr, int width, int height, int loops)
-{
- return do_long_lines (cr, width, height, loops, LONG_LINES_CROPPED);
-}
-
-static cairo_time_t
-long_lines_cropped_once (cairo_t *cr, int width, int height, int loops)
-{
- return do_long_lines (cr, width, height, loops, LONG_LINES_CROPPED | LONG_LINES_ONCE);
-}
-
-cairo_bool_t
-long_lines_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "long-lines", NULL);
-}
-
-void
-long_lines (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "long-lines-uncropped", long_lines_uncropped, NULL);
- cairo_perf_run (perf, "long-lines-uncropped-once", long_lines_uncropped_once, NULL);
- cairo_perf_run (perf, "long-lines-cropped", long_lines_cropped, NULL);
- cairo_perf_run (perf, "long-lines-cropped-once", long_lines_cropped_once, NULL);
-}
diff --git a/perf/micro/many-curves.c b/perf/micro/many-curves.c
deleted file mode 100644
index f985d349a..000000000
--- a/perf/micro/many-curves.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_many_curves_stroked (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- cairo_move_to (cr, uniform_random (0, width), uniform_random (0, height));
- for (count = 0; count < 1000; count++) {
- double x1 = uniform_random (0, width);
- double x2 = uniform_random (0, width);
- double x3 = uniform_random (0, width);
- double y1 = uniform_random (0, height);
- double y2 = uniform_random (0, height);
- double y3 = uniform_random (0, height);
- cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_curves_hair_stroked (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- return do_many_curves_stroked (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_many_curves_wide_stroked (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 5.);
- return do_many_curves_stroked (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_many_curves_filled (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double x0 = uniform_random (0, width);
- double x1 = uniform_random (0, width);
- double x2 = uniform_random (0, width);
- double x3 = uniform_random (0, width);
- double xm = uniform_random (0, width);
- double xn = uniform_random (0, width);
- double y0 = uniform_random (0, height);
- double y1 = uniform_random (0, height);
- double y2 = uniform_random (0, height);
- double y3 = uniform_random (0, height);
- double ym = uniform_random (0, height);
- double yn = uniform_random (0, height);
- cairo_move_to (cr, xm, ym);
- cairo_curve_to (cr, x1, y1, x2, y2, xn, yn);
- cairo_curve_to (cr, x3, y3, x0, y0, xm, ym);
- cairo_close_path (cr);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-many_curves_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "many-curves", NULL);
-}
-
-void
-many_curves (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
-
- cairo_perf_run (perf, "many-curves-hair-stroked", do_many_curves_hair_stroked, NULL);
- cairo_perf_run (perf, "many-curves-wide-stroked", do_many_curves_wide_stroked, NULL);
- cairo_perf_run (perf, "many-curves-filled", do_many_curves_filled, NULL);
-}
diff --git a/perf/micro/many-fills.c b/perf/micro/many-fills.c
deleted file mode 100644
index 9d3fd6435..000000000
--- a/perf/micro/many-fills.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-
-/* This is a variant on many strokes where we precompute
- * a simplified stroke-to-path.
- * When we have a real stroke-to-path, it would useful to compare the cost
- * of stroking vs filling the "identical" paths.
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_many_fills_ha (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double y = floor (uniform_random (0, height));
- double x = floor (uniform_random (0, width));
- cairo_rectangle (cr, x, y, ceil (uniform_random (0, width)) - x, 1);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_fills_h (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double y = uniform_random (0, height);
- double x = uniform_random (0, width);
- cairo_rectangle (cr, x, y, uniform_random (0, width) - x, 1);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_fills_va (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double x = floor (uniform_random (0, width));
- double y = floor (uniform_random (0, height));
- cairo_rectangle (cr, x, y, 1, ceil (uniform_random (0, height) - y));
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_fills_v (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double x = uniform_random (0, width);
- double y = uniform_random (0, height);
- cairo_rectangle (cr, x, y, 1, uniform_random (0, height) - y);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_fills (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- /* lots and lots of overlapping stroke-like fills */
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- cairo_save (cr);
- cairo_translate (cr,
- uniform_random (0, width),
- uniform_random (0, height));
- cairo_rotate (cr, uniform_random (-M_PI,M_PI));
- cairo_rectangle (cr, 0, 0, uniform_random (0, width), 1);
- cairo_restore (cr);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-many_fills_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "many-fills", NULL);
-}
-
-void
-many_fills (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "many-fills-halign", do_many_fills_ha, NULL);
- cairo_perf_run (perf, "many-fills-valign", do_many_fills_va, NULL);
- cairo_perf_run (perf, "many-fills-horizontal", do_many_fills_h, NULL);
- cairo_perf_run (perf, "many-fills-vertical", do_many_fills_v, NULL);
- cairo_perf_run (perf, "many-fills-random", do_many_fills, NULL);
-}
diff --git a/perf/micro/many-strokes.c b/perf/micro/many-strokes.c
deleted file mode 100644
index 9aeb393de..000000000
--- a/perf/micro/many-strokes.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_many_strokes_ha (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double h = floor (uniform_random (0, height)) + .5;
- cairo_move_to (cr, floor (uniform_random (0, width)), h);
- cairo_line_to (cr, ceil (uniform_random (0, width)), h);
- }
-
- cairo_set_line_width (cr, 1.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_strokes_h (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double h = uniform_random (0, height);
- cairo_move_to (cr, uniform_random (0, width), h);
- cairo_line_to (cr, uniform_random (0, width), h);
- }
-
- cairo_set_line_width (cr, 1.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_strokes_va (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double v = floor (uniform_random (0, width)) + .5;
- cairo_move_to (cr, v, floor (uniform_random (0, height)));
- cairo_line_to (cr, v, ceil (uniform_random (0, height)));
- }
-
- cairo_set_line_width (cr, 1.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_strokes_v (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double v = uniform_random (0, width);
- cairo_move_to (cr, v, uniform_random (0, height));
- cairo_line_to (cr, v, uniform_random (0, height));
- }
-
- cairo_set_line_width (cr, 1.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_many_strokes (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- /* lots and lots of overlapping strokes */
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- cairo_line_to (cr,
- uniform_random (0, width),
- uniform_random (0, height));
- }
-
- cairo_set_line_width (cr, 1.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-many_strokes_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "many-strokes", NULL);
-}
-
-void
-many_strokes (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "many-strokes-halign", do_many_strokes_ha, NULL);
- cairo_perf_run (perf, "many-strokes-valign", do_many_strokes_va, NULL);
- cairo_perf_run (perf, "many-strokes-horizontal", do_many_strokes_h, NULL);
- cairo_perf_run (perf, "many-strokes-vertical", do_many_strokes_v, NULL);
- cairo_perf_run (perf, "many-strokes-random", do_many_strokes, NULL);
-}
diff --git a/perf/micro/mask.c b/perf/micro/mask.c
deleted file mode 100644
index 11a3ba730..000000000
--- a/perf/micro/mask.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- * Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_mask_solid (cairo_t *cr, int width, int height, int loops)
-{
- cairo_pattern_t *mask;
-
- mask = cairo_pattern_create_rgba (0, 0, 0, .5);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_surface_t *
-init_surface (cairo_surface_t *surface, int width, int height)
-{
- cairo_t *cr;
-
- cr = cairo_create (surface);
- cairo_surface_destroy (surface);
-
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_set_source_rgb (cr, 0, 0, 0); /* back */
- cairo_paint (cr);
-
- cairo_set_source_rgba (cr, 1, 1, 1, 0.5); /* 50% */
- cairo_new_path (cr);
- cairo_rectangle (cr, 0, 0, width/2.0, height/2.0);
- cairo_rectangle (cr, width/2.0, height/2.0, width/2.0, height/2.0);
- cairo_fill (cr);
-
- surface = cairo_surface_reference (cairo_get_target (cr));
- cairo_destroy (cr);
-
- return surface;
-}
-
-static cairo_time_t
-do_mask_image (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface;
- cairo_pattern_t *mask;
-
- surface = cairo_image_surface_create (CAIRO_FORMAT_A8, width, height);
- mask = cairo_pattern_create_for_surface (init_surface (surface,
- width,
- height));
- cairo_surface_destroy (surface);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_image_half (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface;
- cairo_pattern_t *mask;
- cairo_matrix_t matrix;
-
- surface = cairo_image_surface_create (CAIRO_FORMAT_A8, width, height);
- mask = cairo_pattern_create_for_surface (init_surface (surface,
- width,
- height));
- cairo_surface_destroy (surface);
- cairo_matrix_init_scale (&matrix, .5, .5);
- cairo_pattern_set_matrix (mask, &matrix);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_image_double (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface;
- cairo_pattern_t *mask;
- cairo_matrix_t matrix;
-
- surface = cairo_image_surface_create (CAIRO_FORMAT_A8, width, height);
- mask = cairo_pattern_create_for_surface (init_surface (surface,
- width,
- height));
- cairo_surface_destroy (surface);
- cairo_matrix_init_scale (&matrix, 2., 2.);
- cairo_pattern_set_matrix (mask, &matrix);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_similar (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface;
- cairo_pattern_t *mask;
-
- surface = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_ALPHA, width, height);
- mask = cairo_pattern_create_for_surface (init_surface (surface,
- width,
- height));
- cairo_surface_destroy (surface);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_similar_half (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface;
- cairo_pattern_t *mask;
- cairo_matrix_t matrix;
-
- surface = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_ALPHA, width, height);
- mask = cairo_pattern_create_for_surface (init_surface (surface,
- width,
- height));
- cairo_surface_destroy (surface);
- cairo_matrix_init_scale (&matrix, .5, .5);
- cairo_pattern_set_matrix (mask, &matrix);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_similar_double (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface;
- cairo_pattern_t *mask;
- cairo_matrix_t matrix;
-
- surface = cairo_surface_create_similar (cairo_get_group_target (cr),
- CAIRO_CONTENT_ALPHA, width, height);
- mask = cairo_pattern_create_for_surface (init_surface (surface,
- width,
- height));
- cairo_surface_destroy (surface);
- cairo_matrix_init_scale (&matrix, 2., 2.);
- cairo_pattern_set_matrix (mask, &matrix);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_linear (cairo_t *cr, int width, int height, int loops)
-{
- cairo_pattern_t *mask;
-
- mask = cairo_pattern_create_linear (0.0, 0.0, width, height);
- cairo_pattern_add_color_stop_rgba (mask, 0.0, 0, 0, 0, 0.5); /* 50% */
- cairo_pattern_add_color_stop_rgba (mask, 0.0, 0, 0, 0, 1.0); /* 100% */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mask_radial (cairo_t *cr, int width, int height, int loops)
-{
- cairo_pattern_t *mask;
-
- mask = cairo_pattern_create_radial (width/2.0, height/2.0, 0.0,
- width/2.0, height/2.0, width/2.0);
- cairo_pattern_add_color_stop_rgba (mask, 0.0, 0, 0, 0, 0.5); /* 50% */
- cairo_pattern_add_color_stop_rgba (mask, 0.0, 0, 0, 0, 1.0); /* 100% */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask (cr, mask);
-
- cairo_perf_timer_stop ();
-
- cairo_pattern_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-mask_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "mask", NULL);
-}
-
-void
-mask (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- if (! cairo_perf_can_run (perf, "mask", NULL))
- return;
-
- cairo_perf_cover_sources_and_operators (perf, "mask-solid",
- do_mask_solid, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-image",
- do_mask_image, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-image-half",
- do_mask_image_half, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-image-double",
- do_mask_image_double, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-similar",
- do_mask_similar, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-similar-half",
- do_mask_similar_half, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-similar-double",
- do_mask_similar_double, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-linear",
- do_mask_linear, NULL);
- cairo_perf_cover_sources_and_operators (perf, "mask-radial",
- do_mask_radial, NULL);
-}
diff --git a/perf/micro/mosaic.c b/perf/micro/mosaic.c
deleted file mode 100644
index ed30ae555..000000000
--- a/perf/micro/mosaic.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright © 2006 Joonas Pihlaja
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Joonas Pihlaja <jpihlaja@cc.helsinki.fi>
- */
-#include "cairo-perf.h"
-
-/* Options passed in flags to mosaic_perform(): */
-#define MOSAIC_FILL 1 /* do rasterise */
-#define MOSAIC_TESSELLATE 0 /* just tessellate */
-#define MOSAIC_CURVE_TO 2 /* use curve bounded regions */
-#define MOSAIC_LINE_TO 0 /* use line bounded regions */
-
-struct mosaic_region {
- unsigned rgb; /* colour of this region in 0xRRGGBB format */
- unsigned ncurves; /* number of boundary curves. */
-};
-
-struct mosaic_region_iter {
- int do_curves;
- struct mosaic_region const *region;
- double const *points;
-};
-
-#include "mosaic.h"
-
-static void
-mosaic_region_iter_init (struct mosaic_region_iter *iter, int do_curves)
-{
- iter->region = mosaic_regions;
- iter->points = mosaic_curve_points;
- iter->do_curves = do_curves;
-}
-
-/* Create the next closed region as a path. */
-static int
-mosaic_next_path (cairo_t *cr, struct mosaic_region_iter *iter)
-{
- double const *points = iter->points;
- unsigned i;
- unsigned ncurves = iter->region->ncurves;
- if (0 == ncurves) {
- return 0;
- }
-
- cairo_new_path (cr);
- cairo_move_to (cr, points[0], points[1]);
- points += 2;
- for (i=0; i < ncurves; i++, points += 6) {
- if (iter->do_curves) {
- cairo_curve_to (cr,
- points[0], points[1],
- points[2], points[3],
- points[4], points[5]);
- }
- else {
- cairo_line_to (cr,
- points[4], points[5]);
- }
- }
- cairo_close_path (cr);
- {
- unsigned rgb = iter->region->rgb;
- double r = ((rgb >> 16) & 255) / 255.0;
- double g = ((rgb >> 8) & 255) / 255.0;
- double b = ((rgb >> 0) & 255) / 255.0;
- cairo_set_source_rgb (cr, r, g, b);
- }
-
- iter->points = iter->points + 2*(1 + 3*iter->region->ncurves);
- iter->region++;
- return 1;
-}
-
-static cairo_time_t
-mosaic_perform(cairo_t *cr, unsigned flags, int width, int height, int loops)
-{
- struct mosaic_region_iter iter;
-
- /* Scale to fit the window.*/
- double minx = -40.7;
- double maxx = 955.1;
- double miny = -88.4;
- double maxy = 884.5;
-
- cairo_identity_matrix (cr);
-
- if (flags & MOSAIC_FILL) {
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_fill (cr);
- }
-
- cairo_scale (cr, width / (maxx - minx) , height / (maxy - miny));
- cairo_translate (cr, -minx, -miny);
-
- /* Iterate over all closed regions in the mosaic filling or
- * tessellating them as dictated by the flags. */
-
- cairo_perf_timer_start ();
- while (loops--) {
- mosaic_region_iter_init (&iter, flags & MOSAIC_CURVE_TO);
- while (mosaic_next_path (cr, &iter)) {
- if (flags & MOSAIC_FILL) {
- cairo_fill (cr);
- }
- else {
- double x, y;
- cairo_get_current_point (cr, &x, &y);
- cairo_in_fill (cr, x, y);
- }
- }
- }
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-mosaic_fill_curves (cairo_t *cr, int width, int height, int loops)
-{
- return mosaic_perform (cr, MOSAIC_FILL | MOSAIC_CURVE_TO, width, height, loops);
-}
-
-static cairo_time_t
-mosaic_fill_lines (cairo_t *cr, int width, int height, int loops)
-{
- return mosaic_perform (cr, MOSAIC_FILL | MOSAIC_LINE_TO, width, height, loops);
-}
-
-static cairo_time_t
-mosaic_tessellate_lines (cairo_t *cr, int width, int height, int loops)
-{
- return mosaic_perform (cr, MOSAIC_TESSELLATE | MOSAIC_LINE_TO, width, height, loops);
-}
-
-static cairo_time_t
-mosaic_tessellate_curves (cairo_t *cr, int width, int height, int loops)
-{
- return mosaic_perform (cr, MOSAIC_TESSELLATE | MOSAIC_CURVE_TO, width, height, loops);
-}
-
-cairo_bool_t
-mosaic_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "mosaic", NULL);
-}
-
-void
-mosaic (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "mosaic-fill-curves", mosaic_fill_curves, NULL);
- cairo_perf_run (perf, "mosaic-fill-lines", mosaic_fill_lines, NULL);
- cairo_perf_run (perf, "mosaic-tessellate-curves", mosaic_tessellate_curves, NULL);
- cairo_perf_run (perf, "mosaic-tessellate-lines", mosaic_tessellate_lines, NULL);
-}
diff --git a/perf/micro/mosaic.h b/perf/micro/mosaic.h
deleted file mode 100644
index e106864a3..000000000
--- a/perf/micro/mosaic.h
+++ /dev/null
@@ -1,4387 +0,0 @@
-/* Synthesised data. */
-static struct mosaic_region const mosaic_regions[] = {
-{0xef55b4,7},{0xf93bc6,11},{0xf28085,5},{0x92acbc,7},
-{0x85c3b1,7},{0xc3bc79,5},{0xd09d8d,5},{0xa788cb,8},
-{0xeff90f,14},{0x976ef2,4},{0xf230d8,5},{0xe226ef,6},
-{0xf49571,9},{0xcb6cc1,4},{0xc8af80,5},{0xf71ce7,8},
-{0xd38b9a,6},{0xf70ff2,8},{0xec907e,4},{0xf44abc,5},
-{0xf42bd8,7},{0xcbbc71,5},{0xf7a45f,5},{0xb15aec,3},
-{0xfc6995,9},{0x42bef9,7},{0x83afc6,5},{0xbe9f9a,6},
-{0x95ef76,6},{0xfcc33b,20},{0xbc5ae2,5},{0x69f997,7},
-{0x9f69f2,7},{0x79bec3,7},{0xda3de2,6},{0x76dda7,6},
-{0xc888aa,7},{0xd871b1,9},{0xda29f7,14},{0xe03dda,9},
-{0xec29e2,5},{0xd82bf4,6},{0x8b8de2,6},{0xf7af52,3},
-{0x9f69f2,7},{0xf46c9a,9},{0xf74fb1,5},{0x21eaef,9},
-{0xea769a,8},{0x0feffc,5},{0xdada45,8},{0xafce7b,6},
-{0x48bef4,6},{0x9a79e5,3},{0xe2fc1c,7},{0xc3be76,9},
-{0xb9c37e,5},{0xc6b183,10},{0xa2acac,3},{0xc395a2,4},
-{0xbc88b4,7},{0xeaf41c,5},{0xea24ea,4},{0xd038f2,5},
-{0x5ae2bc,9},{0xdac15f,8},{0x5fe5b4,6},{0xce5ad3,15},
-{0xf419ec,4},{0xa7bc97,11},{0xea4ac3,6},{0xd02ef9,5},
-{0xb995aa,5},{0xef808b,6},{0xe22bea,34},{0xe24fc6,4},
-{0xef12f9,7},{0x7b9de0,8},{0x85ec85,4},{0xfc7e80,12},
-{0x9a85d8,5},{0xfc00fc,7},{0x9d90ce,5},{0xf4be45,9},
-{0xe5e52e,3},{0xfc0cef,7},{0xd83be5,8},{0x4dc6e5,5},
-{0xacda73,9},{0x4fc8e0,6},{0xbc88b6,4},{0xb4bc8b,6},
-{0xec45c6,8},{0x71d3b6,4},{0xe73dd5,5},{0x21fcda,4},
-{0xe055c6,9},{0x3becd0,8},{0x57e0c1,5},{0x71bec8,9},
-{0x8be28b,4},{0x4dddd0,9},{0xda9a85,6},{0xaa6ce2,4},
-{0x5ad5cb,9},{0x67f49d,12},{0xfc07f7,9},{0x42c8ec,16},
-{0xefc148,4},{0xda6eb1,7},{0x55bee7,4},{0xd33bea,6},
-{0x809fd8,14},{0xd82ef2,4},{0x21ddfc,5},{0x83e097,7},
-{0x8bcba2,9},{0xd864bc,8},{0xa7d87b,6},{0xc3a78d,6},
-{0xb9a79a,8},{0xd59590,3},{0xfc0af2,6},{0xe52be7,7},
-{0xce52d8,5},{0xe22bea,4},{0xe719f7,5},{0x909fcb,3},
-{0xa7da76,6},{0xdd38e5,4},{0xfc55aa,6},{0x19f2ef,6},
-{0x83da9d,5},{0x9fc892,6},{0xe51ef4,9},{0xce3dec,5},
-{0xea3dd0,7},{0x4ad3dd,6},{0x6ea2e7,5},{0xf92bd3,4},
-{0xc34aea,8},{0x2eddef,4},{0xe7799a,8},{0xe5799a,11},
-{0xe224f2,3},{0xf90af7,6},{0x61a2f4,6},{0xb67ec6,13},
-{0xe75cb4,7},{0xfcb945,16},{0xd3b173,7},{0xfc00fc,6},
-{0xd5ef33,5},{0x699df4,9},{0xf707f9,4},{0xdaea33,6},
-{0xe2dd38,3},{0xf2d036,5},{0xf248c1,6},{0xeaf21c,5},
-{0xec40cb,7},{0xf24abc,5},{0xf42bd8,4},{0xa757f9,5},
-{0xd02ef9,6},{0xfc0cf2,7},{0xb16cda,5},{0xea36d8,8},
-{0xd036f4,7},{0xb648fc,3},{0xea4dc1,4},{0x64c8cb,7},
-{0xfc05f7,3},{0xfc00fc,4},{0xf4a75f,6},{0xc85ad5,5},
-{0xd873ac,5},{0xd5a77b,11},{0xe7c84a,4},{0xec19f4,7},
-{0xc864ce,7},{0xcece5c,5},{0xe08b8d,5},{0xd84dd3,3},
-{0x07f9f7,9},{0x5cefac,3},{0xfc02f9,4},{0xd048e0,8},
-{0xef55b6,4},{0xa269ec,7},{0xec12f9,3},{0xd380a4,11},
-{0x5fcbd0,6},{0x90c1a7,5},{0x95dd85,5},{0xceda4f,9},
-{0x4fb9f2,14},{0xb65aea,7},{0xea838d,5},{0xf917ea,4},
-{0xc833fc,9},{0xe252c3,9},{0xef0ffc,7},{0x1cf2ec,9},
-{0x9f6cef,4},{0xf73dc6,12},{0x90b6b4,5},{0xb44ff7,7},
-{0xea2be2,12},{0xd02efc,17},{0xa276e2,4},{0x79c1c1,3},
-{0xc855dd,9},{0xb1d571,8},{0xb645fc,6},{0xd03bef,6},
-{0x42eccb,9},{0xea67aa,5},{0x9079ef,6},{0x9de773,7},
-{0xe55abc,6},{0xf421e5,3},{0x5cf9a4,6},{0xc373c1,5},
-{0x5fe2b6,4},{0xea24ec,6},{0x9af967,4},{0xf7be45,5},
-{0xd333f4,5},{0xc6d061,8},{0xb96cd3,8},{0xda64b9,6},
-{0xe79779,4},{0xac67e7,6},{0xcb67c8,4},{0xa45cf7,3},
-{0xd3859f,3},{0xd857c8,4},{0x42c1f7,8},{0xaf61e7,6},
-{0xea14fc,6},{0xda33ea,10},{0x5af2af,5},{0xbe40f9,3},
-{0x9de773,3},{0xe72be5,4},{0x4ae7c6,5},{0xaa88c8,8},
-{0x36f9cb,3},{0xc1a790,8},{0xf905fc,5},{0xbcaa95,6},
-{0x839dda,3},{0xfc00fc,6},{0xb6d86c,3},{0xdd40da,6},
-{0xb46cda,7},{0x839fd5,4},{0xc167d3,13},{0xf20ff7,9},
-{0xe024f4,9},{0xf41ee5,4},{0x909ad0,10},{0xb1d376,8},
-{0xce2efc,5},{0x29d5f9,7},{0xd0b96e,6},{0xdd69b4,5},
-{0xfc05f7,5},{0xdd26f7,4},{0xea1eef,6},{0xb64df7,9},
-{0x21e5f2,3},{0x4fd8d0,6},{0xd345e0,7},{0xfc00fc,3},
-{0xe569ac,5},{0xecb655,11},{0xfc5aa2,9},{0xb4d571,7},
-{0xaa57f7,6},{0xfc00fc,7},{0xe729ea,10},{0xea24ea,11},
-{0xb14df9,5},{0xf707fc,7},{0x5cd8c3,5},{0xea17f9,9},
-{0xc3d364,6},{0xa77ed3,4},{0x9569f9,8},{0x0ff4f4,4},
-{0xbc9aa4,7},{0xc140f7,10},{0xf705fc,8},{0xb44df9,4},
-{0xa479dd,5},{0xf705fc,5},{0xce8d9d,5},{0xf905f9,5},
-{0xdd2bef,7},{0xea14f9,5},{0xddbc61,5},{0xc13dfc,8},
-{0x79c8b6,10},{0xf79a67,6},{0xb4a79f,12},{0x97a7bc,7},
-{0xb9c17e,4},{0xf430d5,3},{0x2ee0ea,7},{0xf919e7,4},
-{0xeada33,9},{0xa2da7e,7},{0x8bec80,6},{0xf412f4,5},
-{0xa767ec,3},{0xd824fc,7},{0xe224f2,3},{0xfc07f7,4},
-{0xfc00fc,3},{0xe55cb6,8},{0xf9768b,7},{0xe5b45f,3},
-{0xd5978b,4},{0xf917e7,5},{0xf70ff4,7},{0x95e283,6},
-{0xb4b98d,5},{0xc83bf4,8},{0x9f88d3,7},{0xa473e0,9},
-{0x9569fc,10},{0x926cf9,7},{0xef14f4,7},{0xf7679a,4},
-{0xaa80ce,9},{0x45f9b9,5},{0xb4a2a2,10},{0xac88c6,5},
-{0xe75ab6,6},{0xa2fc5a,3},{0xc65cd8,7},{0x64e0b6,5},
-{0xfc6992,7},{0xf717ec,4},{0xf438ce,10},{0xf755ac,4},
-{0xf7aa57,6},{0xb9b688,3},{0xcb4de2,4},{0xf9f70a,9},
-{0x92d392,8},{0xef2be0,7},{0x92a7be,4},{0xa276e2,4},
-{0xc34fe5,5},{0xd5c164,9},{0xf219ec,4},{0xef5aaf,8},
-{0xa7c68d,6},{0xd369bc,7},{0xf912ef,4},{0xb9b48b,6},
-{0x3bc6f9,6},{0xe54ac8,5},{0xf71ce7,9},{0xbc4def,8},
-{0xe271a7,3},{0xcbc16e,5},{0x3dfcc1,3},{0x97bea2,7},
-{0xaaa4aa,13},{0x73ef95,5},{0xf74fb1,4},{0xc148ef,17},
-{0xfc26d8,4},{0xfc02fc,6},{0xb1da6c,6},{0xd5d84d,7},
-{0xf96c95,5},{0xf90fef,3},{0xea7b92,7},{0xbc4def,4},
-{0xf2a264,8},{0x40dadd,12},{0xf214f4,4},{0x38c3fc,3},
-{0xf705fc,7},{0xa29db9,3},{0xaaf25f,4},{0xdd9a83,12},
-{0xc188b1,6},{0xa27bda,9},{0x36dde5,4},{0x85bcb9,7},
-{0xfc00fc,5},{0xe76ca4,4},{0x95b6ac,6},{0xb6d071,7},
-{0xc857d8,3},{0xfc2bd3,4},{0xfc5aa4,4},{0xf417ec,5},
-{0xb471d3,7},{0x92b1b6,4},{0x6c90fc,7},{0x5abce2,7},
-{0xcb55d8,3},{0xce30f9,5},{0xea7b95,3},{0xec17f7,6},
-{0xf70ff4,3},{0xaa73dd,9},{0x9d69f4,3},{0xb457ef,6},
-{0xf236d0,6},{0x64e0b4,7},{0xddcb52,4},{0xd0d355,7},
-{0x5fd5c3,6},{0xf42bd8,12},{0x55e2c1,4},{0xb1b492,4},
-{0xdd4dd0,4},{0xbc88b6,3},{0xea21ec,4},{0xf7649d,8},
-{0xb16cda,3},{0x9fa4b6,8},{0xea17f9,4},{0x1efce0,3},
-{0xbec179,7},{0xbeb18b,6},{0x9da4b6,6},{0x48b4fc,4},
-{0x7bfc83,14},{0xacf25c,10},{0xe0d842,4},{0xf9768b,5},
-{0xf90ff2,7},{0xfc00fc,8},{0xf20ff7,5},{0xec7e90,7},
-{0xbc42f9,3},{0xf712ef,5},{0xf902fc,6},{0xf77e83,7},
-{0xb1b197,5},{0xda6cb4,7},{0xf4a264,7},{0xa78dc6,6},
-{0xf21cea,4},{0xa48dc8,6},{0x6997f9,5},{0x67d3be,5},
-{0x4ad0e0,6},{0xcbbe6e,6},{0xcb76b6,10},{0xd030f9,6},
-{0xa29fb6,6},{0xda24fc,5},{0xf4bc48,3},{0xd0909a,6},
-{0xf252b6,8},{0x6cb4da,4},{0xdd40dd,11},{0x8b71fc,9},
-{0x80c8af,7},{0xb15fe7,4},{0x79ef90,6},{0x71b1d8,7},
-{0x61a4f2,9},{0x42dadd,6},{0xaf4ffc,3},{0x9a79e7,5},
-{0xea17f7,6},{0xc89f92,4},{0xb6d869,12},{0xda2eef,4},
-{0xf72ed5,6},{0xe057c3,6},{0xb6b190,6},{0xda48d5,5},
-{0xe0a476,3},{0xfce01c,6},{0x9dbe9f,13},{0xafce7e,4},
-{0xf905fc,6},{0xfc0cef,5},{0x9facaf,6},{0xb6af95,6},
-{0x52ced8,6},{0xd373b4,3},{0xce5cd0,8},{0xe752c1,5},
-{0xf7ac55,8},{0x7bbec1,6},{0xb4d571,4},{0xf90af7,5},
-{0xc833fc,7},{0xbe4dec,8},{0x92beaa,8},{0xfcb945,7},
-{0xc1d067,3},{0xdd45d8,7},{0xceb971,3},{0xf44ab9,4},
-{0xbeac8d,4},{0xf2af5a,15},{0xe05ac1,11},{0xd38b9d,4},
-{0xec0ffc,4},{0x80ec8d,7},{0xd0af7b,6},{0xef5cac,5},
-{0xdaa776,4},{0xd052d8,5},{0xb461e5,8},{0xef8388,7},
-{0xbea297,8},{0xce83a7,5},{0xda2ef2,3},{0x73b6ce,5},
-{0x83ec8b,9},{0xc840f2,7},{0xfc4faf,8},{0xfc14e7,4},
-{0xe742d0,9},{0x52aff7,4},{0xf214f4,4},{0x26f7da,5},
-{0xf2b94d,6},{0xe02eea,6},{0x76fc85,3},{0x858de7,4},
-{0xbc97a4,6},{0xd8aa79,4},{0x9d73ea,4},{0xdda279,5},
-{0xafc385,7},{0x33dde7,6},{0x64acea,8},{0xacce80,7},
-{0xef26e2,7},{0xb957e7,4},{0xdad548,4},{0xaf57f4,5},
-{0x9f73e5,3},{0xeae02e,7},{0xf70af7,8},{0xfc00fc,4},
-{0xea6ca4,6},{0x8885ec,3},{0xe23dda,4},{0xb461e5,10},
-{0xdd928b,6},{0x76cbb6,7},{0xfc00fc,5},{0xce8d9d,8},
-{0xafb692,12},{0xe79083,7},{0xfc0af2,3},{0xf926d8,8},
-{0xe219fc,5},{0xe7bc55,5},{0xcebc6e,3},{0xda73aa,4},
-{0xfc00fc,4},{0x52dace,5},{0xbcd864,6},{0x67e7ac,4},
-{0x33f9cb,3},{0x8bafc1,11},{0xd871af,6},{0xe78390,10},
-{0xb688bc,8},{0x5addc1,6},{0xf2d036,4},{0xf70ff2,9},
-{0xf4ea19,9},{0xfc02f9,6},{0x839fd8,3},{0xdd4dce,5},
-{0xec3dce,6},{0xcea783,6},{0xcbe745,5},{0xc1b483,7},
-{0x799fe0,5},{0xd340e7,7},{0x29ddf2,3},{0x73daac,6},
-{0xea33da,5},{0xe224f2,3},{0xd34fd5,5},{0xe245d3,8},
-{0xfc1edd,10},{0x3bf2cb,4},{0xdd9f7e,26},{0xe02eec,5},
-{0xf47195,4},{0xa461f4,5},{0x3ddae0,3},{0xaf5fea,6},
-{0xbccb73,6},{0xea26ea,8},{0xd82bf7,6},{0xac6ce0,7},
-{0xe524ef,4},{0xb6da69,6},{0xf224e2,5},{0xb95ce5,7},
-{0x73a4e0,7},{0xa4e076,7},{0xfc02f9,8},{0xec1eec,4},
-{0xf7da29,6},{0xc369ce,6},{0xd5c65c,9},{0xe51ef4,4},
-{0xf2a264,4},{0x809ddd,5},{0xd045e2,7},{0xaac888,6},
-{0xb44af9,3},{0xd84ad8,7},{0xf4ef14,5},{0x3bf7c8,5},
-{0xe730e0,4},{0x97b6ac,7},{0x8bda95,5},{0x88ec83,8},
-{0xece529,8},{0x9a80dd,10},{0xf412f4,7},{0x36efd5,6},
-{0xf95ca4,9},{0xd838e7,6},{0x9a69f7,7},{0xf730d3,4},
-{0xd526fc,5},{0x9f76e2,6},{0xe28395,8},{0xecaa61,6},
-{0x4ff4b4,7},{0xd079af,7},{0xa469ea,10},{0xfc21da,7},
-{0xb471d5,6},{0x7b88f7,4},{0xfc6797,4},{0x9daab4,5},
-{0x29f2dd,7},{0x8388ec,7},{0x4df9b1,4},{0xeaf21e,5},
-{0xf4c340,10},{0xf212f7,3},{0xf407fc,5},{0x4fb9ef,9},
-{0xd3b471,6},{0xef4dbe,12},{0x4af4bc,7},{0xe224f2,6},
-{0x36d0f2,8},{0xf707fc,4},{0xfc8d71,9},{0x95bea4,6},
-{0x90ef7b,4},{0x5adac6,5},{0x97b9a7,4},{0xc3c671,6},
-{0xfc12ec,5},{0xea1ef2,5},{0x8dd09d,4},{0xd82bf7,7},
-{0xb18dbc,7},{0xbc64da,6},{0xf28d7b,4},{0xef19ef,5},
-{0xc1e555,6},{0xfc3bc3,6},{0x9f88d3,5},{0xc3ec48,9},
-{0xc8979a,5},{0x5cc6d8,4},{0xf78080,6},{0xb17bcb,8},
-{0xea12fc,6},{0xc195a2,7},{0xef33d8,3},{0xa783ce,3},
-{0xf40af9,5},{0xa288d0,6},{0xf248be,4},{0x14e7fc,5},
-{0x83d3a4,8},{0xb4cb79,6},{0xbc7ebe,3},{0xfc8873,6},
-{0xe038e0,6},{0xc3ef48,6},{0xa25afc,10},{0xc1a792,6},
-{0x8d90dd,9},{0xc1be7b,5},{0x8bec80,5},{0xa4ef64,5},
-{0x38f7c8,11},{0xaf6eda,4},{0xd073b4,5},{0x79ceb4,7},
-{0xd5e540,6},{0xfc0fec,5},{0xf917ea,7},{0x64c8cb,4},
-{0x69e7a7,6},{0xa77ed3,5},{0xe52be7,6},{0x5aaaf4,7},
-{0xcb85a7,5},{0x8392e2,4},{0x5cb4ea,6},{0xe729e7,6},
-{0xc873bc,5},{0xeabc52,7},{0xf438ce,7},{0xea48c8,5},
-{0xef17f4,4},{0xfc00fc,6},{0xf97b85,14},{0x67ace7,3},
-{0xf452b1,7},{0xe2e038,4},{0xa4a7af,5},{0xddb469,3},
-{0xf21cec,7},{0x7bbec1,3},{0xda38e5,8},{0xc6a292,9},
-{0x6ecebc,9},{0x8dda90,4},{0xf921e0,8},{0xc88da4,5},
-{0x92aabc,4},{0x9a9dc3,5},{0x8dd895,4},{0x64d3c3,9},
-{0xa2f95f,7},{0xdd36e5,8},{0x83e790,11},{0xef26e2,5},
-{0xef55b4,9},{0x5fc3d8,6},{0xfc57a4,7},{0x9785dd,5},
-{0x809ddd,4},{0xc66cc8,8},{0xf236d3,5},{0xd338ef,6},
-{0xd8839f,4},{0xef30d8,3},{0x9a9ac6,5},{0xfc05f9,11},
-{0x958bda,11},{0xf902fc,8},{0xbe42f9,4},{0xbce557,6},
-{0xef4fb9,6},{0xf9af52,5},{0x97d38d,5},{0xf902fc,7},
-{0xf4a261,4},{0xd88897,7},{0x92e77e,7},{0x6c9df2,6},
-{0xce85a4,4},{0x9ae07e,8},{0xb1f255,8},{0xc6929f,6},
-{0xf2af5a,10},{0xe2977e,5},{0xe5cb4a,5},{0xfc14e7,3},
-{0xc14aef,3},{0xaff257,3},{0xe21cf9,11},{0xd05ccb,5},
-{0xf2ec1c,8},{0xb4b98b,9},{0xc183b6,3},{0xb455f2,7},
-{0x83aace,4},{0xe51cf9,4},{0xdd4fce,4},{0xb47ec8,3},
-{0x92da8b,4},{0xecb952,4},{0xf70af7,6},{0x7bbcc1,6},
-{0xf40cf9,5},{0xe2ce48,5},{0xf7b14f,5},{0xdd40da,4},
-{0x4fb9f2,7},{0x6eb1da,5},{0x9d90ce,6},{0xcb55d8,5},
-{0xd02efc,8},{0xd36eb9,6},{0xfc0cef,5},{0xe071aa,9},
-{0xe7ac67,3},{0xf4f40f,6},{0xe267af,4},{0xc3da5c,5},
-{0xb945fc,4},{0xeada33,6},{0x7197f2,7},{0xfc00fc,8},
-{0xd09d8d,5},{0x6e9fea,8},{0xd3a77e,4},{0xaa5ff2,6},
-{0xe269ac,5},{0xf426e0,6},{0xfc00fc,5},{0xec6ca2,10},
-{0xc638fc,7},{0xe54fc6,5},{0x5ac6da,3},{0xce67c6,6},
-{0xbe42f9,5},{0xce38f2,5},{0xbe5ae2,3},{0xd3ec38,8},
-{0x8b76f7,8},{0xb180c8,4},{0xd538ec,4},{0xddef2b,9},
-{0xf9c838,5},{0xf457ac,4},{0xf95aa7,7},{0xaf69e0,9},
-{0x67efa2,5},{0xa280d8,4},{0xa7d57b,7},{0xcbaf7e,4},
-{0x837bf9,4},{0xddc15c,6},{0xe221f4,3},{0xc6b480,5},
-{0xbc90af,10},{0x4dd3da,4},{0xbcb983,4},{0xe77997,7},
-{0xe05fb9,9},{0xc1b980,8},{0xdd55c6,7},{0xaf97b1,9},
-{0xec838b,4},{0xc39d9a,9},{0x6c97f7,5},{0xf7b44f,3},
-{0xb69fa4,7},{0x90ea7e,7},{0xe067b1,5},{0xd5cb5a,4},
-{0xc19a9f,8},{0xac67e7,8},{0xcee745,4},{0xf436d0,4},
-{0x73b1d5,7},{0xd3d84f,5},{0xdd42d8,5},{0xea907e,6},
-{0xc83bf4,7},{0xd84fd3,6},{0xe28890,3},{0x38e2e0,8},
-{0xec67a7,6},{0xcbc16e,8},{0x4ab1fc,7},{0x92d590,3},
-{0xaad876,4},{0xb683c1,4},{0xaa55f9,5},{0xea24ea,6},
-{0xf90fef,6},{0xf738c8,3},{0xcb5ad5,7},{0xec21ec,5},
-{0xce61c8,3},{0xa76ce7,3},{0xf41ee5,7},{0xcebe6c,3},
-{0x57dac6,9},{0xf46e97,3},{0x8be08d,7},{0xc148ef,9},
-{0xf926da,8},{0xe029ef,6},{0xfc00fc,5},{0x3dcbf2,4},
-{0xef0ffc,5},{0x95b6ac,9},{0x7be59a,5},{0xda2ef2,8},
-{0xda30ef,5},{0xfc24d8,3},{0x73d3b4,3},{0xddf229,4},
-{0x8883ef,5},{0x5aefaf,6},{0x9797cb,6},{0xcbc16c,5},
-{0xef19f2,5},{0xd3bc6c,3},{0xda5cc3,8},{0x52f9ac,7},
-{0xa7c888,4},{0x69d8b6,7},{0xbc45f7,7},{0xfc02fc,4},
-{0xb4b195,6},{0xe58d85,4},{0x9776ea,6},{0xf255b1,6},
-{0x76dda7,3},{0xe55ab9,8},{0xe230e7,5},{0x3bd0ec,5},
-{0xe219fc,6},{0xcbac83,5},{0xe548ce,7},{0xdd5cbe,3},
-{0xf412f4,5},{0xf9738d,9},{0xdd40da,4},{0x90c6a2,10},
-{0xe038e2,4},{0x6eddaf,8},{0xf23dcb,12},{0xec4fbc,6},
-{0xc8d35c,6},{0xf238d0,6},{0x90cb9f,6},{0xa46ee5,5},
-{0xaf8bbe,5},{0xc1a495,5},{0xc679b9,4},{0xec29e2,6},
-{0xf9649d,6},{0xf924da,6},{0xe224f2,5},{0x8d71f9,7},
-{0xf2cb3d,5},{0xb6cb79,4},{0xa4dd76,6},{0xe52ee5,3},
-{0xaa8bc3,3},{0x838dea,7},{0xf9ea17,5},{0x88c8aa,6},
-{0x73e0a7,5},{0xd09595,6},{0xf7d82b,10},{0xec7397,4},
-{0xfc02fc,7},{0xf72ed3,5},{0xd03dec,4},{0x80cbaf,5},
-{0xf921dd,7},{0x9fcb90,8},{0xbe95a7,4},{0x69eaa4,8},
-{0xf20ff7,5},{0x69e7a7,9},{0xf924da,3},{0xecdd30,6},
-{0xc1d861,4},{0xb967d8,5},{0xb157ef,6},{0xb9bc85,5},
-{0xb192b4,8},{0xda38e5,3},{0xea1eef,6},{0x12f7ef,4},
-{0x6e90f9,6},{0xd573b1,6},{0xdd24f7,5},{0xd5d055,7},
-{0xc86ec1,4},{0xf21ee7,7},{0xa261f4,6},{0xe555c1,4},
-{0xf78b79,6},{0xf78080,5},{0x80b4c3,7},{0xf414ef,4},
-{0xf70ff2,6},{0xea52bc,6},{0xd04ddd,7},{0xf90af4,5},
-{0xe78b88,4},{0xf29f67,6},{0x79b6c8,4},{0xa48dc8,5},
-{0x5fa4f4,4},{0xea14fc,3},{0xf23bcb,7},{0xf738cb,5},
-{0x4fb1f9,3},{0x5ae2bc,7},{0xfcac4f,5},{0xa283d3,7},
-{0xef24e7,7},{0xe5e52e,4},{0x929ace,4},{0xcb36f9,8},
-{0xea21ef,5},{0xf2d038,6},{0x48d8d8,4},{0xec40ce,6},
-{0xf90af7,5},{0xf921dd,7},{0xd8e042,5},{0x21ddf9,4},
-{0x5fb9e2,8},{0xf72ed3,4},{0xfc2ed0,5},{0xf712ef,6},
-{0x57d8cb,5},{0x19fce2,9},{0xe7f71c,9},{0x7be59a,4},
-{0x6cfc90,5},{0xec3bd0,5},{0xea26e7,8},{0x36d5ec,5},
-{0xac76d8,3},{0xa4a4b1,3},{0xef12f7,4},{0x6eb9d3,6},
-{0xe714fc,5},{0xe224f2,5},{0x3bead5,4},{0x8de783,9},
-{0x40d5e2,8},{0x9764fc,7},{0xf705fc,3},{0x8d88e2,8},
-{0xe269ac,6},{0xda33ec,7},{0xd03bec,3},{0xbe6cd0,6},
-{0x8bf479,5},{0xf912ec,8},{0xe5b461,7},{0xaf5aef,6},
-{0xc34fe5,7},{0xd038ef,6},{0x38f9c8,7},{0xf43dc6,3},
-{0xceb973,5},{0xe526ec,4},{0xf902fc,7},{0xbc48f7,4},
-{0,0}
-};
-
-static double const mosaic_curve_points[] = {
-20.3, 216.5, 27.0, 209.8, 17.4, 200.0, 14.5, 183.5, 14.2, 181.8,
-13.5, 181.6, 13.9, 180.0, 28.3, 126.1, 29.2, 126.3, 44.2, 72.5,
-44.4, 71.7, 44.2, 70.8, 44.2, 70.8, 44.2, 70.8, 44.4, 71.7,
-44.2, 72.5, 36.1, 121.4, 36.0, 121.3, 27.9, 170.2, 24.1, 193.3,
-33.8, 203.1, 20.3, 216.5, 82.6, 583.9, 82.5, 583.6, 84.3, 583.3,
-84.2, 583.1, 88.1, 600.0, 87.2, 600.2, 90.2, 617.3, 92.4, 630.1,
-92.4, 630.1, 94.7, 642.9, 96.8, 655.3, 96.8, 655.3, 99.0, 667.8,
-100.0, 673.7, 100.1, 673.7, 101.1, 679.7, 107.4, 716.3, 107.3, 716.3,
-113.7, 752.9, 115.3, 762.1, 117.1, 771.4, 117.1, 771.4, 117.1, 771.4,
-115.3, 762.1, 113.7, 752.9, 108.9, 726.8, 108.9, 726.8, 104.1, 700.7,
-97.1, 662.7, 97.1, 662.7, 90.1, 624.8, 86.3, 604.3, 85.5, 604.5,
-82.6, 583.9, 37.6, 265.6, 38.8, 286.4, 41.0, 287.6, 36.1, 307.5,
-38.5, 298.0, 34.3, 297.0, 32.5, 286.5, 26.4, 251.5, 21.6, 251.7,
-20.3, 216.5, 33.8, 203.1, 24.1, 193.3, 27.9, 170.2, 43.4, 214.1,
-34.7, 217.8, 37.6, 265.6, 27.9, 170.2, 36.0, 121.3, 36.1, 121.4,
-44.2, 72.5, 43.5, 76.1, 44.0, 76.2, 43.9, 79.8, 43.7, 85.4,
-43.7, 85.4, 43.5, 91.0, 41.9, 137.6, 41.9, 137.6, 40.3, 184.2,
-39.2, 217.8, 39.2, 217.8, 38.1, 251.5, 37.8, 258.5, 36.7, 258.7,
-37.6, 265.6, 34.7, 217.8, 43.4, 214.1, 27.9, 170.2, -16.2, 299.0,
--16.2, 299.0, -15.8, 297.4, -15.4, 295.8, -10.3, 274.5, -10.2, 274.5,
--5.1, 253.1, -1.7, 238.6, -1.9, 238.6, 1.6, 224.2, 2.5, 220.5,
-2.8, 220.6, 3.6, 216.9, -0.6, 235.0, -0.7, 235.0, -5.1, 253.1,
--10.2, 274.5, -10.3, 274.5, -15.4, 295.8, -15.8, 297.4, -16.2, 299.0,
--16.2, 299.0, 242.4, -11.8, 258.9, -17.0, 261.0, -11.0, 277.2, -16.9,
-183.6, 17.7, 182.4, 14.3, 87.6, 45.5, 87.3, 45.5, 87.3, 45.5,
-87.1, 45.6, 71.7, 49.5, 71.2, 48.0, 56.4, 53.5, 148.8, 19.4,
-148.5, 18.2, 242.4, -11.8, 56.4, 53.5, 52.5, 54.8, 51.1, 57.0,
-48.5, 55.6, 47.9, 55.2, 48.4, 50.6, 50.0, 50.0, 134.7, 18.5,
-135.0, 19.0, 221.1, -8.6, 231.2, -11.9, 232.5, -8.1, 242.4, -11.8,
-148.5, 18.2, 148.8, 19.4, 56.4, 53.5, 194.7, 17.8, 158.4, 27.2,
-158.4, 27.2, 122.0, 36.6, 117.5, 37.7, 117.5, 37.7, 112.9, 38.9,
-100.2, 42.2, 100.2, 42.2, 87.6, 45.5, 87.3, 45.5, 87.3, 45.5,
-87.1, 45.6, 182.1, 14.3, 181.1, 10.8, 277.2, -16.9, 303.4, -24.5,
-307.1, -14.6, 331.7, -25.0, 266.4, 2.6, 263.7, -3.7, 195.7, 17.5,
-195.2, 17.7, 195.2, 17.7, 194.7, 17.8, 331.7, -25.0, 364.2, -33.4,
-365.0, -31.6, 398.6, -34.9, 387.8, -33.8, 388.0, -32.1, 377.4, -29.4,
-370.0, -27.5, 370.0, -27.5, 362.6, -25.6, 362.3, -25.5, 362.3, -25.5,
-362.0, -25.4, 355.9, -23.9, 355.9, -23.9, 349.8, -22.3, 341.8, -20.2,
-341.8, -20.2, 333.7, -18.1, 318.3, -14.2, 318.3, -14.2, 303.0, -10.2,
-300.6, -9.6, 300.6, -9.6, 298.2, -9.0, 281.5, -4.7, 281.5, -4.7,
-264.9, -0.3, 254.1, 2.4, 254.1, 2.4, 243.2, 5.2, 227.9, 9.2,
-227.9, 9.2, 212.6, 13.1, 204.2, 15.3, 204.2, 15.3, 195.7, 17.5,
-195.2, 17.7, 195.2, 17.7, 194.7, 17.8, 263.2, -3.6, 262.3, -7.1,
-331.7, -25.0, -5.1, 253.1, -0.7, 235.0, -0.6, 235.0, 3.6, 216.9,
-7.2, 203.0, 5.7, 202.2, 11.4, 189.1, 6.4, 200.6, 8.2, 201.4,
-5.0, 213.7, -0.0, 233.4, 2.9, 234.7, -5.1, 253.1, 0.7, 536.2,
-13.6, 573.8, 15.5, 574.7, 18.7, 614.1, 18.8, 616.3, 7.9, 620.2,
-7.3, 619.4, -4.6, 602.1, -1.2, 599.1, -6.2, 577.9, -16.0, 536.4,
--28.8, 533.6, -22.2, 494.1, -25.4, 512.7, -6.9, 513.8, 0.7, 536.2,
--22.2, 494.1, -26.0, 485.6, -28.6, 477.0, -25.8, 475.4, -22.7, 473.6,
--14.7, 479.5, -10.5, 487.2, -3.6, 500.3, -7.1, 502.1, -3.7, 517.0,
--2.5, 522.1, -2.5, 522.1, -1.4, 527.1, -0.3, 531.7, -1.6, 532.5,
-0.7, 536.2, -6.9, 513.8, -25.4, 512.7, -22.2, 494.1, 19.0, 510.1,
-21.7, 515.4, 24.2, 514.1, 29.4, 518.2, 30.9, 519.3, 30.9, 519.3,
-32.3, 520.4, 56.0, 538.7, 58.2, 536.4, 79.7, 557.1, 82.9, 560.1,
-80.6, 562.5, 81.6, 567.8, 82.9, 575.5, 83.7, 575.4, 84.2, 583.1,
-84.3, 583.3, 82.5, 583.6, 82.6, 583.9, 75.0, 587.4, 75.2, 587.9,
-67.4, 591.0, 67.4, 591.1, 67.2, 590.6, 66.9, 590.2, 42.9, 550.1,
-40.5, 551.4, 19.0, 510.1, 121.8, 800.9, 121.7, 801.1, 122.3, 801.2,
-122.4, 801.6, 123.7, 808.3, 126.5, 809.3, 124.7, 815.1, 125.1, 813.8,
-120.1, 813.3, 119.5, 810.6, 118.6, 806.2, 120.3, 805.6, 121.8, 800.9,
-0.7, 495.9, 3.7, 500.5, 5.2, 499.5, 9.8, 503.0, 14.4, 506.5,
-15.9, 505.5, 19.0, 510.1, 40.5, 551.4, 42.9, 550.1, 66.9, 590.2,
-63.6, 584.5, 63.1, 584.8, 59.4, 579.4, 30.0, 537.7, 28.5, 538.7,
-0.7, 495.9, 113.7, 752.9, 115.3, 762.1, 117.1, 771.4, 117.1, 771.4,
-117.4, 773.4, 117.4, 773.4, 117.8, 775.3, 120.1, 788.5, 120.3, 788.4,
-122.4, 801.6, 122.3, 801.2, 121.7, 801.1, 121.8, 800.9, 121.4, 800.4,
-121.4, 800.4, 121.0, 799.9, 120.6, 799.4, 120.6, 799.4, 120.3, 798.9,
-95.0, 767.1, 74.8, 770.0, 69.8, 735.3, 71.5, 747.0, 95.6, 739.1,
-113.7, 752.9, 69.8, 735.3, 69.0, 734.9, 68.4, 733.7, 68.5, 733.6,
-75.3, 725.8, 76.1, 726.5, 83.8, 719.4, 89.1, 714.5, 89.1, 714.5,
-94.4, 709.6, 99.2, 705.1, 104.9, 702.6, 104.1, 700.7, 108.9, 726.8,
-108.9, 726.8, 113.7, 752.9, 95.6, 739.1, 71.5, 747.0, 69.8, 735.3,
-19.0, 613.9, 22.4, 604.2, 32.4, 607.6, 45.7, 601.3, 56.0, 596.4,
-56.0, 596.4, 66.3, 591.6, 66.9, 591.3, 66.9, 591.3, 67.4, 591.0,
-75.2, 587.9, 75.0, 587.4, 82.6, 583.9, 85.5, 604.5, 86.3, 604.3,
-90.1, 624.8, 90.1, 624.5, 88.9, 624.6, 87.8, 624.5, 64.0, 620.8,
-64.0, 620.8, 40.2, 617.2, 29.6, 615.5, 19.7, 612.1, 19.0, 613.9,
-121.0, 799.9, 121.4, 800.4, 121.4, 800.4, 121.8, 800.9, 120.3, 805.6,
-118.6, 806.2, 119.5, 810.6, 108.1, 806.7, 98.9, 800.6, 99.9, 793.4,
-99.6, 795.2, 110.5, 796.3, 121.0, 799.9, 191.6, 801.6, 213.6, 817.8,
-197.0, 840.4, 202.3, 879.2, 202.4, 880.2, 203.0, 880.7, 202.6, 881.2,
-202.1, 881.7, 201.1, 881.7, 200.4, 881.1, 187.5, 870.7, 176.8, 871.5,
-175.5, 859.3, 172.4, 831.7, 200.2, 807.9, 191.6, 801.6, 32.3, 520.4,
-30.9, 519.3, 30.9, 519.3, 29.4, 518.2, 27.6, 505.3, 28.9, 505.1,
-28.3, 492.1, 26.0, 440.3, 25.5, 440.3, 23.7, 388.5, 24.2, 405.2,
-24.7, 405.2, 25.8, 421.8, 27.0, 439.3, 27.0, 439.3, 28.1, 456.8,
-29.1, 470.9, 29.1, 470.9, 30.0, 485.1, 31.1, 502.7, 32.6, 502.7,
-32.3, 520.4, -3.7, 517.0, -7.1, 502.1, -3.6, 500.3, -10.5, 487.2,
--10.8, 490.3, -6.1, 490.7, -1.6, 494.1, -0.5, 495.0, -0.1, 494.8,
-0.7, 495.9, 28.5, 538.7, 30.0, 537.7, 59.4, 579.4, 64.3, 555.8,
-22.9, 552.0, -3.7, 517.0, 83.8, 719.4, 76.1, 726.5, 75.3, 725.8,
-68.5, 733.6, 49.9, 724.3, 45.1, 717.9, 40.0, 697.6, 42.0, 705.5,
-51.1, 703.2, 62.2, 708.7, 69.0, 712.1, 69.0, 712.1, 75.8, 715.5,
-79.8, 717.4, 83.9, 719.1, 83.8, 719.4, 69.7, 767.2, 66.2, 756.5,
-57.4, 760.4, 50.0, 750.0, 44.4, 742.1, 50.3, 736.4, 43.7, 730.7,
-60.1, 745.0, 63.1, 746.8, 69.7, 767.2, 943.6, 608.8, 941.3, 609.3,
-947.5, 623.9, 942.6, 627.8, 892.0, 668.3, 889.0, 665.2, 832.4, 697.7,
-848.6, 688.4, 847.2, 685.9, 861.9, 674.1, 867.3, 669.8, 867.3, 669.8,
-872.6, 665.6, 875.3, 663.4, 875.3, 663.4, 878.0, 661.2, 891.5, 650.5,
-891.5, 650.5, 904.9, 639.8, 906.2, 638.7, 906.2, 638.7, 907.5, 637.7,
-909.8, 635.8, 909.8, 635.8, 912.2, 633.9, 927.9, 621.4, 926.1, 612.3,
-943.6, 608.8, 743.8, 661.6, 749.6, 670.9, 741.5, 681.2, 747.9, 684.8,
-733.2, 676.6, 737.6, 668.6, 727.2, 652.4, 722.1, 644.3, 722.1, 644.3,
-716.9, 636.3, 711.2, 627.4, 711.2, 627.4, 705.5, 618.5, 701.1, 611.6,
-695.6, 610.5, 696.7, 604.7, 695.8, 609.3, 701.3, 610.3, 706.0, 615.9,
-724.9, 638.7, 728.6, 636.5, 743.8, 661.6, 947.6, 328.1, 940.6, 361.9,
-953.7, 364.0, 954.4, 400.0, 955.1, 438.8, 952.6, 438.9, 950.4, 477.7,
-950.5, 475.0, 950.3, 475.0, 950.3, 472.2, 949.8, 448.4, 949.8, 448.4,
-949.4, 424.6, 948.5, 376.3, 938.1, 374.2, 947.6, 328.1, 846.3, 117.0,
-890.0, 147.0, 890.5, 146.4, 933.3, 177.7, 934.1, 178.3, 932.8, 180.3,
-933.6, 180.8, 919.3, 171.9, 920.0, 170.9, 906.3, 160.9, 890.8, 149.6,
-890.8, 149.6, 875.3, 138.2, 872.0, 135.8, 872.0, 135.8, 868.7, 133.4,
-857.5, 125.2, 857.7, 124.9, 846.3, 117.0, 408.1, 154.0, 408.9, 154.9,
-409.6, 155.6, 409.4, 156.0, 393.6, 178.5, 392.8, 177.9, 376.1, 199.9,
-371.9, 205.6, 372.2, 205.9, 367.6, 211.2, 370.8, 207.5, 370.5, 207.2,
-373.3, 203.2, 390.6, 178.7, 390.6, 178.7, 407.9, 154.3, 408.0, 154.2,
-408.2, 154.1, 408.1, 154.0, 142.2, 652.8, 141.2, 609.9, 142.1, 609.9,
-142.0, 567.0, 142.0, 543.5, 142.0, 543.5, 141.9, 520.0, 141.9, 517.7,
-141.9, 517.7, 141.9, 515.4, 141.9, 494.5, 141.9, 494.5, 141.9, 473.6,
-141.9, 472.3, 141.9, 472.3, 141.9, 471.0, 141.8, 468.7, 141.8, 468.7,
-141.8, 466.3, 141.8, 452.9, 141.5, 452.9, 141.8, 439.5, 141.8, 441.3,
-142.0, 441.3, 142.3, 443.2, 144.2, 457.2, 144.2, 457.2, 146.2, 471.3,
-146.6, 474.8, 146.6, 474.8, 147.1, 478.3, 147.4, 480.0, 147.4, 480.0,
-147.6, 481.7, 148.8, 490.4, 148.8, 490.4, 150.0, 499.1, 150.2, 500.3,
-150.2, 500.3, 150.3, 501.5, 153.2, 522.1, 153.2, 522.1, 156.0, 542.8,
-156.8, 548.2, 156.8, 548.2, 157.5, 553.7, 157.8, 556.1, 158.5, 556.2,
-158.2, 558.4, 155.4, 578.7, 154.7, 578.6, 151.3, 598.8, 147.6, 620.7,
-147.6, 620.7, 143.9, 642.6, 143.9, 642.7, 143.9, 642.7, 143.9, 642.7,
-143.1, 647.7, 142.1, 647.8, 142.2, 652.8, -1.6, 494.1, -6.1, 490.7,
--10.8, 490.3, -10.5, 487.2, -14.7, 479.5, -22.7, 473.6, -25.8, 475.4,
--37.3, 443.0, -39.2, 441.2, -38.9, 407.2, -39.0, 422.7, -32.2, 422.8,
--25.5, 438.4, -13.6, 466.3, -10.5, 465.3, -1.6, 494.1, 15.1, 196.4,
-24.9, 282.2, 18.9, 282.9, 22.8, 369.5, 22.8, 369.5, 22.8, 369.6,
-22.8, 369.6, 19.8, 367.5, 17.9, 368.2, 16.8, 365.3, 14.8, 360.0,
-16.8, 359.2, 16.7, 353.2, 16.6, 347.1, 16.6, 347.1, 16.6, 341.0,
-16.4, 326.7, 16.4, 326.7, 16.3, 312.3, 15.7, 254.3, 21.6, 253.7,
-15.1, 196.4, -1.4, 527.1, -2.5, 522.1, -2.5, 522.1, -3.7, 517.0,
-22.9, 552.0, 64.3, 555.8, 59.4, 579.4, 63.1, 584.8, 63.6, 584.5,
-66.9, 590.2, 67.2, 590.6, 67.4, 591.1, 67.4, 591.0, 66.9, 591.3,
-66.9, 591.3, 66.3, 591.6, 44.0, 571.1, 44.3, 570.7, 22.4, 549.7,
-10.5, 538.4, 8.8, 539.8, -1.4, 527.1, 87.8, 624.5, 88.9, 624.6,
-90.1, 624.5, 90.1, 624.8, 97.1, 662.7, 97.1, 662.7, 104.1, 700.7,
-104.9, 702.6, 99.2, 705.1, 94.4, 709.6, 91.2, 708.1, 93.8, 702.6,
-93.3, 695.5, 92.9, 690.2, 92.9, 690.2, 92.5, 684.9, 91.2, 668.6,
-91.2, 668.6, 89.9, 652.3, 88.9, 638.4, 87.7, 638.4, 87.8, 624.5,
-120.3, 798.9, 120.6, 799.4, 120.6, 799.4, 121.0, 799.9, 110.5, 796.3,
-99.6, 795.2, 99.9, 793.4, 83.2, 782.8, 82.9, 782.0, 69.7, 767.2,
-63.1, 746.8, 60.1, 745.0, 43.7, 730.7, 42.4, 728.8, 43.7, 727.6,
-42.2, 726.3, 82.0, 761.7, 81.3, 762.5, 120.3, 798.9, 42.2, 726.3,
-28.8, 709.3, 29.6, 704.7, 27.9, 682.3, 28.5, 690.4, 33.9, 690.0,
-40.0, 697.6, 45.1, 717.9, 49.9, 724.3, 68.5, 733.6, 68.4, 733.7,
-69.0, 734.9, 69.8, 735.3, 74.8, 770.0, 95.0, 767.1, 120.3, 798.9,
-81.3, 762.5, 82.0, 761.7, 42.2, 726.3, 703.4, 562.7, 701.7, 552.1,
-711.8, 549.5, 722.0, 537.9, 721.3, 538.6, 722.2, 539.4, 722.5, 540.9,
-723.8, 548.1, 723.8, 548.1, 725.0, 555.3, 730.5, 586.1, 730.5, 586.1,
-735.9, 616.8, 737.4, 625.4, 738.6, 625.3, 739.0, 634.0, 738.8, 631.5,
-737.7, 631.5, 736.5, 629.0, 719.9, 595.9, 708.9, 597.6, 703.4, 562.7,
-539.8, 359.6, 539.7, 358.7, 539.2, 358.7, 538.6, 357.9, 519.1, 327.4,
-519.1, 327.4, 499.6, 296.9, 492.6, 286.0, 492.4, 286.2, 485.7, 275.1,
-486.0, 275.6, 486.2, 275.5, 486.8, 275.9, 488.5, 277.1, 488.5, 277.1,
-490.3, 278.3, 512.4, 293.3, 515.9, 289.9, 534.6, 308.4, 538.8, 312.6,
-535.4, 316.0, 536.1, 323.7, 536.4, 326.7, 536.4, 326.7, 536.7, 329.8,
-538.3, 344.7, 538.8, 344.7, 539.8, 359.6, 672.2, 402.1, 674.0, 400.5,
-680.5, 407.7, 688.8, 413.4, 692.6, 416.0, 692.6, 416.0, 696.4, 418.5,
-698.9, 420.3, 700.7, 419.7, 701.5, 422.0, 705.6, 434.7, 703.8, 435.3,
-706.2, 448.6, 706.9, 452.6, 706.9, 452.6, 707.6, 456.6, 710.3, 471.8,
-713.6, 472.0, 713.0, 487.0, 713.1, 483.1, 709.8, 483.0, 706.7, 478.9,
-704.9, 476.6, 704.9, 476.6, 703.1, 474.3, 701.9, 472.8, 701.9, 472.8,
-700.8, 471.3, 696.3, 465.5, 696.3, 465.5, 691.8, 459.8, 689.2, 456.4,
-689.2, 456.4, 686.6, 453.1, 678.3, 442.4, 678.3, 442.4, 669.9, 431.6,
-669.6, 431.2, 669.3, 431.2, 669.3, 430.8, 670.4, 416.4, 664.2, 409.2,
-672.2, 402.1, 669.3, 430.8, 662.6, 432.2, 659.8, 418.7, 650.4, 406.5,
-639.5, 392.5, 639.5, 392.5, 628.6, 378.5, 623.6, 372.1, 625.2, 368.3,
-618.6, 365.6, 636.3, 372.9, 634.8, 376.6, 650.9, 387.6, 657.0, 391.8,
-657.0, 391.8, 663.1, 395.9, 666.5, 398.2, 666.5, 398.2, 669.9, 400.6,
-670.3, 400.8, 670.3, 400.8, 670.6, 401.0, 671.4, 401.6, 672.2, 401.6,
-672.2, 402.1, 664.2, 409.2, 670.4, 416.4, 669.3, 430.8, 150.3, 501.5,
-150.2, 500.3, 150.2, 500.3, 150.0, 499.1, 164.5, 478.5, 165.2, 479.0,
-180.4, 458.9, 203.0, 428.9, 200.5, 426.6, 225.7, 398.9, 203.9, 422.9,
-206.4, 425.2, 187.1, 451.5, 168.7, 476.5, 169.4, 477.1, 150.3, 501.5,
-198.1, 70.3, 213.7, 72.4, 227.1, 73.6, 228.3, 81.5, 229.1, 86.3,
-215.3, 88.6, 202.2, 95.7, 194.5, 100.0, 194.5, 100.0, 186.7, 104.2,
-177.5, 109.3, 170.2, 107.4, 168.4, 114.3, 173.7, 93.6, 181.1, 95.5,
-193.8, 76.7, 195.9, 73.5, 196.4, 70.1, 198.1, 70.3, 140.7, 133.4,
-137.8, 135.0, 133.7, 132.2, 133.2, 133.5, 134.7, 129.7, 137.9, 130.9,
-142.6, 128.4, 147.4, 125.8, 147.4, 125.8, 152.1, 123.1, 160.3, 118.7,
-160.3, 118.7, 168.4, 114.3, 170.2, 107.4, 177.5, 109.3, 186.7, 104.2,
-164.3, 119.7, 164.5, 120.3, 140.7, 133.4, 134.9, 228.4, 136.6, 240.3,
-129.2, 247.8, 116.4, 255.3, 118.9, 253.8, 111.2, 244.9, 114.4, 240.4,
-120.5, 231.5, 135.5, 232.9, 134.9, 228.4, 151.3, 598.8, 154.7, 578.6,
-155.4, 578.7, 158.2, 558.4, 157.7, 560.5, 158.5, 560.6, 158.8, 562.8,
-161.6, 583.3, 161.6, 583.3, 164.4, 603.8, 165.1, 609.2, 165.1, 609.2,
-165.9, 614.5, 169.9, 643.5, 169.9, 643.5, 173.9, 672.6, 174.5, 677.0,
-173.8, 677.2, 175.1, 681.5, 162.5, 640.3, 157.1, 641.0, 151.3, 598.8,
-141.4, 568.5, 141.4, 567.7, 142.1, 567.7, 142.0, 567.0, 142.1, 609.9,
-141.2, 609.9, 142.2, 652.8, 142.4, 726.7, 142.4, 726.7, 142.5, 800.7,
-142.5, 811.8, 142.5, 811.8, 142.6, 822.9, 142.6, 826.8, 142.7, 830.7,
-142.6, 830.7, 138.4, 830.8, 134.1, 827.1, 133.9, 823.2, 131.5, 765.1,
-135.6, 765.0, 137.3, 706.8, 137.6, 699.6, 137.6, 699.6, 137.8, 692.5,
-139.6, 630.5, 139.3, 630.5, 141.4, 568.5, 94.7, 642.9, 92.4, 630.1,
-92.4, 630.1, 90.2, 617.3, 90.6, 608.0, 93.4, 608.1, 96.7, 598.9,
-98.3, 594.2, 99.8, 594.3, 100.0, 589.5, 98.9, 614.8, 97.5, 614.8,
-95.0, 640.0, 94.8, 641.5, 94.4, 641.6, 94.7, 642.9, 118.9, 272.9,
-120.5, 292.1, 121.5, 292.0, 124.1, 311.0, 126.7, 329.9, 126.7, 329.9,
-129.3, 348.8, 135.5, 394.1, 136.9, 394.0, 141.8, 439.5, 141.5, 452.9,
-141.8, 452.9, 141.8, 466.3, 142.0, 464.7, 139.8, 464.7, 139.2, 462.7,
-138.1, 459.0, 138.8, 458.8, 138.4, 454.9, 135.2, 425.6, 135.2, 425.6,
-132.1, 396.2, 130.6, 382.7, 130.6, 382.7, 129.2, 369.3, 124.0, 321.1,
-123.1, 321.2, 118.9, 272.9, 44.2, 353.6, 40.0, 349.1, 42.9, 346.4,
-41.7, 339.3, 40.6, 332.9, 43.2, 329.6, 39.5, 326.5, 51.9, 336.6,
-49.3, 339.9, 59.1, 353.3, 60.0, 354.6, 60.0, 354.6, 60.9, 355.8,
-66.5, 363.4, 66.5, 363.4, 72.1, 371.0, 73.1, 372.4, 73.1, 372.4,
-74.1, 373.8, 74.2, 373.9, 74.1, 374.0, 74.3, 374.1, 59.2, 363.9,
-56.3, 366.5, 44.2, 353.6, -15.4, 295.8, -10.3, 274.5, -10.2, 274.5,
--5.1, 253.1, 2.9, 234.7, -0.0, 233.4, 5.0, 213.7, 2.7, 222.5,
-2.8, 222.5, 0.6, 231.3, -3.2, 247.1, -3.2, 247.2, -7.1, 263.0,
--11.2, 279.4, -12.0, 279.2, -15.4, 295.8, 22.8, 369.5, 18.9, 282.9,
-24.9, 282.2, 15.1, 196.4, 14.8, 189.9, 16.1, 189.6, 14.5, 183.5,
-17.4, 200.0, 27.0, 209.8, 20.3, 216.5, 21.6, 251.7, 26.4, 251.5,
-32.5, 286.5, 33.4, 293.8, 31.6, 294.0, 30.7, 301.5, 30.7, 301.8,
-30.7, 301.8, 30.7, 302.0, 29.9, 308.7, 29.9, 308.7, 29.1, 315.3,
-26.0, 342.4, 19.7, 343.1, 22.8, 369.5, 78.4, 549.9, 78.8, 550.4,
-78.6, 550.6, 78.7, 551.4, 79.2, 554.2, 78.0, 556.0, 79.7, 557.1,
-58.2, 536.4, 56.0, 538.7, 32.3, 520.4, 32.6, 502.7, 31.1, 502.7,
-30.0, 485.1, 30.0, 486.7, 31.2, 486.7, 32.4, 488.3, 55.4, 519.1,
-55.7, 518.9, 78.4, 549.9, 45.7, 601.3, 32.4, 607.6, 22.4, 604.2,
-19.0, 613.9, 18.8, 614.0, 18.6, 614.0, 18.7, 614.1, 15.5, 574.7,
-13.6, 573.8, 0.7, 536.2, -1.6, 532.5, -0.3, 531.7, -1.4, 527.1,
-8.8, 539.8, 10.5, 538.4, 22.4, 549.7, 37.4, 573.4, 47.0, 576.2,
-45.7, 601.3, 22.4, 549.7, 44.3, 570.7, 44.0, 571.1, 66.3, 591.6,
-56.0, 596.4, 56.0, 596.4, 45.7, 601.3, 47.0, 576.2, 37.4, 573.4,
-22.4, 549.7, 62.2, 708.7, 51.1, 703.2, 42.0, 705.5, 40.0, 697.6,
-33.9, 690.0, 28.5, 690.4, 27.9, 682.3, 21.2, 668.6, 25.2, 654.1,
-18.3, 653.0, 32.9, 655.3, 30.8, 668.9, 43.3, 684.7, 49.6, 692.7,
-49.6, 692.7, 55.9, 700.7, 56.1, 701.0, 56.1, 701.0, 56.3, 701.2,
-59.3, 705.0, 58.6, 707.9, 62.2, 708.7, 773.1, 619.7, 757.0, 625.1,
-754.8, 618.3, 736.4, 616.8, 736.2, 616.8, 735.9, 616.9, 735.9, 616.8,
-730.5, 586.1, 730.5, 586.1, 725.0, 555.3, 725.3, 557.0, 726.8, 556.9,
-728.5, 558.4, 734.7, 564.0, 734.7, 564.0, 741.0, 569.6, 750.7, 578.2,
-750.7, 578.2, 760.4, 586.8, 768.9, 594.4, 768.9, 594.4, 777.5, 602.0,
-778.0, 602.4, 778.5, 602.6, 778.4, 602.8, 776.3, 611.4, 778.0, 618.1,
-773.1, 619.7, 778.4, 602.8, 780.2, 601.8, 783.2, 607.1, 787.9, 611.3,
-791.7, 614.6, 792.8, 613.9, 795.5, 618.0, 796.2, 619.0, 795.2, 621.3,
-794.7, 621.4, 784.0, 622.2, 778.2, 625.5, 773.1, 619.7, 778.0, 618.1,
-776.3, 611.4, 778.4, 602.8, 767.2, 714.9, 766.5, 712.4, 765.7, 712.6,
-764.3, 710.3, 759.7, 703.1, 759.7, 703.1, 755.2, 696.0, 751.5, 690.4,
-750.0, 690.9, 747.9, 684.8, 741.5, 681.2, 749.6, 670.9, 743.8, 661.6,
-741.7, 649.6, 741.7, 649.6, 739.6, 637.7, 739.3, 635.8, 739.3, 635.8,
-739.0, 634.0, 738.6, 625.3, 737.4, 625.4, 735.9, 616.8, 735.9, 616.9,
-736.2, 616.8, 736.4, 616.8, 741.7, 632.9, 741.5, 633.0, 746.6, 649.2,
-756.9, 682.0, 757.7, 681.8, 767.2, 714.9, 787.2, 480.4, 785.4, 487.8,
-809.3, 488.9, 823.0, 504.7, 825.6, 507.8, 817.7, 516.8, 819.7, 518.2,
-799.8, 504.6, 783.7, 494.5, 787.2, 480.4, 760.1, 584.4, 760.7, 585.0,
-759.7, 586.2, 760.4, 586.8, 750.7, 578.2, 750.7, 578.2, 741.0, 569.6,
-744.4, 572.8, 744.8, 572.5, 748.5, 575.4, 754.3, 579.9, 754.8, 579.3,
-760.1, 584.4, 781.1, 677.4, 781.0, 677.3, 781.2, 676.2, 781.4, 676.2,
-796.6, 675.2, 796.6, 675.8, 811.9, 675.4, 814.5, 675.3, 814.5, 675.3,
-817.1, 675.3, 839.5, 674.7, 855.1, 664.1, 861.9, 674.1, 847.2, 685.9,
-848.6, 688.4, 832.4, 697.7, 829.2, 700.2, 827.7, 703.0, 825.4, 702.1,
-802.0, 692.9, 803.0, 690.2, 781.1, 677.4, 825.4, 702.1, 824.6, 718.3,
-804.0, 723.6, 778.2, 732.1, 776.6, 732.6, 771.7, 726.6, 770.7, 720.3,
-769.6, 713.9, 772.4, 713.4, 774.0, 706.6, 777.6, 692.0, 776.3, 677.8,
-781.1, 677.4, 803.0, 690.2, 802.0, 692.9, 825.4, 702.1, 736.5, 629.0,
-737.7, 631.5, 738.8, 631.5, 739.0, 634.0, 739.3, 635.8, 739.3, 635.8,
-739.6, 637.7, 737.6, 633.7, 738.1, 633.5, 736.6, 629.3, 736.5, 629.2,
-736.6, 629.2, 736.5, 629.0, 939.3, 263.2, 939.2, 262.7, 941.3, 262.5,
-941.3, 262.2, 945.5, 295.0, 945.9, 295.1, 947.6, 328.1, 938.1, 374.2,
-948.5, 376.3, 949.4, 424.6, 949.3, 413.7, 948.7, 413.7, 948.0, 402.8,
-943.6, 333.0, 942.6, 333.0, 939.3, 263.2, 933.8, 398.2, 945.1, 423.2,
-939.9, 425.5, 945.9, 452.8, 948.1, 462.5, 948.5, 462.5, 950.3, 472.2,
-950.3, 475.0, 950.5, 475.0, 950.4, 477.7, 949.9, 489.9, 944.7, 492.2,
-949.1, 502.2, 932.5, 464.7, 937.5, 462.4, 926.0, 422.7, 923.8, 415.2,
-923.8, 415.2, 921.6, 407.7, 920.4, 403.4, 920.4, 403.4, 919.1, 399.2,
-916.7, 390.9, 916.1, 382.5, 914.3, 382.6, 923.5, 382.0, 929.2, 388.1,
-933.8, 398.2, 924.1, 500.9, 935.4, 520.1, 931.7, 522.3, 939.4, 543.8,
-942.7, 553.0, 944.8, 552.8, 946.0, 562.3, 947.5, 574.7, 945.5, 574.9,
-944.7, 587.6, 944.7, 587.5, 944.5, 587.5, 944.3, 587.3, 934.6, 580.7,
-934.6, 580.7, 924.9, 574.1, 919.9, 570.7, 915.1, 570.9, 915.0, 567.3,
-913.8, 541.2, 918.6, 541.0, 922.2, 514.6, 923.1, 507.7, 926.8, 505.5,
-924.1, 500.9, 926.0, 422.7, 937.5, 462.4, 932.5, 464.7, 949.1, 502.2,
-953.3, 531.4, 952.7, 533.4, 946.0, 562.3, 944.8, 552.8, 942.7, 553.0,
-939.4, 543.8, 934.7, 516.5, 936.3, 516.2, 933.3, 488.7, 932.5, 482.0,
-932.5, 482.0, 931.8, 475.4, 928.9, 449.0, 938.8, 442.6, 926.0, 422.7,
-669.9, 400.6, 666.5, 398.2, 666.5, 398.2, 663.1, 395.9, 663.0, 395.4,
-665.6, 394.7, 668.1, 393.5, 684.8, 385.5, 684.8, 385.5, 701.4, 377.5,
-711.7, 372.6, 711.7, 372.6, 722.0, 367.6, 725.4, 366.0, 725.4, 366.0,
-728.7, 364.4, 730.3, 363.7, 730.3, 363.7, 731.8, 362.9, 732.7, 362.5,
-732.7, 362.5, 733.6, 362.1, 740.2, 358.9, 740.2, 358.9, 746.8, 355.7,
-750.9, 353.7, 750.9, 353.7, 755.0, 351.7, 767.9, 345.5, 767.9, 345.5,
-780.8, 339.3, 815.8, 322.6, 815.8, 322.7, 850.7, 305.9, 851.2, 305.7,
-851.6, 305.3, 851.6, 305.3, 851.6, 305.3, 851.2, 305.7, 850.7, 305.9,
-805.7, 329.5, 805.7, 329.5, 760.6, 353.1, 715.3, 376.8, 716.7, 380.0,
-669.9, 400.6, 676.7, 19.0, 678.1, 20.5, 689.6, 2.0, 699.1, 3.6,
-713.8, 6.3, 713.2, 14.6, 725.3, 27.5, 724.0, 26.2, 723.0, 27.1,
-720.8, 26.7, 698.7, 22.8, 689.0, 32.0, 676.7, 19.0, 446.7, 132.3,
-433.1, 136.8, 432.6, 135.3, 418.6, 138.4, 413.9, 139.4, 413.9, 139.4,
-409.3, 140.3, 408.6, 140.5, 408.6, 140.5, 408.0, 140.6, 404.3, 141.4,
-404.3, 142.2, 400.6, 142.2, 400.0, 142.2, 399.3, 141.0, 399.5, 140.5,
-401.5, 136.3, 401.3, 134.8, 405.1, 132.7, 408.4, 130.9, 409.4, 132.7,
-413.7, 132.6, 414.0, 132.6, 414.0, 132.6, 414.2, 132.6, 424.1, 132.5,
-424.1, 132.5, 434.0, 132.5, 435.4, 132.4, 435.4, 132.4, 436.8, 132.4,
-441.7, 132.4, 442.2, 133.8, 446.7, 132.3, 359.9, 57.9, 372.4, 77.4,
-383.0, 94.8, 375.4, 102.9, 379.1, 99.0, 363.7, 84.6, 352.0, 66.3,
-345.7, 56.6, 345.7, 56.6, 339.5, 46.8, 338.4, 45.2, 338.4, 45.2,
-337.4, 43.5, 327.7, 28.4, 331.8, 22.0, 318.0, 13.2, 343.0, 29.2,
-343.7, 32.5, 359.9, 57.9, 318.0, 13.2, 309.1, 2.6, 299.8, -3.8,
-303.0, -10.2, 318.3, -14.2, 318.3, -14.2, 333.7, -18.1, 336.3, -17.9,
-335.7, -12.3, 337.7, -6.6, 348.8, 25.7, 370.5, 47.3, 359.9, 57.9,
-343.7, 32.5, 343.0, 29.2, 318.0, 13.2, 393.4, 131.0, 382.3, 118.8,
-382.3, 117.9, 375.4, 102.9, 383.0, 94.8, 372.4, 77.4, 359.9, 57.9,
-370.5, 47.3, 348.8, 25.7, 337.7, -6.6, 365.8, 53.1, 362.5, 54.7,
-387.3, 116.0, 390.3, 123.5, 388.3, 125.4, 393.4, 131.0, 290.4, 2.4,
-289.0, 0.5, 293.4, -4.2, 298.2, -9.0, 300.6, -9.6, 300.6, -9.6,
-303.0, -10.2, 299.8, -3.8, 309.1, 2.6, 318.0, 13.2, 331.8, 22.0,
-327.7, 28.4, 337.4, 43.5, 336.2, 41.4, 335.5, 41.8, 333.5, 40.1,
-311.9, 21.3, 306.7, 25.1, 290.4, 2.4, 432.1, 236.3, 431.1, 225.7,
-431.2, 225.7, 430.8, 215.1, 431.0, 219.5, 431.2, 219.5, 431.6, 223.8,
-431.8, 226.0, 431.8, 226.0, 432.0, 228.2, 435.6, 267.5, 435.6, 267.5,
-439.3, 306.7, 441.3, 329.1, 441.3, 329.1, 443.4, 351.4, 443.9, 357.8,
-443.9, 357.8, 444.5, 364.1, 444.8, 366.7, 444.8, 366.7, 445.0, 369.4,
-446.9, 389.4, 446.9, 389.4, 448.7, 409.5, 452.1, 447.0, 452.1, 447.0,
-455.6, 484.5, 456.5, 494.1, 456.5, 494.1, 457.3, 503.6, 461.1, 544.5,
-461.1, 544.5, 464.8, 585.3, 466.5, 603.5, 466.6, 603.5, 468.2, 621.6,
-469.3, 634.5, 469.2, 634.5, 470.3, 647.3, 471.5, 660.3, 471.7, 660.3,
-472.9, 673.2, 473.3, 677.4, 473.3, 677.4, 473.7, 681.5, 473.9, 684.3,
-474.0, 684.3, 474.2, 687.1, 474.9, 695.0, 474.8, 695.0, 475.5, 702.9,
-476.7, 715.9, 476.8, 715.9, 478.0, 728.9, 480.1, 750.5, 480.0, 750.5,
-482.0, 772.1, 482.3, 775.1, 482.3, 775.1, 482.5, 778.1, 483.9, 793.3,
-485.3, 808.6, 485.3, 808.6, 485.3, 808.6, 483.9, 793.3, 482.5, 778.1,
-482.3, 775.1, 482.3, 775.1, 482.0, 772.1, 480.0, 750.5, 480.1, 750.5,
-478.0, 728.9, 476.8, 715.9, 476.7, 715.9, 475.5, 702.9, 472.9, 675.1,
-472.9, 675.1, 470.3, 647.3, 469.3, 635.9, 469.4, 635.9, 468.4, 624.5,
-468.3, 623.1, 468.3, 623.1, 468.2, 621.6, 466.6, 603.5, 466.5, 603.5,
-464.8, 585.3, 461.1, 544.5, 461.1, 544.5, 457.3, 503.6, 456.5, 494.1,
-456.5, 494.1, 455.6, 484.5, 452.1, 447.0, 452.1, 447.0, 448.7, 409.5,
-446.9, 389.4, 446.9, 389.4, 445.0, 369.4, 438.6, 302.8, 438.2, 302.9,
-432.1, 236.3, 431.6, 223.8, 431.2, 219.5, 431.0, 219.5, 430.8, 215.1,
-429.9, 201.0, 423.5, 197.5, 429.1, 186.9, 427.2, 190.5, 437.8, 193.7,
-438.3, 201.1, 439.0, 212.2, 437.1, 213.6, 431.6, 223.8, 94.7, 97.2,
-96.3, 96.3, 94.0, 92.2, 93.3, 87.3, 91.4, 73.5, 91.4, 73.5,
-89.5, 59.8, 88.5, 52.6, 84.6, 48.1, 87.6, 45.5, 100.2, 42.2,
-100.2, 42.2, 112.9, 38.9, 122.8, 39.1, 132.9, 43.7, 132.6, 46.2,
-130.6, 63.5, 120.5, 62.4, 108.5, 78.6, 101.6, 87.9, 103.9, 91.9,
-94.7, 97.2, 236.1, 70.1, 237.2, 70.5, 237.2, 74.9, 235.3, 77.7,
-233.3, 80.6, 231.3, 82.1, 228.3, 81.5, 227.1, 73.6, 213.7, 72.4,
-198.1, 70.3, 187.3, 66.3, 178.2, 59.9, 176.5, 62.4, 179.9, 57.6,
-189.0, 64.0, 201.4, 65.6, 203.1, 65.8, 203.1, 65.8, 204.7, 66.0,
-207.8, 66.4, 207.8, 66.4, 210.8, 66.8, 223.5, 68.4, 225.0, 65.1,
-236.1, 70.1, 239.1, 42.7, 241.4, 39.6, 239.6, 38.3, 240.1, 33.8,
-241.7, 19.5, 235.9, 15.3, 243.2, 5.2, 254.1, 2.4, 254.1, 2.4,
-264.9, -0.3, 262.4, 22.3, 253.8, 22.5, 239.1, 42.7, 264.9, -0.3,
-281.5, -4.7, 281.5, -4.7, 298.2, -9.0, 293.4, -4.2, 289.0, 0.5,
-290.4, 2.4, 281.5, 15.3, 281.5, 15.3, 272.6, 28.3, 271.6, 29.7,
-271.6, 29.7, 270.6, 31.1, 270.6, 31.2, 270.6, 31.2, 270.6, 31.2,
-267.6, 35.6, 267.6, 35.6, 264.6, 39.9, 257.8, 49.7, 257.8, 49.7,
-251.1, 59.5, 245.9, 67.1, 246.6, 67.8, 240.6, 74.8, 238.8, 76.9,
-235.8, 78.2, 235.3, 77.7, 237.2, 74.9, 237.2, 70.5, 236.1, 70.1,
-237.6, 56.4, 234.1, 55.0, 239.1, 42.7, 253.8, 22.5, 262.4, 22.3,
-264.9, -0.3, 202.2, 95.7, 215.3, 88.6, 229.1, 86.3, 228.3, 81.5,
-231.3, 82.1, 233.3, 80.6, 235.3, 77.7, 235.8, 78.2, 238.8, 76.9,
-240.6, 74.8, 223.0, 102.9, 229.0, 115.3, 202.9, 129.5, 209.8, 125.8,
-195.3, 108.8, 202.2, 95.7, 202.9, 129.5, 202.9, 131.1, 202.0, 132.5,
-200.8, 132.6, 185.0, 134.2, 184.8, 132.8, 168.8, 133.0, 156.7, 133.2,
-156.7, 133.2, 144.7, 133.3, 142.7, 133.4, 142.0, 132.4, 140.7, 133.4,
-164.5, 120.3, 164.3, 119.7, 186.7, 104.2, 194.5, 100.0, 194.5, 100.0,
-202.2, 95.7, 195.3, 108.8, 209.8, 125.8, 202.9, 129.5, 167.7, 180.7,
-147.7, 192.0, 153.2, 201.8, 138.8, 222.8, 136.8, 225.6, 137.5, 226.5,
-134.9, 228.4, 135.5, 232.9, 120.5, 231.5, 114.4, 240.4, 114.8, 240.2,
-113.1, 237.7, 113.9, 236.9, 139.8, 207.9, 135.3, 199.1, 167.7, 180.7,
-143.9, 642.6, 147.6, 620.7, 147.6, 620.7, 151.3, 598.8, 157.1, 641.0,
-162.5, 640.3, 175.1, 681.5, 177.5, 690.6, 176.4, 690.9, 177.7, 700.4,
-179.3, 711.9, 179.3, 711.9, 180.9, 723.4, 182.7, 737.0, 182.7, 737.0,
-184.6, 750.6, 184.7, 751.0, 184.6, 751.1, 184.7, 751.5, 171.2, 715.6,
-171.3, 715.6, 157.8, 679.7, 156.0, 674.9, 156.0, 674.9, 154.3, 670.2,
-149.1, 656.4, 144.5, 656.6, 143.9, 642.6, 125.1, 606.5, 125.7, 587.3,
-144.0, 585.9, 141.4, 568.5, 139.3, 630.5, 139.6, 630.5, 137.8, 692.5,
-152.3, 658.4, 123.9, 649.3, 125.1, 606.5, 95.0, 640.0, 97.5, 614.8,
-98.9, 614.8, 100.0, 589.5, 104.7, 567.6, 107.5, 568.2, 115.1, 546.9,
-120.5, 531.4, 124.2, 531.8, 126.0, 515.9, 122.8, 543.6, 119.2, 543.2,
-112.4, 570.4, 108.5, 585.7, 108.5, 585.7, 104.7, 601.1, 102.4, 610.2,
-102.4, 610.2, 100.1, 619.4, 97.5, 629.7, 94.9, 629.7, 95.0, 640.0,
-10.6, 447.0, 22.3, 456.0, 16.9, 463.2, 23.2, 479.3, 25.8, 485.7,
-27.2, 485.5, 28.3, 492.1, 28.9, 505.1, 27.6, 505.3, 29.4, 518.2,
-24.2, 514.1, 21.7, 515.4, 19.0, 510.1, 15.9, 505.5, 14.4, 506.5,
-9.8, 503.0, 7.7, 499.0, 9.9, 497.9, 9.9, 492.8, 10.1, 481.1,
-10.1, 481.1, 10.2, 469.4, 10.4, 458.2, 15.8, 451.1, 10.6, 447.0,
--22.1, 363.9, -22.7, 362.5, -22.7, 362.5, -23.3, 361.1, -25.7, 355.0,
--26.1, 355.1, -28.1, 348.9, -28.3, 348.1, -27.4, 347.8, -27.6, 347.1,
--24.5, 355.0, -25.0, 355.2, -22.3, 363.3, -22.2, 363.6, -22.2, 363.6,
--22.1, 363.9, -24.7, 334.6, -20.5, 316.8, -20.4, 316.8, -16.2, 299.0,
--16.2, 299.0, -15.8, 297.4, -15.4, 295.8, -12.0, 279.2, -11.2, 279.4,
--7.1, 263.0, -3.2, 247.2, -3.2, 247.1, 0.6, 231.3, -3.2, 247.1,
--3.2, 247.2, -7.1, 263.0, -11.2, 279.4, -12.0, 279.2, -15.4, 295.8,
--15.8, 297.4, -16.2, 299.0, -16.2, 299.0, -19.1, 311.6, -19.1, 311.6,
--22.1, 324.1, -23.3, 329.4, -23.4, 329.3, -24.7, 334.6, 30.7, 301.5,
-31.6, 294.0, 33.4, 293.8, 32.5, 286.5, 34.3, 297.0, 38.5, 298.0,
-36.1, 307.5, 37.1, 313.2, 37.1, 313.2, 38.1, 318.9, 38.5, 321.0,
-38.5, 321.0, 38.9, 323.2, 39.0, 324.0, 38.9, 324.0, 39.1, 324.7,
-34.8, 313.2, 32.8, 313.5, 30.7, 301.5, 77.0, 541.9, 79.2, 544.8,
-76.2, 547.2, 78.4, 549.9, 55.7, 518.9, 55.4, 519.1, 32.4, 488.3,
-38.9, 497.4, 39.6, 496.9, 46.7, 505.5, 61.9, 523.7, 63.3, 522.7,
-77.0, 541.9, 774.0, 706.6, 772.4, 713.4, 769.6, 713.9, 770.7, 720.3,
-770.8, 720.0, 770.4, 719.9, 770.2, 719.5, 768.7, 717.2, 768.1, 717.4,
-767.2, 714.9, 757.7, 681.8, 756.9, 682.0, 746.6, 649.2, 747.7, 652.9,
-748.3, 652.7, 750.0, 656.2, 762.0, 681.4, 765.5, 680.3, 774.0, 706.6,
-745.8, 465.5, 745.6, 465.3, 745.7, 465.1, 745.7, 464.8, 744.9, 457.9,
-747.0, 452.1, 744.0, 451.0, 767.8, 459.9, 767.8, 463.2, 787.2, 480.4,
-783.7, 494.5, 799.8, 504.6, 819.7, 518.2, 820.2, 518.7, 819.5, 519.3,
-819.2, 520.3, 818.8, 522.1, 819.5, 522.9, 818.4, 523.8, 818.2, 523.9,
-817.5, 523.1, 816.7, 522.4, 781.2, 494.0, 781.1, 494.2, 745.8, 465.5,
-728.5, 558.4, 726.8, 556.9, 725.3, 557.0, 725.0, 555.3, 723.8, 548.1,
-723.8, 548.1, 722.5, 540.9, 722.7, 542.5, 723.0, 542.4, 723.5, 543.9,
-726.0, 551.2, 727.5, 551.0, 728.5, 558.4, 811.9, 675.4, 796.6, 675.8,
-796.6, 675.2, 781.4, 676.2, 776.8, 671.7, 782.5, 663.2, 787.3, 651.6,
-787.0, 652.4, 788.9, 653.1, 790.4, 654.6, 797.3, 661.3, 797.3, 661.3,
-804.3, 668.0, 808.1, 671.7, 809.7, 676.2, 811.9, 675.4, 736.6, 629.3,
-738.1, 633.5, 737.6, 633.7, 739.6, 637.7, 741.7, 649.6, 741.7, 649.6,
-743.8, 661.6, 728.6, 636.5, 724.9, 638.7, 706.0, 615.9, 708.2, 625.6,
-722.7, 620.4, 736.6, 629.3, 706.0, 615.9, 701.3, 610.3, 695.8, 609.3,
-696.7, 604.7, 696.3, 604.2, 696.3, 604.1, 696.0, 603.6, 690.6, 595.2,
-687.4, 596.0, 685.3, 586.9, 684.6, 584.2, 687.8, 583.4, 690.4, 580.0,
-694.8, 574.1, 694.8, 574.1, 699.3, 568.1, 701.3, 565.4, 704.0, 563.8,
-703.4, 562.7, 708.9, 597.6, 719.9, 595.9, 736.5, 629.0, 736.6, 629.2,
-736.5, 629.2, 736.6, 629.3, 722.7, 620.4, 708.2, 625.6, 706.0, 615.9,
-628.6, 378.5, 639.5, 392.5, 639.5, 392.5, 650.4, 406.5, 654.9, 441.5,
-646.0, 442.7, 641.6, 478.9, 641.5, 479.0, 641.5, 479.0, 641.5, 479.0,
-641.1, 482.9, 641.1, 482.9, 640.6, 486.8, 639.5, 496.1, 635.1, 498.0,
-638.3, 505.4, 632.9, 492.8, 637.2, 490.9, 636.1, 476.4, 634.1, 450.4,
-634.1, 450.4, 632.1, 424.4, 630.4, 401.5, 618.0, 388.9, 628.6, 378.5,
-641.6, 478.9, 646.0, 442.7, 654.9, 441.5, 650.4, 406.5, 659.8, 418.7,
-662.6, 432.2, 669.3, 430.8, 669.3, 431.2, 669.6, 431.2, 669.9, 431.6,
-665.0, 440.8, 664.6, 440.6, 659.2, 449.5, 650.4, 464.2, 639.0, 466.5,
-641.6, 478.9, 914.0, 381.7, 920.2, 370.0, 908.9, 364.0, 903.7, 346.4,
-903.5, 345.5, 903.5, 345.5, 903.2, 344.7, 896.6, 321.9, 896.6, 321.9,
-890.0, 299.2, 888.4, 293.8, 888.2, 293.8, 886.8, 288.4, 886.8, 288.3,
-887.1, 288.3, 887.3, 288.2, 895.2, 284.4, 895.2, 284.4, 903.1, 280.6,
-905.1, 279.6, 907.3, 278.8, 907.2, 278.6, 914.2, 299.5, 915.4, 300.0,
-916.8, 321.8, 918.8, 351.5, 926.7, 357.7, 914.0, 381.7, 916.8, 321.8,
-940.6, 341.7, 935.4, 360.4, 933.8, 398.2, 929.2, 388.1, 923.5, 382.0,
-914.3, 382.6, 914.0, 382.4, 914.0, 382.1, 914.0, 381.7, 926.7, 357.7,
-918.8, 351.5, 916.8, 321.8, 869.9, 395.5, 869.6, 395.5, 869.6, 393.4,
-869.3, 391.2, 866.2, 370.9, 866.2, 370.9, 863.2, 350.6, 862.8, 348.1,
-862.8, 348.1, 862.4, 345.6, 861.4, 338.7, 861.4, 338.7, 860.4, 331.9,
-859.2, 323.7, 857.8, 323.7, 858.0, 315.5, 857.9, 319.1, 859.2, 319.2,
-860.5, 322.8, 865.3, 336.2, 868.2, 335.8, 870.1, 349.6, 872.9, 370.0,
-870.0, 370.4, 869.9, 391.2, 869.9, 393.4, 869.9, 395.5, 869.9, 395.5,
-860.5, 322.8, 859.2, 319.2, 857.9, 319.1, 858.0, 315.5, 856.6, 309.4,
-853.5, 305.6, 856.1, 303.1, 867.9, 292.0, 870.8, 290.2, 886.8, 288.4,
-888.2, 293.8, 888.4, 293.8, 890.0, 299.2, 887.6, 305.1, 884.3, 303.7,
-878.7, 308.3, 869.6, 315.5, 870.9, 319.1, 860.5, 322.8, 694.7, 409.5,
-693.6, 408.7, 690.9, 414.1, 688.8, 413.4, 680.5, 407.7, 674.0, 400.5,
-672.2, 402.1, 672.2, 401.6, 671.4, 401.6, 670.6, 401.0, 682.8, 405.0,
-684.5, 402.5, 694.7, 409.5, 860.4, 331.9, 861.4, 338.7, 861.4, 338.7,
-862.4, 345.6, 858.9, 351.0, 855.0, 348.4, 847.6, 351.2, 844.2, 352.5,
-844.2, 352.5, 840.8, 353.8, 820.4, 361.5, 820.4, 361.5, 799.9, 369.3,
-792.1, 372.2, 792.1, 372.2, 784.2, 375.2, 782.6, 375.8, 782.5, 375.6,
-781.0, 376.4, 805.0, 362.6, 805.1, 362.9, 829.3, 349.3, 835.8, 345.6,
-835.8, 345.6, 842.4, 342.0, 851.4, 336.9, 852.6, 330.4, 860.4, 331.9,
-625.4, 361.6, 634.8, 368.9, 633.8, 370.2, 642.2, 378.7, 646.5, 383.2,
-645.7, 384.7, 650.9, 387.6, 634.8, 376.6, 636.3, 372.9, 618.6, 365.6,
-607.2, 357.8, 607.2, 357.8, 595.7, 350.0, 591.1, 346.9, 591.1, 346.9,
-586.5, 343.8, 560.5, 326.1, 560.5, 326.1, 534.6, 308.4, 515.9, 289.9,
-512.4, 293.3, 490.3, 278.3, 494.6, 281.3, 494.8, 281.0, 499.3, 283.8,
-500.2, 284.4, 500.2, 284.4, 501.2, 285.0, 543.6, 311.2, 543.6, 311.2,
-586.0, 337.3, 592.2, 341.2, 592.2, 341.2, 598.4, 345.0, 611.9, 353.3,
-612.9, 352.0, 625.4, 361.6, 251.1, 59.5, 257.8, 49.7, 257.8, 49.7,
-264.6, 39.9, 245.2, 81.7, 243.4, 80.9, 222.1, 121.8, 201.5, 161.7,
-201.5, 161.7, 180.9, 201.5, 171.0, 220.5, 170.9, 220.4, 161.1, 239.4,
-158.7, 243.9, 156.5, 248.6, 156.5, 248.6, 156.5, 248.6, 158.7, 243.9,
-161.1, 239.4, 180.0, 201.5, 180.0, 201.5, 199.0, 163.7, 219.1, 123.5,
-219.1, 123.5, 239.2, 83.3, 245.2, 71.4, 244.4, 70.9, 251.1, 59.5,
-474.9, 881.8, 473.8, 882.9, 470.8, 882.1, 470.7, 882.0, 466.7, 848.4,
-468.7, 848.1, 466.7, 814.3, 465.8, 799.3, 465.8, 799.3, 464.9, 784.3,
-463.3, 759.1, 463.2, 759.1, 461.7, 734.0, 460.1, 708.3, 460.2, 708.3,
-458.7, 682.6, 457.9, 669.3, 457.9, 669.3, 457.1, 655.9, 455.3, 625.3,
-455.3, 625.3, 453.5, 594.6, 453.1, 588.3, 453.1, 588.3, 452.8, 581.9,
-452.6, 578.7, 452.6, 578.7, 452.4, 575.5, 451.9, 567.7, 451.9, 567.7,
-451.5, 559.9, 449.9, 533.5, 450.3, 533.5, 448.3, 507.2, 454.4, 587.2,
-454.0, 587.3, 459.7, 667.4, 462.4, 705.5, 462.4, 705.5, 465.1, 743.6,
-468.5, 791.8, 468.5, 791.8, 471.9, 840.0, 473.3, 859.1, 473.3, 859.1,
-474.7, 878.3, 474.8, 880.1, 475.7, 881.1, 474.9, 881.8, 140.0, 48.9,
-137.3, 46.4, 136.3, 47.5, 132.6, 46.2, 132.9, 43.7, 122.8, 39.1,
-112.9, 38.9, 117.5, 37.7, 117.5, 37.7, 122.0, 36.6, 132.0, 40.2,
-132.1, 41.6, 140.0, 48.9, 168.8, 133.0, 184.8, 132.8, 185.0, 134.2,
-200.8, 132.6, 200.1, 132.2, 196.4, 139.0, 192.0, 145.4, 182.2, 159.7,
-183.0, 160.3, 172.4, 174.0, 173.0, 173.1, 172.2, 172.5, 172.1, 171.1,
-171.0, 158.5, 171.0, 158.5, 169.9, 145.9, 169.7, 143.6, 169.7, 143.6,
-169.5, 141.3, 169.2, 137.2, 168.1, 133.2, 168.8, 133.0, 142.5, 800.7,
-142.4, 726.7, 142.4, 726.7, 142.2, 652.8, 142.1, 647.8, 143.1, 647.7,
-143.9, 642.7, 144.9, 660.2, 143.8, 660.2, 143.6, 677.7, 143.1, 739.2,
-139.1, 739.4, 142.5, 800.7, 112.4, 570.4, 119.2, 543.2, 122.8, 543.6,
-126.0, 515.9, 127.1, 511.9, 127.4, 512.0, 128.8, 508.0, 135.1, 490.1,
-135.1, 490.1, 141.5, 472.1, 141.7, 471.6, 142.0, 471.5, 141.9, 471.0,
-141.9, 472.3, 141.9, 472.3, 141.9, 473.6, 127.5, 522.1, 130.1, 523.1,
-112.4, 570.4, 132.1, 396.2, 135.2, 425.6, 135.2, 425.6, 138.4, 454.9,
-109.9, 423.8, 122.8, 412.0, 107.3, 369.1, 106.3, 366.5, 106.3, 366.5,
-105.4, 363.9, 98.1, 343.8, 98.1, 343.8, 90.8, 323.7, 84.3, 305.5,
-84.3, 305.5, 77.7, 287.3, 72.4, 272.6, 72.4, 272.6, 67.0, 257.9,
-64.0, 249.4, 64.0, 249.4, 60.9, 240.9, 58.1, 233.2, 58.4, 225.5,
-55.3, 225.4, 59.1, 225.6, 58.8, 233.2, 62.3, 240.9, 63.3, 243.2,
-63.3, 243.2, 64.3, 245.5, 70.8, 259.9, 70.8, 259.9, 77.2, 274.3,
-90.8, 304.5, 90.8, 304.5, 104.4, 334.7, 106.6, 339.6, 106.6, 339.6,
-108.8, 344.5, 120.5, 370.3, 124.8, 369.2, 132.1, 396.2, 73.9, 510.3,
-74.7, 516.4, 72.5, 516.8, 73.7, 522.7, 63.8, 473.9, 62.6, 474.0,
-56.6, 424.6, 60.5, 456.8, 63.0, 456.5, 69.5, 488.4, 71.7, 499.4,
-72.6, 499.3, 73.9, 510.3, -25.5, 438.4, -32.2, 422.8, -39.0, 422.7,
--38.9, 407.2, -40.1, 403.8, -40.7, 403.4, -40.2, 400.0, -38.5, 387.8,
--34.0, 376.1, -34.5, 375.9, -29.2, 377.4, -32.6, 389.3, -30.6, 402.7,
--28.1, 420.5, -20.0, 435.3, -25.5, 438.4, 22.8, 369.7, 23.3, 379.1,
-23.2, 379.1, 23.7, 388.5, 25.5, 440.3, 26.0, 440.3, 28.3, 492.1,
-27.2, 485.5, 25.8, 485.7, 23.2, 479.3, 22.2, 474.7, 23.2, 474.4,
-23.2, 469.6, 23.1, 435.6, 23.1, 435.6, 22.9, 401.7, 22.9, 387.5,
-22.9, 387.5, 22.8, 373.4, 22.8, 371.5, 22.9, 371.5, 22.8, 369.7,
--7.1, 263.0, -3.2, 247.2, -3.2, 247.1, 0.6, 231.3, 2.8, 222.5,
-2.7, 222.5, 5.0, 213.7, 8.2, 201.4, 6.4, 200.6, 11.4, 189.1,
-12.6, 184.6, 11.6, 184.0, 13.9, 180.0, 13.5, 181.6, 14.2, 181.8,
-14.5, 183.5, 16.1, 189.6, 14.8, 189.9, 15.1, 196.4, 21.6, 253.7,
-15.7, 254.3, 16.3, 312.3, 18.3, 298.8, 9.2, 297.5, 2.2, 282.6,
--2.5, 272.8, -6.8, 272.9, -7.1, 263.0, 25.8, 421.8, 24.7, 405.2,
-24.2, 405.2, 23.7, 388.5, 23.2, 379.1, 23.3, 379.1, 22.8, 369.7,
-22.8, 369.7, 22.8, 369.7, 22.8, 369.6, 22.8, 369.6, 22.8, 369.5,
-22.8, 369.5, 19.7, 343.1, 26.0, 342.4, 29.1, 315.3, 35.6, 352.4,
-27.9, 353.7, 26.8, 392.2, 26.7, 393.2, 26.7, 393.2, 26.7, 394.2,
-26.2, 408.0, 20.2, 411.2, 25.8, 421.8, 55.5, 418.2, 55.0, 421.2,
-56.0, 421.4, 56.6, 424.6, 62.6, 474.0, 63.8, 473.9, 73.7, 522.7,
-75.4, 532.3, 71.5, 538.3, 77.0, 541.9, 63.3, 522.7, 61.9, 523.7,
-46.7, 505.5, 40.6, 486.7, 48.9, 484.0, 51.0, 462.5, 53.2, 440.3,
-52.2, 440.2, 55.5, 418.2, 40.2, 617.2, 64.0, 620.8, 64.0, 620.8,
-87.8, 624.5, 87.7, 638.4, 88.9, 638.4, 89.9, 652.3, 89.9, 652.3,
-89.7, 652.3, 89.4, 652.2, 80.8, 650.5, 80.8, 650.5, 72.2, 648.9,
-62.8, 647.0, 59.0, 650.8, 53.4, 645.1, 43.1, 634.9, 38.9, 618.0,
-40.2, 617.2, 53.4, 645.1, 53.2, 643.6, 47.9, 644.1, 42.5, 643.0,
-35.6, 641.6, 35.6, 641.6, 28.8, 640.3, 21.0, 638.8, 17.9, 641.9,
-13.1, 637.2, 7.2, 631.4, 5.5, 627.2, 7.3, 619.4, 7.9, 620.2,
-18.8, 616.3, 18.7, 614.1, 18.6, 614.0, 18.8, 614.0, 19.0, 613.9,
-19.7, 612.1, 29.6, 615.5, 40.2, 617.2, 38.9, 618.0, 43.1, 634.9,
-53.4, 645.1, 75.8, 715.5, 69.0, 712.1, 69.0, 712.1, 62.2, 708.7,
-58.6, 707.9, 59.3, 705.0, 56.3, 701.2, 67.0, 706.5, 68.6, 706.3,
-75.8, 715.5, 789.1, 644.2, 787.8, 644.4, 788.2, 647.9, 787.3, 651.6,
-782.5, 663.2, 776.8, 671.7, 781.4, 676.2, 781.2, 676.2, 781.0, 677.3,
-781.1, 677.4, 776.3, 677.8, 777.6, 692.0, 774.0, 706.6, 765.5, 680.3,
-762.0, 681.4, 750.0, 656.2, 752.4, 646.1, 769.1, 646.7, 789.1, 644.2,
-750.0, 656.2, 748.3, 652.7, 747.7, 652.9, 746.6, 649.2, 741.5, 633.0,
-741.7, 632.9, 736.4, 616.8, 754.8, 618.3, 757.0, 625.1, 773.1, 619.7,
-778.2, 625.5, 784.0, 622.2, 794.7, 621.4, 794.7, 621.4, 794.2, 623.3,
-793.8, 625.1, 791.5, 634.7, 795.2, 639.9, 789.1, 644.2, 769.1, 646.7,
-752.4, 646.1, 750.0, 656.2, 748.1, 484.6, 742.7, 479.3, 750.7, 468.2,
-745.8, 465.5, 781.1, 494.2, 781.2, 494.0, 816.7, 522.4, 809.9, 516.5,
-808.6, 518.0, 800.5, 513.5, 793.3, 509.5, 793.3, 509.5, 786.1, 505.6,
-767.1, 495.1, 762.9, 499.3, 748.1, 484.6, 907.8, 630.0, 907.7, 629.7,
-907.1, 629.8, 907.1, 629.4, 904.8, 615.5, 904.2, 615.5, 903.1, 601.5,
-903.9, 612.2, 904.8, 612.1, 906.6, 622.8, 907.2, 626.4, 907.5, 626.4,
-907.8, 630.0, 595.7, 350.0, 607.2, 357.8, 607.2, 357.8, 618.6, 365.6,
-625.2, 368.3, 623.6, 372.1, 628.6, 378.5, 618.0, 388.9, 630.4, 401.5,
-632.1, 424.4, 604.2, 402.0, 614.7, 388.9, 597.3, 353.4, 596.5, 351.7,
-597.0, 350.8, 595.7, 350.0, 659.2, 449.5, 664.6, 440.6, 665.0, 440.8,
-669.9, 431.6, 678.3, 442.4, 678.3, 442.4, 686.6, 453.1, 683.8, 457.8,
-665.3, 457.3, 659.2, 449.5, 948.0, 402.8, 948.7, 413.7, 949.3, 413.7,
-949.4, 424.6, 949.8, 448.4, 949.8, 448.4, 950.3, 472.2, 948.5, 462.5,
-948.1, 462.5, 945.9, 452.8, 942.7, 430.1, 943.4, 430.0, 940.8, 407.3,
-937.7, 379.2, 924.2, 357.6, 934.6, 351.1, 927.8, 355.4, 942.7, 376.7,
-948.0, 402.8, 934.6, 351.1, 927.7, 310.9, 923.3, 310.1, 925.5, 269.8,
-925.6, 266.1, 939.6, 265.2, 939.3, 263.2, 942.6, 333.0, 943.6, 333.0,
-948.0, 402.8, 942.7, 376.7, 927.8, 355.4, 934.6, 351.1, 914.7, 275.0,
-914.5, 273.9, 918.0, 273.4, 921.4, 271.7, 923.2, 270.9, 923.2, 270.9,
-925.0, 270.0, 925.2, 269.9, 925.5, 269.9, 925.5, 269.8, 923.3, 310.1,
-927.7, 310.9, 934.6, 351.1, 924.2, 357.6, 937.7, 379.2, 940.8, 407.3,
-923.8, 342.2, 924.2, 341.6, 914.7, 275.0, 940.8, 407.3, 943.4, 430.0,
-942.7, 430.1, 945.9, 452.8, 939.9, 425.5, 945.1, 423.2, 933.8, 398.2,
-935.4, 360.4, 940.6, 341.7, 916.8, 321.8, 915.4, 300.0, 914.2, 299.5,
-907.2, 278.6, 907.1, 277.0, 914.9, 275.8, 914.7, 275.0, 924.2, 341.6,
-923.8, 342.2, 940.8, 407.3, 760.6, 353.1, 805.7, 329.5, 805.7, 329.5,
-850.7, 305.9, 823.3, 315.5, 825.7, 322.5, 800.7, 339.1, 776.8, 355.0,
-776.8, 355.0, 752.8, 370.9, 744.0, 376.7, 738.7, 374.4, 735.2, 382.6,
-742.6, 365.5, 745.0, 363.5, 760.6, 353.1, 735.2, 382.6, 717.6, 397.7,
-715.7, 395.5, 696.2, 408.5, 695.5, 409.0, 695.3, 409.6, 694.7, 409.5,
-684.5, 402.5, 682.8, 405.0, 670.6, 401.0, 670.3, 400.8, 670.3, 400.8,
-669.9, 400.6, 716.7, 380.0, 715.3, 376.8, 760.6, 353.1, 745.0, 363.5,
-742.6, 365.5, 735.2, 382.6, 829.3, 349.3, 805.1, 362.9, 805.0, 362.6,
-781.0, 376.4, 775.0, 379.5, 774.6, 378.8, 768.3, 381.2, 766.2, 382.0,
-766.2, 382.0, 764.0, 382.8, 751.7, 387.5, 751.7, 387.5, 739.4, 392.2,
-727.0, 396.9, 727.0, 396.9, 714.5, 401.6, 705.4, 405.0, 702.9, 402.3,
-696.2, 408.5, 715.7, 395.5, 717.6, 397.7, 735.2, 382.6, 738.7, 374.4,
-744.0, 376.7, 752.8, 370.9, 790.2, 357.7, 794.5, 342.5, 829.3, 349.3,
-823.9, 404.0, 808.4, 391.3, 812.1, 386.9, 800.2, 369.8, 800.1, 369.5,
-800.0, 369.2, 799.9, 369.3, 820.4, 361.5, 820.4, 361.5, 840.8, 353.8,
-846.5, 358.5, 834.3, 373.1, 827.8, 392.5, 825.8, 398.3, 822.2, 402.7,
-823.9, 404.0, 520.2, 128.3, 522.8, 135.7, 526.6, 134.1, 530.8, 141.2,
-541.2, 158.9, 540.1, 159.5, 549.5, 177.8, 563.9, 205.9, 566.4, 204.8,
-578.3, 234.0, 576.1, 228.6, 572.1, 230.5, 569.0, 225.3, 554.9, 201.4,
-556.5, 200.5, 544.1, 175.8, 542.3, 172.2, 542.3, 172.2, 540.5, 168.7,
-530.3, 148.5, 527.6, 149.4, 520.2, 128.3, 649.0, 299.7, 641.0, 276.2,
-628.3, 280.5, 607.6, 261.2, 603.6, 257.5, 603.6, 257.5, 599.6, 253.8,
-588.9, 243.9, 586.1, 245.8, 578.3, 234.0, 566.4, 204.8, 563.9, 205.9,
-549.5, 177.8, 581.3, 186.8, 575.0, 209.0, 600.5, 240.3, 624.8, 270.0,
-637.5, 265.7, 649.0, 299.7, 621.3, 242.7, 629.3, 253.2, 624.4, 257.5,
-633.4, 266.7, 601.5, 234.1, 604.4, 231.3, 575.4, 195.8, 570.5, 189.8,
-571.2, 189.2, 565.6, 183.9, 578.8, 196.4, 578.2, 197.1, 590.7, 210.4,
-606.0, 226.5, 607.9, 225.1, 621.3, 242.7, 607.6, 261.2, 628.3, 280.5,
-641.0, 276.2, 649.0, 299.7, 666.4, 315.9, 667.6, 314.8, 683.8, 332.1,
-680.1, 328.1, 678.1, 330.1, 674.0, 326.3, 640.0, 294.7, 639.4, 295.1,
-607.6, 261.2, 538.5, 273.3, 548.2, 283.1, 548.2, 283.1, 557.8, 293.0,
-582.8, 318.3, 582.8, 318.3, 607.8, 343.7, 616.6, 352.7, 617.9, 362.6,
-625.4, 361.6, 612.9, 352.0, 611.9, 353.3, 598.4, 345.0, 568.0, 314.6,
-570.6, 312.1, 542.8, 279.0, 542.2, 278.3, 542.2, 278.2, 541.6, 277.4,
-540.5, 275.8, 540.5, 275.8, 539.3, 274.3, 538.9, 273.8, 538.9, 273.7,
-538.5, 273.3, 671.6, 22.5, 673.6, 20.2, 674.3, 18.8, 676.7, 19.0,
-689.0, 32.0, 698.7, 22.8, 720.8, 26.7, 691.3, 60.0, 674.9, 71.6,
-633.3, 68.0, 650.3, 69.5, 651.8, 44.7, 671.6, 22.5, 633.3, 68.0,
-619.2, 79.9, 616.0, 76.2, 598.7, 84.3, 570.9, 97.4, 571.6, 99.2,
-543.0, 110.6, 550.9, 107.4, 550.2, 105.6, 557.4, 100.7, 560.1, 98.9,
-560.1, 98.9, 562.7, 97.1, 566.7, 94.4, 566.7, 94.4, 570.6, 91.6,
-605.0, 68.1, 605.0, 68.1, 639.3, 44.6, 655.4, 33.6, 667.9, 36.8,
-671.6, 22.5, 651.8, 44.7, 650.3, 69.5, 633.3, 68.0, 623.1, 94.6,
-622.0, 94.0, 621.5, 95.0, 619.9, 95.3, 615.1, 96.3, 615.1, 96.3,
-610.4, 97.3, 600.3, 99.5, 600.3, 99.5, 590.2, 101.6, 580.0, 103.8,
-580.0, 103.8, 569.8, 106.0, 569.2, 106.1, 569.2, 106.1, 568.7, 106.2,
-561.4, 107.8, 561.4, 107.8, 554.1, 109.4, 547.3, 110.8, 547.4, 111.5,
-540.5, 112.3, 541.8, 112.1, 541.7, 111.2, 543.0, 110.6, 571.6, 99.2,
-570.9, 97.4, 598.7, 84.3, 599.2, 84.1, 599.4, 84.6, 600.1, 84.9,
-611.6, 89.7, 612.1, 88.8, 623.1, 94.6, 528.8, -39.2, 527.3, -47.3,
-543.8, -57.6, 542.7, -58.6, 554.3, -47.9, 557.9, -30.8, 549.9, -19.7,
-550.9, -21.1, 530.9, -27.9, 528.8, -39.2, 686.9, -7.4, 688.8, -8.6,
-700.2, 0.9, 699.1, 3.6, 689.6, 2.0, 678.1, 20.5, 676.7, 19.0,
-674.3, 18.8, 673.6, 20.2, 671.6, 22.5, 667.9, 36.8, 655.4, 33.6,
-639.3, 44.6, 643.9, 42.0, 643.1, 40.5, 646.9, 36.3, 666.9, 14.4,
-662.7, 7.7, 686.9, -7.4, 432.7, -43.8, 494.1, -60.9, 493.9, -61.6,
-555.8, -76.8, 554.4, -76.4, 555.1, -74.3, 553.5, -73.6, 548.9, -71.4,
-548.5, -72.3, 543.4, -71.1, 508.4, -62.5, 508.4, -62.5, 473.5, -53.9,
-471.6, -53.4, 471.6, -53.4, 469.8, -53.0, 451.2, -48.4, 451.1, -48.9,
-432.7, -43.8, 223.1, 199.1, 223.1, 199.1, 232.3, 166.6, 241.5, 134.0,
-245.6, 119.3, 245.6, 119.3, 249.8, 104.6, 253.8, 90.4, 253.9, 90.4,
-257.9, 76.1, 260.2, 67.8, 260.2, 67.8, 262.6, 59.6, 266.1, 47.2,
-266.1, 47.2, 269.6, 34.9, 270.1, 33.1, 270.0, 33.1, 270.6, 31.2,
-270.6, 31.2, 270.6, 31.2, 270.6, 31.1, 270.1, 33.0, 270.1, 33.0,
-269.6, 34.9, 266.1, 47.2, 266.1, 47.2, 262.6, 59.6, 260.2, 67.8,
-260.2, 67.8, 257.9, 76.1, 253.9, 90.4, 253.8, 90.4, 249.8, 104.6,
-245.6, 119.3, 245.6, 119.3, 241.5, 134.0, 232.3, 166.6, 223.1, 199.1,
-223.1, 199.1, 149.0, 461.3, 149.0, 461.3, 149.7, 458.6, 150.5, 455.9,
-178.7, 356.3, 175.0, 355.1, 206.8, 256.7, 206.6, 257.2, 214.0, 259.0,
-213.8, 260.1, 210.0, 283.9, 206.3, 283.4, 198.8, 306.6, 194.5, 320.1,
-194.5, 320.1, 190.1, 333.6, 170.3, 394.7, 170.2, 394.7, 150.5, 455.9,
-149.7, 458.6, 149.0, 461.3, 149.0, 461.3, 238.0, 140.7, 239.4, 137.2,
-240.6, 137.6, 241.5, 134.0, 232.3, 166.6, 223.1, 199.1, 223.1, 199.1,
-215.0, 227.9, 215.1, 227.9, 206.8, 256.7, 194.4, 299.9, 194.2, 299.8,
-181.8, 343.0, 179.0, 352.7, 179.1, 352.8, 176.4, 362.5, 165.4, 402.3,
-165.4, 402.3, 154.3, 442.2, 152.4, 449.0, 150.5, 455.9, 150.5, 455.9,
-150.5, 455.9, 152.4, 449.0, 154.3, 442.2, 165.4, 402.3, 165.4, 402.3,
-176.4, 362.5, 179.1, 352.8, 179.0, 352.7, 181.8, 343.0, 189.6, 315.0,
-189.6, 315.0, 197.4, 286.9, 200.1, 277.3, 200.1, 277.3, 202.7, 267.7,
-214.8, 224.2, 214.8, 224.2, 226.9, 180.6, 231.1, 165.6, 231.1, 165.6,
-235.3, 150.5, 235.5, 149.5, 235.5, 149.5, 235.8, 148.5, 236.9, 144.6,
-236.5, 144.5, 238.0, 140.7, 222.1, 121.8, 243.4, 80.9, 245.2, 81.7,
-264.6, 39.9, 267.6, 35.6, 267.6, 35.6, 270.6, 31.2, 269.1, 45.7,
-266.6, 45.4, 262.6, 59.6, 260.2, 67.8, 260.2, 67.8, 257.9, 76.1,
-253.9, 90.4, 253.8, 90.4, 249.8, 104.6, 247.0, 109.7, 244.2, 108.1,
-238.5, 111.6, 230.3, 116.7, 224.7, 114.7, 222.1, 121.8, 161.1, 239.4,
-158.7, 243.9, 156.5, 248.6, 156.5, 248.6, 156.0, 249.5, 156.0, 249.5,
-155.5, 250.4, 147.2, 266.5, 138.9, 282.6, 138.9, 282.6, 138.9, 282.6,
-147.2, 266.5, 155.5, 250.4, 156.0, 249.5, 156.0, 249.5, 156.5, 248.6,
-156.5, 248.6, 158.7, 243.9, 161.1, 239.4, 464.8, 585.3, 461.1, 544.5,
-461.1, 544.5, 457.3, 503.6, 457.3, 502.5, 458.0, 502.4, 458.7, 501.2,
-460.2, 498.5, 460.2, 498.5, 461.7, 495.7, 462.7, 493.9, 463.8, 493.9,
-463.8, 492.1, 465.4, 538.7, 484.5, 550.0, 464.8, 585.3, 209.1, 647.2,
-209.1, 646.8, 209.3, 646.8, 209.5, 646.5, 212.6, 641.2, 212.6, 641.2,
-215.7, 636.0, 218.1, 631.9, 217.3, 628.6, 220.5, 627.8, 219.5, 628.1,
-220.3, 631.4, 220.0, 634.9, 219.1, 648.1, 219.1, 648.1, 218.1, 661.3,
-214.3, 713.1, 225.7, 716.7, 210.6, 764.9, 221.5, 730.2, 210.1, 726.6,
-209.6, 688.4, 209.5, 676.0, 209.5, 676.0, 209.3, 663.7, 209.2, 655.4,
-209.0, 655.4, 209.1, 647.2, 466.7, 814.3, 468.7, 848.1, 466.7, 848.4,
-470.7, 882.0, 470.1, 884.5, 460.2, 884.2, 450.3, 882.5, 450.5, 882.6,
-450.8, 880.6, 451.3, 878.7, 459.0, 846.5, 464.5, 813.9, 466.7, 814.3,
-131.9, 102.5, 132.2, 103.4, 132.6, 103.2, 133.3, 103.9, 134.2, 104.8,
-134.2, 104.8, 135.1, 105.7, 136.0, 106.7, 136.0, 106.7, 136.9, 107.6,
-144.5, 115.4, 149.7, 114.0, 152.1, 123.1, 147.4, 125.8, 147.4, 125.8,
-142.6, 128.4, 133.5, 119.1, 136.9, 115.6, 131.9, 102.5, 172.1, 171.1,
-172.2, 172.5, 173.0, 173.1, 172.4, 174.0, 172.0, 175.3, 170.6, 175.3,
-170.7, 176.4, 170.5, 173.8, 170.6, 173.2, 172.1, 171.1, 188.5, 778.9,
-183.6, 784.8, 193.4, 790.8, 191.6, 801.6, 200.2, 807.9, 172.4, 831.7,
-175.5, 859.3, 176.2, 858.1, 164.7, 854.8, 164.5, 849.8, 163.8, 836.8,
-169.0, 836.5, 173.5, 823.2, 181.0, 801.1, 174.5, 795.6, 188.5, 778.9,
-124.4, 697.1, 123.6, 699.9, 136.9, 701.5, 137.3, 706.8, 135.6, 765.0,
-131.5, 765.1, 133.9, 823.2, 134.3, 819.7, 127.4, 820.2, 124.7, 815.1,
-126.5, 809.3, 123.7, 808.3, 122.4, 801.6, 120.3, 788.4, 120.1, 788.5,
-117.8, 775.3, 118.5, 736.2, 113.8, 734.1, 124.4, 697.1, 117.8, 775.3,
-117.4, 773.4, 117.4, 773.4, 117.1, 771.4, 109.1, 725.5, 98.5, 724.9,
-101.1, 679.7, 100.7, 686.7, 111.3, 687.3, 121.5, 694.9, 123.0, 696.0,
-124.5, 696.1, 124.4, 697.1, 113.8, 734.1, 118.5, 736.2, 117.8, 775.3,
-113.5, 633.8, 113.4, 625.4, 117.1, 625.4, 120.7, 617.0, 122.9, 611.8,
-126.2, 611.0, 125.1, 606.5, 123.9, 649.3, 152.3, 658.4, 137.8, 692.5,
-137.6, 699.6, 137.6, 699.6, 137.3, 706.8, 136.9, 701.5, 123.6, 699.9,
-124.4, 697.1, 124.5, 696.1, 123.0, 696.0, 121.5, 694.9, 116.3, 664.6,
-113.8, 664.4, 113.5, 633.8, 121.5, 694.9, 111.3, 687.3, 100.7, 686.7,
-101.1, 679.7, 100.1, 673.7, 100.0, 673.7, 99.0, 667.8, 98.9, 666.1,
-99.7, 666.1, 100.4, 664.5, 107.0, 649.1, 118.6, 641.1, 113.5, 633.8,
-113.8, 664.4, 116.3, 664.6, 121.5, 694.9, 104.7, 601.1, 108.5, 585.7,
-108.5, 585.7, 112.4, 570.4, 130.1, 523.1, 127.5, 522.1, 141.9, 473.6,
-141.9, 494.5, 141.9, 494.5, 141.9, 515.4, 129.0, 559.9, 126.7, 560.0,
-104.7, 601.1, 74.1, 373.8, 73.1, 372.4, 73.1, 372.4, 72.1, 371.0,
-72.8, 344.1, 73.9, 344.1, 75.7, 317.2, 75.8, 314.6, 76.0, 314.7,
-76.0, 312.1, 75.6, 328.2, 75.5, 328.2, 75.0, 344.2, 74.5, 359.0,
-75.7, 359.1, 74.1, 373.8, 38.1, 251.5, 39.2, 217.8, 39.2, 217.8,
-40.3, 184.2, 38.1, 193.9, 44.4, 195.3, 48.4, 206.4, 49.9, 210.5,
-49.9, 210.5, 51.4, 214.6, 53.3, 220.0, 53.3, 220.0, 55.3, 225.4,
-58.4, 225.5, 58.1, 233.2, 60.9, 240.9, 55.0, 249.8, 37.7, 250.5,
-38.1, 251.5, 69.5, 488.4, 63.0, 456.5, 60.5, 456.8, 56.6, 424.6,
-56.0, 421.4, 55.0, 421.2, 55.5, 418.2, 52.4, 400.5, 52.4, 400.5,
-49.3, 382.8, 48.7, 379.6, 48.7, 379.6, 48.2, 376.4, 46.4, 366.3,
-46.6, 366.3, 44.6, 356.3, 49.8, 382.7, 49.6, 382.7, 54.6, 409.2,
-62.0, 448.8, 64.4, 448.5, 69.5, 488.4, 104.4, 482.2, 105.1, 470.7,
-92.8, 469.9, 81.3, 457.6, 78.2, 454.3, 75.5, 454.7, 75.1, 451.0,
-72.7, 430.8, 69.3, 428.3, 75.8, 409.9, 73.3, 416.9, 79.5, 419.1,
-83.1, 428.3, 93.7, 455.2, 106.0, 456.0, 104.4, 482.2, 9.9, 492.8,
-9.9, 497.9, 7.7, 499.0, 9.8, 503.0, 5.2, 499.5, 3.7, 500.5,
-0.7, 495.9, -0.1, 494.8, -0.5, 495.0, -1.6, 494.1, -10.5, 465.3,
--13.6, 466.3, -25.5, 438.4, -20.0, 435.3, -28.1, 420.5, -30.6, 402.7,
--30.4, 406.9, -28.8, 406.8, -27.0, 410.9, -26.2, 412.5, -26.2, 412.5,
--25.5, 414.1, -7.8, 453.5, -6.0, 452.8, 9.9, 492.8, 23.2, 469.6,
-23.2, 474.4, 22.2, 474.7, 23.2, 479.3, 16.9, 463.2, 22.3, 456.0,
-10.6, 447.0, -2.7, 413.2, -2.5, 413.1, -15.8, 379.3, -17.1, 376.1,
--18.6, 372.9, -18.6, 372.9, -18.6, 372.9, -17.1, 376.1, -15.8, 379.3,
--10.6, 391.4, -10.6, 391.4, -5.3, 403.6, 8.9, 436.6, 10.5, 436.0,
-23.2, 469.6, 16.7, 353.2, 16.8, 359.2, 14.8, 360.0, 16.8, 365.3,
-9.7, 365.8, 1.8, 359.9, 1.7, 354.3, 1.7, 353.8, 12.1, 349.8,
-16.7, 353.2, 26.7, 394.2, 27.9, 354.8, 27.4, 354.7, 29.1, 315.3,
-29.9, 308.7, 29.9, 308.7, 30.7, 302.0, 29.3, 347.1, 28.7, 347.1,
-26.8, 392.2, 26.7, 393.2, 26.7, 393.2, 26.7, 394.2, 51.0, 462.5,
-48.9, 484.0, 40.6, 486.7, 46.7, 505.5, 39.6, 496.9, 38.9, 497.4,
-32.4, 488.3, 31.2, 486.7, 30.0, 486.7, 30.0, 485.1, 29.1, 470.9,
-29.1, 470.9, 28.1, 456.8, 34.9, 416.1, 36.8, 416.2, 48.2, 376.4,
-48.7, 379.6, 48.7, 379.6, 49.3, 382.8, 50.6, 422.6, 51.9, 422.7,
-51.0, 462.5, 49.3, 382.8, 52.4, 400.5, 52.4, 400.5, 55.5, 418.2,
-52.2, 440.2, 53.2, 440.3, 51.0, 462.5, 51.9, 422.7, 50.6, 422.6,
-49.3, 382.8, 43.3, 684.7, 30.8, 668.9, 32.9, 655.3, 18.3, 653.0,
-14.0, 646.2, 10.3, 640.7, 13.1, 637.2, 17.9, 641.9, 21.0, 638.8,
-28.8, 640.3, 40.9, 659.4, 51.2, 675.0, 43.3, 684.7, 713.3, 489.1,
-712.7, 488.6, 713.1, 488.1, 713.0, 487.0, 713.6, 472.0, 710.3, 471.8,
-707.6, 456.6, 726.2, 469.7, 719.9, 478.6, 732.3, 500.6, 732.8, 501.5,
-732.5, 501.9, 733.3, 502.3, 728.0, 499.4, 728.2, 499.0, 723.2, 495.6,
-718.2, 492.3, 717.8, 492.9, 713.3, 489.1, 752.2, 518.9, 756.0, 528.8,
-751.3, 539.8, 754.8, 540.6, 745.8, 538.6, 748.0, 528.5, 741.2, 516.5,
-739.2, 512.8, 736.7, 509.4, 737.1, 509.1, 738.4, 508.1, 740.9, 511.5,
-744.7, 514.0, 748.4, 516.4, 750.9, 515.5, 752.2, 518.9, 839.3, 624.0,
-867.6, 630.5, 867.6, 630.8, 895.8, 637.6, 900.4, 638.7, 903.8, 641.2,
-904.9, 639.8, 891.5, 650.5, 891.5, 650.5, 878.0, 661.2, 856.0, 656.1,
-859.1, 643.0, 840.1, 624.8, 839.7, 624.4, 839.8, 624.1, 839.3, 624.0,
-835.3, 566.8, 835.3, 566.8, 836.0, 567.4, 836.7, 568.0, 857.1, 585.8,
-857.1, 585.8, 877.5, 603.6, 892.3, 616.5, 892.3, 616.5, 907.1, 629.4,
-907.1, 629.8, 907.7, 629.7, 907.8, 630.0, 910.0, 632.0, 912.3, 632.1,
-912.2, 633.9, 909.8, 635.8, 909.8, 635.8, 907.5, 637.7, 884.6, 619.5,
-886.4, 617.2, 865.4, 596.6, 865.0, 596.2, 865.1, 596.1, 864.8, 595.8,
-852.2, 583.3, 852.1, 583.4, 839.5, 570.9, 838.1, 569.5, 838.2, 569.5,
-836.7, 568.0, 836.0, 567.4, 835.3, 566.8, 835.3, 566.8, 845.9, 561.2,
-855.0, 547.1, 858.7, 547.4, 874.5, 539.8, 876.3, 539.0, 881.2, 544.2,
-881.1, 544.3, 877.6, 549.8, 874.2, 547.6, 867.3, 550.9, 856.6, 556.1,
-851.4, 552.7, 845.9, 561.2, 819.2, 520.3, 819.5, 519.3, 820.2, 518.7,
-819.7, 518.2, 817.7, 516.8, 825.6, 507.8, 823.0, 504.7, 839.9, 508.5,
-838.4, 515.2, 853.8, 525.7, 864.1, 532.8, 875.5, 535.3, 874.5, 539.8,
-858.7, 547.4, 855.0, 547.1, 845.9, 561.2, 842.7, 563.6, 839.5, 565.7,
-839.6, 565.9, 826.2, 545.2, 828.8, 543.4, 819.2, 520.3, 839.6, 565.9,
-839.8, 566.4, 838.3, 567.7, 836.7, 568.0, 836.0, 567.4, 835.3, 566.8,
-835.3, 566.8, 824.6, 557.5, 824.6, 557.5, 813.9, 548.1, 813.3, 547.6,
-812.6, 547.5, 812.7, 547.1, 814.9, 535.3, 815.5, 535.4, 818.4, 523.8,
-819.5, 522.9, 818.8, 522.1, 819.2, 520.3, 828.8, 543.4, 826.2, 545.2,
-839.6, 565.9, 906.6, 622.8, 904.8, 612.1, 903.9, 612.2, 903.1, 601.5,
-900.4, 583.4, 900.5, 583.4, 897.9, 565.3, 897.9, 565.1, 897.9, 565.1,
-897.9, 564.9, 899.5, 575.6, 899.5, 575.6, 901.1, 586.3, 903.8, 604.5,
-904.2, 604.5, 906.6, 622.8, 597.3, 353.4, 614.7, 388.9, 604.2, 402.0,
-632.1, 424.4, 634.1, 450.4, 634.1, 450.4, 636.1, 476.4, 636.0, 474.9,
-635.6, 474.9, 635.2, 473.4, 630.7, 459.4, 630.7, 459.4, 626.3, 445.3,
-611.8, 399.4, 586.5, 392.3, 597.3, 353.4, 690.4, 580.0, 687.8, 583.4,
-684.6, 584.2, 685.3, 586.9, 684.2, 587.1, 681.3, 582.6, 682.0, 581.7,
-683.9, 579.2, 689.6, 578.7, 690.4, 580.0, 911.3, 564.9, 903.7, 560.0,
-903.9, 559.8, 896.4, 554.7, 894.9, 553.7, 894.4, 554.0, 893.3, 552.6,
-892.7, 551.8, 893.2, 551.5, 893.0, 550.3, 892.0, 543.8, 892.0, 543.8,
-891.0, 537.3, 890.9, 536.6, 891.2, 536.4, 890.9, 536.0, 895.6, 542.1,
-895.3, 542.3, 899.8, 548.7, 905.1, 556.1, 905.1, 556.1, 910.3, 563.5,
-910.4, 563.6, 910.4, 563.6, 910.5, 563.7, 910.9, 564.3, 910.8, 564.5,
-911.3, 564.9, 881.4, 472.9, 881.6, 434.2, 875.4, 434.2, 869.9, 395.5,
-869.9, 395.5, 869.9, 393.4, 869.9, 391.2, 876.0, 432.0, 881.6, 432.1,
-881.4, 472.9, 921.6, 407.7, 923.8, 415.2, 923.8, 415.2, 926.0, 422.7,
-938.8, 442.6, 928.9, 449.0, 931.8, 475.4, 930.9, 463.2, 930.0, 463.3,
-928.2, 451.2, 924.9, 429.4, 923.3, 429.6, 921.6, 407.7, 903.7, 346.4,
-908.9, 364.0, 920.2, 370.0, 914.0, 381.7, 914.0, 382.1, 914.0, 382.4,
-914.3, 382.6, 916.1, 382.5, 916.7, 390.9, 919.1, 399.2, 917.7, 404.6,
-913.4, 403.5, 907.7, 407.8, 901.1, 412.8, 896.0, 419.1, 894.4, 417.8,
-884.3, 409.7, 889.3, 403.4, 884.2, 389.0, 883.6, 387.4, 882.6, 387.0,
-883.1, 385.9, 892.3, 365.7, 890.9, 348.1, 903.7, 346.4, 842.4, 342.0,
-835.8, 345.6, 835.8, 345.6, 829.3, 349.3, 794.5, 342.5, 790.2, 357.7,
-752.8, 370.9, 776.8, 355.0, 776.8, 355.0, 800.7, 339.1, 819.2, 333.1,
-823.5, 335.2, 842.4, 342.0, 800.7, 339.1, 825.7, 322.5, 823.3, 315.5,
-850.7, 305.9, 851.2, 305.7, 851.6, 305.3, 851.6, 305.3, 853.8, 304.2,
-856.0, 302.9, 856.1, 303.1, 853.5, 305.6, 856.6, 309.4, 858.0, 315.5,
-857.8, 323.7, 859.2, 323.7, 860.4, 331.9, 852.6, 330.4, 851.4, 336.9,
-842.4, 342.0, 823.5, 335.2, 819.2, 333.1, 800.7, 339.1, 847.6, 351.2,
-855.0, 348.4, 858.9, 351.0, 862.4, 345.6, 862.8, 348.1, 862.8, 348.1,
-863.2, 350.6, 856.3, 353.2, 847.8, 352.0, 847.6, 351.2, 765.4, 446.9,
-783.7, 457.2, 781.5, 461.2, 797.5, 475.5, 815.2, 491.3, 815.2, 491.3,
-832.8, 507.0, 837.8, 511.5, 837.8, 511.5, 842.9, 516.0, 848.3, 520.8,
-847.5, 522.2, 853.8, 525.7, 838.4, 515.2, 839.9, 508.5, 823.0, 504.7,
-809.3, 488.9, 785.4, 487.8, 787.2, 480.4, 767.8, 463.2, 767.8, 459.9,
-744.0, 451.0, 728.2, 440.2, 728.2, 440.2, 712.4, 429.4, 706.9, 425.7,
-706.9, 425.7, 701.5, 422.0, 700.7, 419.7, 698.9, 420.3, 696.4, 418.5,
-731.1, 432.1, 733.1, 428.7, 765.4, 446.9, 696.4, 418.5, 692.6, 416.0,
-692.6, 416.0, 688.8, 413.4, 690.9, 414.1, 693.6, 408.7, 694.7, 409.5,
-695.3, 409.6, 695.5, 409.0, 696.2, 408.5, 702.9, 402.3, 705.4, 405.0,
-714.5, 401.6, 743.6, 417.7, 763.2, 449.1, 765.4, 446.9, 733.1, 428.7,
-731.1, 432.1, 696.4, 418.5, 493.2, 122.4, 496.6, 123.8, 497.6, 121.5,
-502.0, 120.5, 507.0, 119.4, 507.6, 117.2, 512.1, 118.4, 515.0, 119.1,
-517.6, 122.8, 516.9, 124.3, 516.4, 125.4, 513.3, 124.0, 509.6, 123.7,
-501.4, 123.1, 500.4, 125.4, 493.2, 122.4, 600.5, 240.3, 575.0, 209.0,
-581.3, 186.8, 549.5, 177.8, 540.1, 159.5, 541.2, 158.9, 530.8, 141.2,
-553.1, 149.7, 548.2, 162.6, 565.6, 183.9, 571.2, 189.2, 570.5, 189.8,
-575.4, 195.8, 588.8, 217.5, 581.6, 227.2, 600.5, 240.3, 575.4, 195.8,
-604.4, 231.3, 601.5, 234.1, 633.4, 266.7, 639.4, 274.1, 639.4, 274.1,
-645.4, 281.4, 659.5, 298.6, 659.5, 298.6, 673.5, 315.8, 673.6, 315.8,
-673.6, 315.8, 673.6, 315.9, 685.1, 330.0, 687.0, 328.8, 696.7, 344.0,
-692.1, 336.9, 690.2, 338.1, 683.8, 332.1, 667.6, 314.8, 666.4, 315.9,
-649.0, 299.7, 637.5, 265.7, 624.8, 270.0, 600.5, 240.3, 581.6, 227.2,
-588.8, 217.5, 575.4, 195.8, 903.1, 280.6, 895.2, 284.4, 895.2, 284.4,
-887.3, 288.2, 883.2, 288.4, 883.0, 285.2, 878.8, 282.3, 854.6, 265.6,
-854.6, 265.6, 830.4, 249.0, 825.3, 245.5, 825.3, 245.5, 820.2, 241.9,
-794.8, 224.5, 794.8, 224.5, 769.5, 207.0, 768.4, 206.2, 768.4, 206.2,
-767.2, 205.4, 760.5, 200.8, 761.2, 199.3, 753.8, 196.2, 766.9, 201.7,
-766.2, 203.2, 778.7, 210.2, 792.9, 218.3, 792.9, 218.3, 807.2, 226.4,
-812.6, 229.4, 812.6, 229.4, 817.9, 232.4, 842.6, 246.4, 842.6, 246.4,
-867.2, 260.3, 875.7, 265.1, 875.7, 265.1, 884.2, 269.9, 892.2, 274.4,
-892.2, 274.4, 900.1, 278.9, 901.6, 279.7, 902.5, 281.0, 903.1, 280.6,
-517.7, 117.1, 520.7, 121.1, 529.1, 114.7, 540.5, 112.3, 547.4, 111.5,
-547.3, 110.8, 554.1, 109.4, 555.5, 109.5, 555.2, 111.7, 556.4, 114.1,
-567.2, 135.5, 567.2, 135.5, 578.0, 156.8, 579.1, 158.9, 579.1, 158.9,
-580.1, 161.0, 582.9, 166.5, 581.2, 168.9, 585.7, 172.0, 550.0, 147.0,
-543.3, 151.0, 517.7, 117.1, 599.6, 253.8, 603.6, 257.5, 603.6, 257.5,
-607.6, 261.2, 639.4, 295.1, 640.0, 294.7, 674.0, 326.3, 671.5, 323.8,
-670.3, 325.0, 667.7, 322.6, 653.1, 308.9, 653.6, 308.4, 639.5, 294.1,
-619.6, 274.0, 619.4, 274.2, 599.6, 253.8, 701.4, 377.5, 684.8, 385.5,
-684.8, 385.5, 668.1, 393.5, 665.9, 393.6, 665.6, 386.2, 663.1, 378.8,
-655.2, 355.4, 654.4, 331.7, 647.2, 331.9, 673.6, 331.1, 691.7, 348.8,
-701.4, 377.5, 439.9, 203.6, 440.2, 203.0, 439.1, 202.4, 438.3, 201.1,
-437.8, 193.7, 427.2, 190.5, 429.1, 186.9, 422.4, 176.3, 422.4, 176.3,
-415.7, 165.8, 412.5, 160.9, 412.5, 160.9, 409.4, 156.0, 409.6, 155.6,
-408.9, 154.9, 408.1, 154.0, 404.3, 148.1, 400.6, 148.2, 400.6, 142.2,
-404.3, 142.2, 404.3, 141.4, 408.0, 140.6, 430.6, 159.3, 436.6, 157.6,
-449.3, 182.6, 452.6, 189.1, 445.7, 193.8, 439.9, 203.6, 600.1, 84.9,
-599.4, 84.6, 599.2, 84.1, 598.7, 84.3, 616.0, 76.2, 619.2, 79.9,
-633.3, 68.0, 674.9, 71.6, 691.3, 60.0, 720.8, 26.7, 723.0, 27.1,
-724.0, 26.2, 725.3, 27.5, 726.3, 27.9, 726.7, 29.3, 727.1, 29.1,
-715.7, 35.3, 715.2, 34.3, 703.4, 39.5, 701.1, 40.5, 701.1, 40.5,
-698.9, 41.5, 662.7, 57.4, 662.7, 57.4, 626.5, 73.3, 613.3, 79.1,
-613.5, 79.6, 600.1, 84.9, 557.4, 100.7, 550.2, 105.6, 550.9, 107.4,
-543.0, 110.6, 541.7, 111.2, 541.8, 112.1, 540.5, 112.3, 529.1, 114.7,
-520.7, 121.1, 517.7, 117.1, 514.9, 117.8, 514.9, 117.8, 512.1, 118.4,
-507.6, 117.2, 507.0, 119.4, 502.0, 120.5, 503.0, 121.8, 506.6, 118.9,
-511.2, 117.2, 534.3, 109.0, 533.6, 105.7, 557.4, 100.7, 387.3, 116.0,
-362.5, 54.7, 365.8, 53.1, 337.7, -6.6, 335.7, -12.3, 336.3, -17.9,
-333.7, -18.1, 341.8, -20.2, 341.8, -20.2, 349.8, -22.3, 351.7, -22.3,
-352.8, -20.5, 353.5, -18.0, 364.2, 19.6, 363.0, 19.9, 372.6, 57.9,
-374.7, 66.1, 374.7, 66.1, 376.8, 74.3, 379.0, 83.0, 379.0, 83.0,
-381.2, 91.7, 383.3, 100.2, 383.3, 100.2, 385.5, 108.7, 386.4, 112.4,
-385.9, 112.6, 387.3, 116.0, 428.6, -42.8, 428.6, -42.8, 430.6, -43.3,
-432.7, -43.8, 451.1, -48.9, 451.2, -48.4, 469.8, -53.0, 451.2, -48.4,
-451.1, -48.9, 432.7, -43.8, 430.6, -43.3, 428.6, -42.8, 428.6, -42.8,
-215.0, 260.7, 214.8, 260.9, 214.4, 260.4, 213.8, 260.1, 214.0, 259.0,
-206.6, 257.2, 206.8, 256.7, 215.1, 227.9, 215.0, 227.9, 223.1, 199.1,
-223.1, 199.1, 232.3, 166.6, 241.5, 134.0, 245.6, 119.3, 245.6, 119.3,
-249.8, 104.6, 253.8, 90.4, 253.9, 90.4, 257.9, 76.1, 257.0, 79.3,
-257.2, 79.3, 256.4, 82.5, 248.0, 118.7, 248.0, 118.7, 239.6, 154.9,
-232.4, 185.6, 232.4, 185.6, 225.3, 216.3, 225.1, 217.0, 225.1, 217.0,
-225.0, 217.7, 220.2, 238.1, 220.2, 238.1, 215.5, 258.6, 215.2, 259.7,
-215.6, 260.1, 215.0, 260.7, 142.3, 443.2, 142.0, 441.3, 141.8, 441.3,
-141.8, 439.5, 136.9, 394.0, 135.5, 394.1, 129.3, 348.8, 129.9, 332.1,
-133.8, 320.3, 146.4, 316.0, 141.9, 317.5, 146.0, 329.6, 145.6, 343.2,
-143.9, 393.2, 144.3, 393.2, 142.3, 443.2, 192.0, 145.4, 196.4, 139.0,
-200.1, 132.2, 200.8, 132.6, 202.0, 132.5, 202.9, 131.1, 202.9, 129.5,
-229.0, 115.3, 223.0, 102.9, 240.6, 74.8, 246.6, 67.8, 245.9, 67.1,
-251.1, 59.5, 244.4, 70.9, 245.2, 71.4, 239.2, 83.3, 236.4, 88.2,
-235.7, 87.8, 232.3, 92.4, 212.1, 118.9, 212.5, 119.2, 192.0, 145.4,
-470.3, 647.3, 471.5, 660.3, 471.7, 660.3, 472.9, 673.2, 473.3, 677.4,
-473.3, 677.4, 473.7, 681.5, 473.9, 684.3, 474.0, 684.3, 474.2, 687.1,
-474.9, 695.0, 474.8, 695.0, 475.5, 702.9, 468.6, 699.9, 471.3, 693.5,
-467.1, 684.1, 466.6, 682.9, 466.6, 682.9, 466.1, 681.7, 464.4, 678.0,
-464.4, 678.0, 462.8, 674.3, 461.2, 670.9, 460.0, 671.0, 459.7, 667.4,
-454.0, 587.3, 454.4, 587.2, 448.3, 507.2, 447.9, 501.2, 448.0, 501.2,
-447.6, 495.3, 446.7, 480.6, 448.0, 480.4, 445.8, 465.9, 459.4, 556.4,
-458.5, 556.6, 470.3, 647.3, 445.8, 465.9, 444.2, 452.7, 445.1, 452.6,
-444.3, 439.3, 443.4, 424.6, 443.4, 424.6, 442.5, 409.9, 442.2, 404.5,
-442.2, 404.5, 441.8, 399.1, 440.9, 383.7, 440.9, 383.7, 440.0, 368.4,
-440.0, 367.4, 440.0, 367.4, 439.9, 366.4, 436.0, 301.4, 432.8, 301.4,
-432.1, 236.3, 432.5, 271.5, 435.8, 271.5, 439.3, 306.7, 441.3, 329.1,
-441.3, 329.1, 443.4, 351.4, 443.9, 357.8, 443.9, 357.8, 444.5, 364.1,
-444.8, 366.7, 444.8, 366.7, 445.0, 369.4, 446.9, 389.4, 446.9, 389.4,
-448.7, 409.5, 452.1, 447.0, 452.1, 447.0, 455.6, 484.5, 456.5, 494.1,
-456.5, 494.1, 457.3, 503.6, 461.1, 544.5, 461.1, 544.5, 464.8, 585.3,
-466.5, 603.5, 466.6, 603.5, 468.2, 621.6, 469.3, 634.5, 469.2, 634.5,
-470.3, 647.3, 458.5, 556.6, 459.4, 556.4, 445.8, 465.9, 465.1, 743.6,
-462.4, 705.5, 462.4, 705.5, 459.7, 667.4, 460.0, 671.0, 461.2, 670.9,
-462.8, 674.3, 463.8, 680.1, 463.0, 680.2, 463.2, 686.2, 464.1, 714.9,
-459.9, 715.7, 465.1, 743.6, 519.2, 392.8, 519.8, 404.6, 512.4, 405.1,
-505.5, 417.3, 505.6, 417.1, 505.4, 417.0, 505.5, 416.9, 512.2, 404.8,
-519.7, 404.5, 519.2, 392.8, 210.2, 770.6, 213.3, 782.9, 209.2, 783.9,
-208.2, 797.2, 205.3, 838.2, 215.2, 875.8, 202.3, 879.2, 197.0, 840.4,
-213.6, 817.8, 191.6, 801.6, 193.4, 790.8, 183.6, 784.8, 188.5, 778.9,
-187.3, 770.3, 187.3, 770.3, 186.1, 761.7, 185.4, 756.6, 185.4, 756.6,
-184.7, 751.5, 184.6, 751.1, 184.7, 751.0, 184.6, 750.6, 192.1, 756.1,
-191.9, 756.3, 199.2, 762.1, 204.7, 766.3, 208.8, 765.3, 210.2, 770.6,
-156.0, 542.8, 153.2, 522.1, 153.2, 522.1, 150.3, 501.5, 169.4, 477.1,
-168.7, 476.5, 187.1, 451.5, 174.1, 457.5, 180.4, 471.0, 173.8, 490.6,
-173.3, 491.8, 173.3, 491.8, 172.9, 493.1, 172.9, 493.2, 172.9, 493.2,
-172.8, 493.4, 170.6, 500.0, 170.6, 500.0, 168.3, 506.7, 165.8, 514.0,
-165.8, 514.0, 163.3, 521.4, 159.6, 532.1, 152.2, 536.9, 156.0, 542.8,
-224.3, 529.2, 225.0, 523.0, 227.6, 517.0, 228.5, 517.2, 229.2, 517.3,
-228.1, 523.5, 227.6, 529.8, 227.1, 537.3, 227.1, 537.3, 226.5, 544.9,
-223.5, 586.4, 225.4, 586.6, 220.5, 627.8, 217.3, 628.6, 218.1, 631.9,
-215.7, 636.0, 217.8, 582.5, 218.6, 582.4, 224.3, 529.2, 348.9, 883.3,
-337.1, 885.5, 330.9, 889.1, 324.4, 882.9, 320.9, 879.5, 326.7, 873.5,
-329.0, 864.1, 329.5, 862.2, 329.5, 862.2, 329.9, 860.4, 336.9, 831.8,
-354.5, 813.4, 343.8, 803.1, 363.8, 822.4, 346.2, 840.7, 348.6, 878.3,
-348.7, 880.8, 349.2, 883.2, 348.9, 883.3, 415.7, 165.8, 422.4, 176.3,
-422.4, 176.3, 429.1, 186.9, 423.5, 197.5, 429.9, 201.0, 430.8, 215.1,
-431.2, 225.7, 431.1, 225.7, 432.1, 236.3, 432.8, 301.4, 436.0, 301.4,
-439.9, 366.4, 439.3, 344.4, 437.2, 344.4, 434.6, 322.4, 429.7, 281.8,
-429.7, 281.8, 424.8, 241.2, 422.1, 218.7, 422.1, 218.7, 419.4, 196.3,
-417.8, 183.6, 417.8, 183.6, 416.3, 171.0, 416.0, 168.4, 417.1, 167.5,
-415.7, 165.8, 101.2, 144.6, 99.2, 144.7, 92.1, 120.2, 94.7, 97.2,
-103.9, 91.9, 101.6, 87.9, 108.5, 78.6, 110.8, 77.7, 113.0, 83.2,
-117.6, 87.9, 121.3, 91.7, 125.8, 93.0, 125.1, 95.6, 117.7, 121.4,
-114.4, 143.8, 101.2, 144.6, 125.1, 95.6, 124.6, 96.2, 129.7, 98.4,
-131.9, 102.5, 136.9, 115.6, 133.5, 119.1, 142.6, 128.4, 137.9, 130.9,
-134.7, 129.7, 133.2, 133.5, 117.6, 142.0, 118.6, 144.8, 102.0, 150.6,
-102.6, 150.4, 100.2, 147.0, 101.2, 144.6, 114.4, 143.8, 117.7, 121.4,
-125.1, 95.6, 117.6, 87.9, 113.0, 83.2, 110.8, 77.7, 108.5, 78.6,
-120.5, 62.4, 130.6, 63.5, 132.6, 46.2, 136.3, 47.5, 137.3, 46.4,
-140.0, 48.9, 141.8, 49.5, 141.8, 49.5, 143.5, 50.2, 158.4, 55.7,
-158.7, 55.1, 173.3, 61.2, 173.1, 61.1, 172.9, 61.9, 172.3, 62.2,
-145.1, 75.3, 146.4, 80.5, 117.6, 87.9, 172.3, 62.2, 164.6, 64.4,
-165.9, 69.1, 159.4, 76.0, 146.4, 90.0, 147.1, 90.7, 133.3, 103.9,
-132.6, 103.2, 132.2, 103.4, 131.9, 102.5, 129.7, 98.4, 124.6, 96.2,
-125.1, 95.6, 125.8, 93.0, 121.3, 91.7, 117.6, 87.9, 146.4, 80.5,
-145.1, 75.3, 172.3, 62.2, 135.1, 105.7, 134.2, 104.8, 134.2, 104.8,
-133.3, 103.9, 147.1, 90.7, 146.4, 90.0, 159.4, 76.0, 160.9, 77.5,
-148.2, 91.7, 135.1, 105.7, 143.5, 50.2, 141.8, 49.5, 141.8, 49.5,
-140.0, 48.9, 132.1, 41.6, 132.0, 40.2, 122.0, 36.6, 158.4, 27.2,
-158.4, 27.2, 194.7, 17.8, 195.2, 17.7, 195.2, 17.7, 195.7, 17.5,
-195.6, 18.0, 195.1, 17.9, 194.6, 18.2, 169.0, 34.2, 169.7, 35.4,
-143.5, 50.2, 210.8, 66.8, 207.8, 66.4, 207.8, 66.4, 204.7, 66.0,
-205.6, 39.5, 199.5, 33.8, 212.6, 13.1, 227.9, 9.2, 227.9, 9.2,
-243.2, 5.2, 235.9, 15.3, 241.7, 19.5, 240.1, 33.8, 230.1, 52.8,
-227.1, 52.1, 210.8, 66.8, 240.1, 33.8, 239.6, 38.3, 241.4, 39.6,
-239.1, 42.7, 234.1, 55.0, 237.6, 56.4, 236.1, 70.1, 225.0, 65.1,
-223.5, 68.4, 210.8, 66.8, 227.1, 52.1, 230.1, 52.8, 240.1, 33.8,
-169.9, 145.9, 171.0, 158.5, 171.0, 158.5, 172.1, 171.1, 170.6, 173.2,
-170.5, 173.8, 170.7, 176.4, 169.6, 178.8, 169.5, 178.8, 167.7, 180.7,
-135.3, 199.1, 139.8, 207.9, 113.9, 236.9, 114.0, 236.7, 113.7, 236.5,
-113.8, 236.3, 141.7, 191.0, 135.0, 185.0, 169.9, 145.9, 142.6, 822.9,
-142.5, 811.8, 142.5, 811.8, 142.5, 800.7, 139.1, 739.4, 143.1, 739.2,
-143.6, 677.7, 143.1, 739.2, 139.1, 739.4, 142.5, 800.7, 142.5, 811.8,
-142.5, 811.8, 142.6, 822.9, 100.4, 664.5, 99.7, 666.1, 98.9, 666.1,
-99.0, 667.8, 96.8, 655.3, 96.8, 655.3, 94.7, 642.9, 94.4, 641.6,
-94.8, 641.5, 95.0, 640.0, 94.9, 629.7, 97.5, 629.7, 100.1, 619.4,
-104.9, 640.9, 100.9, 641.9, 100.4, 664.5, 107.3, 369.1, 122.8, 412.0,
-109.9, 423.8, 138.4, 454.9, 138.8, 458.8, 138.1, 459.0, 139.2, 462.7,
-139.3, 461.7, 138.0, 461.7, 137.6, 460.5, 133.2, 448.6, 133.6, 448.4,
-129.6, 436.3, 118.4, 402.7, 122.3, 400.9, 107.3, 369.1, 38.1, 318.9,
-37.1, 313.2, 37.1, 313.2, 36.1, 307.5, 41.0, 287.6, 38.8, 286.4,
-37.6, 265.6, 36.7, 258.7, 37.8, 258.5, 38.1, 251.5, 37.7, 250.5,
-55.0, 249.8, 60.9, 240.9, 64.0, 249.4, 64.0, 249.4, 67.0, 257.9,
-67.4, 260.4, 65.7, 260.7, 64.4, 263.4, 62.8, 266.8, 62.8, 266.8,
-61.2, 270.1, 49.7, 294.5, 53.0, 296.7, 38.1, 318.9, 75.3, 375.5,
-75.1, 375.7, 76.4, 376.3, 76.5, 377.0, 76.7, 393.4, 76.1, 393.5,
-75.8, 409.9, 69.3, 428.3, 72.7, 430.8, 75.1, 451.0, 74.5, 479.7,
-74.5, 479.7, 74.0, 508.4, 74.0, 509.4, 73.7, 509.4, 73.9, 510.3,
-72.6, 499.3, 71.7, 499.4, 69.5, 488.4, 64.4, 448.5, 62.0, 448.8,
-54.6, 409.2, 55.5, 391.8, 64.2, 391.8, 75.3, 375.5, 54.6, 409.2,
-49.6, 382.7, 49.8, 382.7, 44.6, 356.3, 44.4, 354.9, 44.9, 354.0,
-44.2, 353.6, 59.7, 362.8, 59.2, 363.6, 74.1, 373.8, 74.2, 373.9,
-74.1, 374.0, 74.3, 374.1, 74.8, 374.8, 75.5, 375.2, 75.3, 375.5,
-64.2, 391.8, 55.5, 391.8, 54.6, 409.2, 124.4, 503.4, 112.1, 498.8,
-111.2, 494.5, 104.4, 482.2, 106.0, 456.0, 93.7, 455.2, 83.1, 428.3,
-106.5, 437.0, 99.0, 457.2, 114.9, 486.1, 119.6, 494.7, 117.4, 500.8,
-124.4, 503.4, 81.3, 457.6, 92.8, 469.9, 105.1, 470.7, 104.4, 482.2,
-111.2, 494.5, 112.1, 498.8, 124.4, 503.4, 124.6, 503.6, 124.8, 503.8,
-124.8, 503.8, 118.5, 510.7, 114.8, 518.5, 111.8, 517.1, 102.1, 512.9,
-105.6, 505.0, 99.3, 492.8, 90.3, 475.2, 76.1, 468.4, 81.3, 457.6,
-96.7, 598.9, 93.4, 608.1, 90.6, 608.0, 90.2, 617.3, 87.2, 600.2,
-88.1, 600.0, 84.2, 583.1, 83.7, 575.4, 82.9, 575.5, 81.6, 567.8,
-92.0, 581.1, 93.8, 582.6, 96.7, 598.9, 10.2, 469.4, 10.1, 481.1,
-10.1, 481.1, 9.9, 492.8, -6.0, 452.8, -7.8, 453.5, -25.5, 414.1,
--25.9, 441.5, -3.1, 439.7, 10.2, 469.4, 22.9, 401.7, 23.1, 435.6,
-23.1, 435.6, 23.2, 469.6, 10.5, 436.0, 8.9, 436.6, -5.3, 403.6,
--5.3, 402.7, 21.1, 397.3, 22.9, 401.7, 16.6, 341.0, 16.6, 347.1,
-16.6, 347.1, 16.7, 353.2, 12.1, 349.8, 1.7, 353.8, 1.7, 354.3,
--2.9, 353.3, -5.9, 347.4, -6.7, 348.2, 1.5, 340.8, 6.2, 338.8,
-16.6, 341.0, 41.7, 339.3, 42.9, 346.4, 40.0, 349.1, 44.2, 353.6,
-44.9, 354.0, 44.4, 354.9, 44.6, 356.3, 46.6, 366.3, 46.4, 366.3,
-48.2, 376.4, 36.8, 416.2, 34.9, 416.1, 28.1, 456.8, 27.0, 439.3,
-27.0, 439.3, 25.8, 421.8, 20.2, 411.2, 26.2, 408.0, 26.7, 394.2,
-26.7, 393.2, 26.7, 393.2, 26.8, 392.2, 34.0, 365.7, 30.5, 364.1,
-41.7, 339.3, 26.8, 392.2, 28.7, 347.1, 29.3, 347.1, 30.7, 302.0,
-30.7, 301.8, 30.7, 301.8, 30.7, 301.5, 32.8, 313.5, 34.8, 313.2,
-39.1, 324.7, 39.4, 325.6, 39.3, 325.6, 39.5, 326.5, 43.2, 329.6,
-40.6, 332.9, 41.7, 339.3, 30.5, 364.1, 34.0, 365.7, 26.8, 392.2,
-55.9, 700.7, 49.6, 692.7, 49.6, 692.7, 43.3, 684.7, 51.2, 675.0,
-40.9, 659.4, 28.8, 640.3, 35.6, 641.6, 35.6, 641.6, 42.5, 643.0,
-49.8, 654.0, 45.7, 656.7, 48.9, 670.5, 49.3, 672.3, 49.3, 672.3,
-49.7, 674.1, 52.8, 687.4, 61.0, 692.4, 55.9, 700.7, 782.5, 583.1,
-784.1, 591.8, 781.5, 601.4, 777.5, 602.0, 768.9, 594.4, 768.9, 594.4,
-760.4, 586.8, 759.7, 586.2, 760.7, 585.0, 760.1, 584.4, 759.3, 578.0,
-759.3, 578.0, 758.5, 571.7, 756.7, 556.1, 756.7, 556.1, 754.8, 540.6,
-751.3, 539.8, 756.0, 528.8, 752.2, 518.9, 751.4, 512.5, 751.4, 512.5,
-750.7, 506.1, 750.4, 503.8, 751.0, 503.5, 750.1, 501.5, 758.6, 521.0,
-758.0, 521.3, 765.8, 541.1, 774.1, 562.1, 778.3, 561.3, 782.5, 583.1,
-797.6, 609.5, 797.4, 609.5, 797.2, 611.1, 796.8, 612.7, 796.7, 613.2,
-796.7, 613.2, 796.5, 613.7, 796.0, 615.9, 795.4, 618.0, 795.5, 618.0,
-792.8, 613.9, 791.7, 614.6, 787.9, 611.3, 788.4, 609.3, 793.0, 608.8,
-797.6, 609.5, 741.2, 516.5, 748.0, 528.5, 745.8, 538.6, 754.8, 540.6,
-756.7, 556.1, 756.7, 556.1, 758.5, 571.7, 744.7, 547.0, 744.6, 544.7,
-741.2, 516.5, 712.4, 429.4, 728.2, 440.2, 728.2, 440.2, 744.0, 451.0,
-747.0, 452.1, 744.9, 457.9, 745.7, 464.8, 726.1, 451.4, 714.7, 448.8,
-712.4, 429.4, 790.4, 654.6, 788.9, 653.1, 787.0, 652.4, 787.3, 651.6,
-788.2, 647.9, 787.8, 644.4, 789.1, 644.2, 795.2, 639.9, 791.5, 634.7,
-793.8, 625.1, 795.5, 639.4, 793.9, 640.3, 790.4, 654.6, 864.8, 595.8,
-886.2, 616.7, 887.3, 615.6, 907.5, 637.7, 906.2, 638.7, 906.2, 638.7,
-904.9, 639.8, 903.8, 641.2, 900.4, 638.7, 895.8, 637.6, 878.7, 618.8,
-880.6, 617.1, 865.4, 596.6, 865.0, 596.2, 865.1, 596.1, 864.8, 595.8,
-867.3, 550.9, 874.2, 547.6, 877.6, 549.8, 881.1, 544.3, 882.5, 544.0,
-882.9, 545.5, 884.7, 546.7, 889.0, 549.7, 889.0, 549.7, 893.3, 552.6,
-894.4, 554.0, 894.9, 553.7, 896.4, 554.7, 898.2, 559.5, 897.2, 559.8,
-897.9, 564.9, 897.9, 565.1, 897.9, 565.1, 897.9, 565.3, 887.3, 560.5,
-887.4, 560.3, 876.8, 555.4, 872.1, 553.1, 867.2, 551.2, 867.3, 550.9,
-944.3, 587.3, 944.5, 587.5, 944.7, 587.5, 944.7, 587.6, 944.5, 594.2,
-941.1, 599.0, 944.0, 600.9, 941.0, 598.8, 944.0, 594.1, 944.3, 587.3,
-699.3, 568.1, 694.8, 574.1, 694.8, 574.1, 690.4, 580.0, 689.6, 578.7,
-683.9, 579.2, 682.0, 581.7, 676.7, 578.5, 678.1, 576.1, 674.6, 570.2,
-674.6, 570.3, 674.8, 570.2, 675.1, 570.2, 678.1, 569.9, 678.1, 569.9,
-681.0, 569.7, 683.3, 569.5, 683.3, 569.5, 685.5, 569.3, 689.4, 569.0,
-689.4, 569.0, 693.3, 568.6, 696.3, 568.4, 699.0, 569.1, 699.3, 568.1,
-902.2, 454.4, 901.6, 452.4, 906.3, 450.0, 905.6, 449.0, 911.4, 456.8,
-909.0, 458.6, 912.4, 468.1, 913.8, 472.2, 916.2, 472.8, 915.3, 476.2,
-915.9, 473.9, 913.5, 473.3, 911.8, 470.4, 907.0, 462.4, 904.7, 463.1,
-902.2, 454.4, 904.5, 446.0, 904.0, 446.7, 905.9, 447.7, 905.6, 449.0,
-906.3, 450.0, 901.6, 452.4, 902.2, 454.4, 895.7, 464.8, 895.7, 464.8,
-889.2, 475.3, 886.7, 479.4, 886.2, 479.1, 884.2, 483.4, 888.4, 474.4,
-888.9, 474.6, 893.7, 465.8, 899.1, 455.9, 898.0, 455.1, 904.5, 446.0,
-928.2, 451.2, 930.0, 463.3, 930.9, 463.2, 931.8, 475.4, 932.5, 482.0,
-932.5, 482.0, 933.3, 488.7, 930.5, 470.0, 930.2, 470.0, 928.2, 451.2,
-903.2, 344.7, 903.5, 345.5, 903.5, 345.5, 903.7, 346.4, 890.9, 348.1,
-892.3, 365.7, 883.1, 385.9, 878.4, 386.3, 876.6, 367.7, 870.1, 349.6,
-868.2, 335.8, 865.3, 336.2, 860.5, 322.8, 870.9, 319.1, 869.6, 315.5,
-878.7, 308.3, 895.8, 317.0, 891.2, 326.3, 903.2, 344.7, 878.7, 308.3,
-884.3, 303.7, 887.6, 305.1, 890.0, 299.2, 896.6, 321.9, 896.6, 321.9,
-903.2, 344.7, 891.2, 326.3, 895.8, 317.0, 878.7, 308.3, 881.9, 476.0,
-884.0, 479.6, 882.6, 480.5, 883.2, 484.9, 883.7, 488.2, 882.5, 489.1,
-884.2, 491.5, 852.8, 448.7, 850.1, 450.0, 823.9, 404.0, 822.2, 402.7,
-825.8, 398.3, 827.8, 392.5, 836.4, 396.3, 833.9, 401.9, 840.0, 411.3,
-860.9, 443.7, 862.4, 442.8, 881.9, 476.0, 818.3, 452.4, 792.2, 417.7,
-787.3, 419.8, 768.3, 381.2, 774.6, 378.8, 775.0, 379.5, 781.0, 376.4,
-782.5, 375.6, 782.6, 375.8, 784.2, 375.2, 788.2, 380.2, 786.9, 381.2,
-789.5, 387.2, 790.0, 388.3, 790.0, 388.3, 790.5, 389.3, 801.8, 415.0,
-801.8, 415.0, 813.2, 440.7, 815.7, 446.5, 814.6, 447.4, 818.3, 452.4,
-466.5, 128.1, 478.5, 122.4, 479.7, 123.8, 493.2, 122.4, 500.4, 125.4,
-501.4, 123.1, 509.6, 123.7, 499.2, 128.7, 497.4, 124.9, 485.3, 126.2,
-475.9, 127.1, 474.5, 124.3, 466.5, 128.1, 585.0, 128.1, 613.5, 142.1,
-613.5, 142.1, 641.9, 156.2, 676.6, 173.2, 676.6, 173.2, 711.3, 190.3,
-757.7, 213.1, 757.7, 213.1, 804.0, 236.0, 817.2, 242.5, 818.0, 241.3,
-830.4, 249.0, 854.6, 265.6, 854.6, 265.6, 878.8, 282.3, 875.3, 279.8,
-874.9, 280.3, 871.1, 278.3, 836.2, 260.0, 836.2, 260.0, 801.3, 241.7,
-762.4, 221.2, 762.4, 221.2, 723.5, 200.8, 706.2, 191.7, 706.2, 191.7,
-689.0, 182.7, 673.1, 174.3, 673.1, 174.3, 657.2, 166.0, 632.0, 152.8,
-632.0, 152.8, 606.8, 139.6, 596.9, 134.4, 596.9, 134.4, 587.0, 129.2,
-586.0, 128.7, 586.0, 128.6, 585.0, 128.1, 641.9, 156.2, 613.0, 150.9,
-614.5, 142.7, 587.0, 129.2, 586.0, 128.7, 586.0, 128.6, 585.0, 128.1,
-580.8, 126.0, 580.8, 126.0, 576.5, 124.0, 566.5, 119.0, 565.8, 120.1,
-556.4, 114.1, 555.2, 111.7, 555.5, 109.5, 554.1, 109.4, 561.4, 107.8,
-561.4, 107.8, 568.7, 106.2, 569.6, 106.1, 569.7, 106.9, 570.7, 107.6,
-589.3, 120.3, 589.3, 120.3, 607.9, 133.0, 624.9, 144.6, 623.4, 152.8,
-641.9, 156.2, 590.7, 210.4, 578.2, 197.1, 578.8, 196.4, 565.6, 183.9,
-548.2, 162.6, 553.1, 149.7, 530.8, 141.2, 526.6, 134.1, 522.8, 135.7,
-520.2, 128.3, 518.5, 126.3, 518.5, 126.3, 516.9, 124.3, 517.6, 122.8,
-515.0, 119.1, 512.1, 118.4, 514.9, 117.8, 514.9, 117.8, 517.7, 117.1,
-543.3, 151.0, 550.0, 147.0, 585.7, 172.0, 592.1, 178.0, 592.9, 180.0,
-594.1, 188.7, 595.5, 199.2, 590.6, 210.4, 590.7, 210.4, 594.1, 188.7,
-611.0, 203.2, 605.0, 210.3, 615.8, 231.9, 618.6, 237.3, 617.0, 239.1,
-621.3, 242.7, 607.9, 225.1, 606.0, 226.5, 590.7, 210.4, 590.6, 210.4,
-595.5, 199.2, 594.1, 188.7, 639.5, 294.1, 653.6, 308.4, 653.1, 308.9,
-667.7, 322.6, 668.5, 315.8, 652.9, 313.9, 638.2, 305.2, 631.6, 301.3,
-631.6, 301.3, 625.1, 297.5, 617.2, 292.8, 617.2, 292.8, 609.4, 288.2,
-606.9, 286.8, 606.9, 286.8, 604.4, 285.3, 563.4, 261.1, 563.4, 261.1,
-522.4, 236.9, 515.1, 232.6, 515.4, 231.9, 507.7, 228.3, 542.5, 244.8,
-542.1, 245.5, 576.5, 262.7, 583.2, 266.0, 583.2, 266.0, 589.9, 269.3,
-614.7, 281.7, 616.9, 278.6, 639.5, 294.1, 645.5, 326.8, 643.2, 325.5,
-644.4, 323.5, 643.3, 320.2, 640.7, 312.7, 641.4, 305.5, 638.2, 305.2,
-652.9, 313.9, 668.5, 315.8, 667.7, 322.6, 670.3, 325.0, 671.5, 323.8,
-674.0, 326.3, 678.1, 330.1, 680.1, 328.1, 683.8, 332.1, 690.2, 338.1,
-692.1, 336.9, 696.7, 344.0, 707.9, 354.5, 705.9, 360.5, 719.2, 365.0,
-680.3, 351.9, 681.2, 347.8, 645.5, 326.8, 719.2, 365.0, 720.8, 365.9,
-721.7, 367.9, 722.0, 367.6, 711.7, 372.6, 711.7, 372.6, 701.4, 377.5,
-691.7, 348.8, 673.6, 331.1, 647.2, 331.9, 645.5, 330.3, 647.2, 327.6,
-645.5, 326.8, 681.2, 347.8, 680.3, 351.9, 719.2, 365.0, 557.8, 293.0,
-554.0, 281.8, 548.5, 283.7, 539.3, 274.3, 538.9, 273.8, 538.9, 273.7,
-538.5, 273.3, 507.0, 241.3, 500.5, 245.8, 475.5, 209.3, 485.1, 223.3,
-491.6, 218.8, 507.7, 228.3, 515.4, 231.9, 515.1, 232.6, 522.4, 236.9,
-528.3, 242.6, 526.9, 244.1, 531.4, 251.2, 544.6, 272.1, 550.1, 270.2,
-557.8, 293.0, 642.2, 378.7, 633.8, 370.2, 634.8, 368.9, 625.4, 361.6,
-617.9, 362.6, 616.6, 352.7, 607.8, 343.7, 603.3, 334.3, 607.1, 332.5,
-606.5, 321.3, 605.9, 310.6, 602.1, 301.3, 605.3, 300.0, 605.8, 299.8,
-609.5, 309.1, 613.8, 318.3, 628.0, 348.5, 633.7, 347.0, 642.2, 378.7,
-539.3, 274.3, 568.9, 309.5, 571.0, 308.0, 598.4, 345.0, 592.2, 341.2,
-592.2, 341.2, 586.0, 337.3, 562.7, 309.6, 564.4, 308.2, 542.8, 279.0,
-542.2, 278.3, 542.2, 278.2, 541.6, 277.4, 540.5, 275.8, 540.5, 275.8,
-539.3, 274.3, 752.7, 51.9, 761.8, 53.9, 768.8, 63.8, 769.2, 63.4,
-761.8, 72.8, 753.9, 66.6, 738.7, 69.9, 734.5, 70.8, 731.7, 69.2,
-730.2, 71.7, 735.2, 63.3, 738.0, 64.9, 745.7, 58.1, 749.2, 55.0,
-750.0, 51.3, 752.7, 51.9, 646.9, 36.3, 643.1, 40.5, 643.9, 42.0,
-639.3, 44.6, 605.0, 68.1, 605.0, 68.1, 570.6, 91.6, 571.5, 91.2,
-568.6, 86.9, 569.6, 86.2, 606.8, 59.2, 607.4, 59.9, 646.9, 36.3,
-570.6, -20.1, 571.5, -18.3, 569.8, -17.4, 568.9, -14.7, 563.3, 3.6,
-558.4, 22.2, 557.7, 22.0, 548.9, 19.7, 553.8, 1.1, 549.9, -19.7,
-557.9, -30.8, 554.3, -47.9, 542.7, -58.6, 542.5, -60.0, 545.4, -61.3,
-545.1, -61.8, 559.4, -42.1, 559.6, -41.9, 570.6, -20.1, 545.1, -61.8,
-544.5, -62.9, 546.5, -63.9, 548.0, -65.9, 548.5, -66.6, 548.5, -66.6,
-549.1, -67.4, 551.3, -70.5, 551.3, -70.5, 553.5, -73.6, 555.1, -74.3,
-554.4, -76.4, 555.8, -76.8, 573.0, -82.6, 573.8, -87.4, 590.9, -86.2,
-589.5, -86.3, 589.1, -80.4, 587.3, -74.6, 582.2, -57.8, 582.2, -57.8,
-577.0, -41.0, 573.8, -30.5, 568.1, -21.8, 570.6, -20.1, 559.6, -41.9,
-559.4, -42.1, 545.1, -61.8, 372.6, 57.9, 363.0, 19.9, 364.2, 19.6,
-353.5, -18.0, 364.4, -22.7, 397.1, 8.3, 406.0, 43.4, 406.7, 46.2,
-376.1, 61.9, 372.6, 57.9, 413.0, -8.1, 406.0, -8.8, 406.1, -14.5,
-400.1, -21.7, 400.6, -21.2, 401.0, -21.6, 402.0, -21.5, 407.8, -20.9,
-407.8, -20.9, 413.6, -20.3, 432.0, -18.4, 432.0, -18.4, 450.5, -16.5,
-460.8, -15.4, 461.5, -12.2, 471.0, -14.3, 442.7, -8.0, 441.4, -5.2,
-413.0, -8.1, 376.9, -24.1, 383.0, -17.7, 390.0, -26.2, 400.1, -21.7,
-406.1, -14.5, 406.0, -8.8, 413.0, -8.1, 426.1, 5.7, 426.1, 5.7,
-439.2, 19.5, 452.4, 33.4, 452.6, 33.3, 465.6, 47.3, 464.7, 46.3,
-464.5, 46.4, 463.4, 45.6, 462.7, 45.0, 462.7, 45.0, 462.0, 44.4,
-419.5, 10.2, 413.9, 15.4, 376.9, -24.1, 543.4, -71.1, 548.5, -72.3,
-548.9, -71.4, 553.5, -73.6, 551.3, -70.5, 551.3, -70.5, 549.1, -67.4,
-546.8, -66.8, 543.5, -71.2, 543.4, -71.1, 198.8, 306.6, 206.3, 283.4,
-210.0, 283.9, 213.8, 260.1, 214.4, 260.4, 214.8, 260.9, 215.0, 260.7,
-220.4, 263.4, 226.1, 264.6, 225.8, 266.0, 222.7, 280.5, 217.0, 279.3,
-208.2, 292.5, 203.5, 299.5, 200.1, 299.0, 198.8, 306.6, 147.1, 478.3,
-146.6, 474.8, 146.6, 474.8, 146.2, 471.3, 146.7, 466.2, 147.4, 466.2,
-149.0, 461.3, 169.4, 397.4, 166.0, 396.1, 190.1, 333.6, 191.7, 329.4,
-197.8, 326.4, 200.5, 328.0, 201.3, 328.4, 198.8, 332.8, 197.1, 337.6,
-193.8, 346.9, 193.8, 346.9, 190.4, 356.3, 186.4, 367.7, 186.4, 367.7,
-182.4, 379.0, 167.7, 420.4, 167.8, 420.5, 153.1, 461.8, 153.0, 462.3,
-152.8, 462.2, 152.7, 462.6, 150.9, 467.6, 150.9, 467.6, 149.2, 472.6,
-148.1, 475.5, 146.9, 478.2, 147.1, 478.3, 154.3, 442.2, 152.4, 449.0,
-150.5, 455.9, 150.5, 455.9, 149.7, 458.6, 149.0, 461.3, 149.0, 461.3,
-147.4, 466.2, 146.7, 466.2, 146.2, 471.3, 144.2, 457.2, 144.2, 457.2,
-142.3, 443.2, 144.3, 393.2, 143.9, 393.2, 145.6, 343.2, 145.5, 345.7,
-145.8, 345.7, 146.0, 348.1, 147.8, 368.2, 147.8, 368.2, 149.5, 388.3,
-149.9, 392.5, 149.9, 392.5, 150.3, 396.7, 152.3, 419.4, 154.2, 419.4,
-154.3, 442.2, 179.6, 252.5, 179.3, 254.6, 178.6, 254.5, 177.5, 256.5,
-176.7, 258.1, 176.2, 259.8, 175.9, 259.7, 165.2, 256.7, 165.2, 255.9,
-155.5, 250.4, 156.0, 249.5, 156.0, 249.5, 156.5, 248.6, 168.7, 225.0,
-162.9, 207.3, 180.9, 201.5, 174.6, 203.5, 180.4, 221.2, 179.9, 241.0,
-179.8, 246.7, 180.5, 246.8, 179.6, 252.5, 158.1, 293.8, 157.1, 294.1,
-157.4, 294.9, 156.8, 296.1, 151.6, 306.0, 151.6, 306.0, 146.4, 316.0,
-133.8, 320.3, 129.9, 332.1, 129.3, 348.8, 126.7, 329.9, 126.7, 329.9,
-124.1, 311.0, 124.0, 309.1, 124.5, 307.9, 126.2, 307.0, 141.5, 299.2,
-141.8, 299.5, 158.1, 293.8, 126.2, 307.0, 128.3, 307.6, 131.2, 297.3,
-136.3, 287.5, 137.6, 285.0, 137.6, 285.0, 138.9, 282.6, 138.9, 282.6,
-147.2, 266.5, 155.5, 250.4, 165.2, 255.9, 165.2, 256.7, 175.9, 259.7,
-178.1, 263.9, 172.0, 267.1, 168.1, 274.5, 163.1, 284.1, 165.8, 287.7,
-158.1, 293.8, 141.8, 299.5, 141.5, 299.2, 126.2, 307.0, 136.3, 287.5,
-131.2, 297.3, 128.3, 307.6, 126.2, 307.0, 124.5, 307.9, 124.0, 309.1,
-124.1, 311.0, 121.5, 292.0, 120.5, 292.1, 118.9, 272.9, 118.7, 271.9,
-118.7, 271.9, 118.6, 270.9, 117.5, 263.1, 114.0, 261.7, 116.4, 255.3,
-129.2, 247.8, 136.6, 240.3, 134.9, 228.4, 137.5, 226.5, 136.8, 225.6,
-138.8, 222.8, 141.1, 225.7, 138.6, 227.7, 138.4, 232.7, 137.5, 255.7,
-137.5, 255.7, 136.6, 278.7, 136.5, 283.1, 137.7, 283.6, 136.3, 287.5,
-467.1, 684.1, 471.3, 693.5, 468.6, 699.9, 475.5, 702.9, 476.7, 715.9,
-476.8, 715.9, 478.0, 728.9, 480.1, 750.5, 480.0, 750.5, 482.0, 772.1,
-482.3, 775.1, 482.3, 775.1, 482.5, 778.1, 483.9, 793.3, 485.3, 808.6,
-485.3, 808.6, 486.4, 819.9, 486.4, 819.9, 487.4, 831.1, 488.3, 840.2,
-487.8, 840.3, 489.1, 849.3, 483.2, 808.5, 483.6, 808.5, 478.2, 767.6,
-477.9, 765.3, 477.9, 765.2, 477.6, 762.9, 474.2, 737.2, 474.2, 737.2,
-470.8, 711.5, 469.0, 697.8, 461.8, 693.8, 467.1, 684.1, 537.5, 359.8,
-537.4, 359.8, 528.4, 376.3, 519.2, 392.8, 519.7, 404.5, 512.2, 404.8,
-505.5, 416.9, 507.3, 414.7, 505.3, 413.0, 505.1, 409.1, 504.5, 396.8,
-498.4, 392.8, 503.9, 384.4, 514.7, 368.1, 529.8, 355.6, 537.5, 359.8,
-503.9, 384.4, 505.6, 383.9, 503.6, 377.8, 503.3, 371.1, 503.1, 368.1,
-503.1, 368.1, 503.0, 365.1, 501.6, 337.8, 501.6, 337.8, 500.3, 310.6,
-500.0, 303.7, 503.1, 301.2, 499.6, 296.9, 519.1, 327.4, 519.1, 327.4,
-538.6, 357.9, 538.9, 358.3, 538.4, 359.2, 537.5, 359.8, 529.8, 355.6,
-514.7, 368.1, 503.9, 384.4, 481.0, 448.9, 480.0, 450.8, 484.4, 452.5,
-484.1, 455.6, 483.6, 460.0, 481.8, 459.8, 479.4, 464.0, 471.6, 478.1,
-471.6, 478.1, 463.8, 492.1, 463.8, 493.9, 462.7, 493.9, 461.7, 495.7,
-471.1, 472.2, 468.8, 470.9, 481.0, 448.9, 505.1, 409.1, 505.3, 413.0,
-507.3, 414.7, 505.5, 416.9, 505.4, 417.0, 505.6, 417.1, 505.5, 417.3,
-495.2, 435.9, 495.2, 435.8, 484.8, 454.4, 484.4, 455.0, 483.9, 455.4,
-484.1, 455.6, 484.4, 452.5, 480.0, 450.8, 481.0, 448.9, 480.5, 447.8,
-480.5, 447.8, 480.0, 446.7, 467.1, 418.0, 463.1, 419.2, 454.1, 389.4,
-455.0, 392.5, 459.0, 391.3, 463.9, 393.2, 484.5, 401.1, 486.1, 398.3,
-505.1, 409.1, 180.9, 723.4, 179.3, 711.9, 179.3, 711.9, 177.7, 700.4,
-188.2, 671.9, 189.3, 670.2, 209.1, 647.2, 209.0, 655.4, 209.2, 655.4,
-209.3, 663.7, 208.7, 667.8, 207.4, 667.6, 205.6, 671.5, 199.2, 685.0,
-199.2, 685.0, 192.8, 698.4, 186.8, 710.9, 188.3, 722.5, 180.9, 723.4,
-157.5, 553.7, 156.8, 548.2, 156.8, 548.2, 156.0, 542.8, 152.2, 536.9,
-159.6, 532.1, 163.3, 521.4, 165.9, 522.6, 161.2, 532.8, 159.2, 544.2,
-158.4, 549.0, 156.4, 553.2, 157.5, 553.7, 209.5, 646.5, 209.3, 646.8,
-209.1, 646.8, 209.1, 647.2, 189.3, 670.2, 188.2, 671.9, 177.7, 700.4,
-176.4, 690.9, 177.5, 690.6, 175.1, 681.5, 173.8, 677.2, 174.5, 677.0,
-173.9, 672.6, 177.4, 657.8, 178.9, 658.2, 184.0, 643.8, 187.0, 635.3,
-187.0, 635.3, 189.9, 626.9, 194.9, 612.9, 204.3, 603.4, 199.8, 598.9,
-214.1, 613.2, 204.9, 622.6, 209.5, 646.5, 199.8, 598.9, 204.3, 563.1,
-235.1, 554.2, 224.3, 529.2, 218.6, 582.4, 217.8, 582.5, 215.7, 636.0,
-212.6, 641.2, 212.6, 641.2, 209.5, 646.5, 204.9, 622.6, 214.1, 613.2,
-199.8, 598.9, 464.9, 784.3, 465.8, 799.3, 465.8, 799.3, 466.7, 814.3,
-464.5, 813.9, 459.0, 846.5, 451.3, 878.7, 452.4, 874.2, 451.9, 874.1,
-452.6, 869.4, 453.3, 865.0, 453.3, 865.0, 453.9, 860.5, 457.1, 838.5,
-457.1, 838.5, 460.2, 816.6, 462.5, 801.0, 462.5, 801.0, 464.7, 785.5,
-464.8, 784.9, 464.9, 784.9, 464.9, 784.3, 387.9, 282.3, 363.9, 266.8,
-367.7, 256.8, 355.0, 227.9, 354.1, 225.8, 357.9, 224.1, 360.7, 220.3,
-361.3, 219.5, 361.3, 219.5, 361.9, 218.8, 364.7, 215.0, 364.7, 215.0,
-367.6, 211.2, 372.2, 205.9, 371.9, 205.6, 376.1, 199.9, 376.0, 199.9,
-376.8, 204.7, 377.5, 209.4, 377.6, 210.3, 377.6, 210.3, 377.8, 211.3,
-380.0, 227.2, 380.0, 227.2, 382.3, 243.1, 382.5, 244.4, 382.5, 244.4,
-382.7, 245.8, 385.3, 264.0, 377.8, 275.8, 387.9, 282.3, 136.9, 107.6,
-136.0, 106.7, 136.0, 106.7, 135.1, 105.7, 148.2, 91.7, 160.9, 77.5,
-159.4, 76.0, 165.9, 69.1, 164.6, 64.4, 172.3, 62.2, 172.9, 61.9,
-173.1, 61.1, 173.3, 61.2, 174.9, 61.2, 174.9, 61.8, 176.5, 62.4,
-178.2, 59.9, 187.3, 66.3, 198.1, 70.3, 196.4, 70.1, 195.9, 73.5,
-193.8, 76.7, 166.2, 93.6, 165.9, 93.3, 136.9, 107.6, 193.8, 76.7,
-181.1, 95.5, 173.7, 93.6, 168.4, 114.3, 160.3, 118.7, 160.3, 118.7,
-152.1, 123.1, 149.7, 114.0, 144.5, 115.4, 136.9, 107.6, 165.9, 93.3,
-166.2, 93.6, 193.8, 76.7, 194.6, 18.2, 195.1, 17.9, 195.6, 18.0,
-195.7, 17.5, 204.2, 15.3, 204.2, 15.3, 212.6, 13.1, 199.5, 33.8,
-205.6, 39.5, 204.7, 66.0, 203.1, 65.8, 203.1, 65.8, 201.4, 65.6,
-196.5, 42.2, 197.4, 42.0, 194.6, 18.2, 201.4, 65.6, 189.0, 64.0,
-179.9, 57.6, 176.5, 62.4, 174.9, 61.8, 174.9, 61.2, 173.3, 61.2,
-158.7, 55.1, 158.4, 55.7, 143.5, 50.2, 169.7, 35.4, 169.0, 34.2,
-194.6, 18.2, 197.4, 42.0, 196.5, 42.2, 201.4, 65.6, 169.5, 141.3,
-169.7, 143.6, 169.7, 143.6, 169.9, 145.9, 135.0, 185.0, 141.7, 191.0,
-113.8, 236.3, 122.6, 230.0, 103.4, 212.0, 107.5, 190.5, 109.2, 182.0,
-116.5, 183.4, 125.4, 176.3, 147.5, 158.8, 146.3, 157.1, 169.5, 141.3,
-157.8, 679.7, 171.7, 714.9, 171.3, 715.1, 184.6, 750.6, 184.7, 751.0,
-184.6, 751.1, 184.7, 751.5, 185.4, 756.6, 185.4, 756.6, 186.1, 761.7,
-175.0, 733.1, 176.1, 732.7, 166.1, 703.6, 162.0, 691.7, 162.5, 691.5,
-157.8, 679.7, 120.7, 617.0, 117.1, 625.4, 113.4, 625.4, 113.5, 633.8,
-118.6, 641.1, 107.0, 649.1, 100.4, 664.5, 100.9, 641.9, 104.9, 640.9,
-100.1, 619.4, 102.4, 610.2, 102.4, 610.2, 104.7, 601.1, 126.7, 560.0,
-129.0, 559.9, 141.9, 515.4, 141.9, 517.7, 141.9, 517.7, 141.9, 520.0,
-131.8, 568.6, 132.7, 568.8, 120.7, 617.0, 141.9, 520.0, 142.0, 543.5,
-142.0, 543.5, 142.0, 567.0, 142.1, 567.7, 141.4, 567.7, 141.4, 568.5,
-144.0, 585.9, 125.7, 587.3, 125.1, 606.5, 126.2, 611.0, 122.9, 611.8,
-120.7, 617.0, 132.7, 568.8, 131.8, 568.6, 141.9, 520.0, 69.2, 152.0,
-67.3, 142.3, 67.1, 140.6, 70.8, 131.7, 69.4, 135.0, 72.3, 136.2,
-73.9, 140.7, 79.7, 157.5, 83.2, 157.1, 85.5, 174.4, 84.6, 167.9,
-81.1, 168.4, 76.7, 162.3, 73.0, 157.2, 70.3, 157.7, 69.2, 152.0,
-67.4, 174.6, 67.4, 174.8, 67.4, 174.8, 67.4, 175.0, 67.2, 178.0,
-67.2, 178.0, 66.9, 181.0, 64.6, 210.9, 69.8, 212.3, 62.3, 240.9,
-58.8, 233.2, 59.1, 225.6, 55.3, 225.4, 53.3, 220.0, 53.3, 220.0,
-51.4, 214.6, 54.3, 199.5, 57.2, 200.1, 63.0, 185.6, 63.0, 185.5,
-63.0, 185.5, 63.0, 185.5, 65.2, 180.0, 65.2, 180.0, 67.4, 174.6,
-55.5, 87.2, 51.3, 86.0, 53.0, 79.9, 50.5, 72.6, 49.1, 68.4,
-49.1, 68.4, 47.6, 64.1, 47.2, 62.9, 46.6, 62.8, 46.8, 61.7,
-47.1, 58.6, 46.5, 57.3, 48.5, 55.6, 51.1, 57.0, 52.5, 54.8,
-56.4, 53.5, 71.2, 48.0, 71.7, 49.5, 87.1, 45.6, 87.3, 45.5,
-87.3, 45.5, 87.6, 45.5, 84.6, 48.1, 88.5, 52.6, 89.5, 59.8,
-88.8, 71.2, 92.0, 76.9, 85.1, 82.4, 75.0, 90.6, 68.6, 90.9,
-55.5, 87.2, 85.1, 82.4, 93.5, 106.7, 82.1, 112.3, 73.9, 140.7,
-72.3, 136.2, 69.4, 135.0, 70.8, 131.7, 65.7, 116.8, 65.7, 116.8,
-60.6, 101.9, 58.2, 95.1, 58.2, 95.1, 55.9, 88.2, 55.7, 87.7,
-55.6, 87.2, 55.5, 87.2, 68.6, 90.9, 75.0, 90.6, 85.1, 82.4,
-93.3, 87.3, 94.0, 92.2, 96.3, 96.3, 94.7, 97.2, 92.1, 120.2,
-99.2, 144.7, 101.2, 144.6, 100.2, 147.0, 102.6, 150.4, 102.0, 150.6,
-104.8, 170.5, 104.8, 170.5, 107.5, 190.5, 103.4, 212.0, 122.6, 230.0,
-113.8, 236.3, 113.7, 236.5, 114.0, 236.7, 113.9, 236.9, 113.1, 237.7,
-114.8, 240.2, 114.4, 240.4, 111.2, 244.9, 118.9, 253.8, 116.4, 255.3,
-114.0, 261.7, 117.5, 263.1, 118.6, 270.9, 119.2, 266.7, 117.0, 266.4,
-115.5, 261.9, 104.1, 228.6, 97.0, 229.5, 92.6, 195.2, 85.9, 142.1,
-92.2, 141.2, 93.3, 87.3, 92.6, 195.2, 92.7, 191.9, 91.4, 191.9,
-90.3, 188.5, 87.9, 181.5, 87.9, 181.5, 85.5, 174.4, 83.2, 157.1,
-79.7, 157.5, 73.9, 140.7, 82.1, 112.3, 93.5, 106.7, 85.1, 82.4,
-92.0, 76.9, 88.8, 71.2, 89.5, 59.8, 91.4, 73.5, 91.4, 73.5,
-93.3, 87.3, 92.2, 141.2, 85.9, 142.1, 92.6, 195.2, 75.0, 344.2,
-75.5, 328.2, 75.6, 328.2, 76.0, 312.1, 76.6, 299.7, 83.2, 291.6,
-77.7, 287.3, 84.3, 305.5, 84.3, 305.5, 90.8, 323.7, 90.3, 334.3,
-75.0, 344.2, 75.0, 344.2, 75.7, 317.2, 73.9, 344.1, 72.8, 344.1,
-72.1, 371.0, 66.5, 363.4, 66.5, 363.4, 60.9, 355.8, 62.3, 336.1,
-82.3, 326.3, 75.7, 317.2, 114.9, 486.1, 99.0, 457.2, 106.5, 437.0,
-83.1, 428.3, 79.5, 419.1, 73.3, 416.9, 75.8, 409.9, 76.1, 393.5,
-76.7, 393.4, 76.5, 377.0, 75.7, 380.0, 79.3, 381.0, 82.2, 384.9,
-82.6, 385.4, 82.7, 385.3, 82.9, 385.9, 88.9, 404.1, 88.8, 404.2,
-94.6, 422.5, 104.7, 454.3, 119.4, 483.8, 114.9, 486.1, 74.0, 508.4,
-74.5, 479.7, 74.5, 479.7, 75.1, 451.0, 75.5, 454.7, 78.2, 454.3,
-81.3, 457.6, 76.1, 468.4, 90.3, 475.2, 99.3, 492.8, 97.9, 502.2,
-73.8, 508.0, 74.0, 508.4, 99.3, 492.8, 105.6, 505.0, 102.1, 512.9,
-111.8, 517.1, 106.8, 534.3, 97.8, 531.6, 83.8, 546.1, 81.2, 548.7,
-81.6, 549.3, 78.7, 551.4, 78.6, 550.6, 78.8, 550.4, 78.4, 549.9,
-76.2, 547.2, 79.2, 544.8, 77.0, 541.9, 71.5, 538.3, 75.4, 532.3,
-73.7, 522.7, 72.5, 516.8, 74.7, 516.4, 73.9, 510.3, 73.7, 509.4,
-74.0, 509.4, 74.0, 508.4, 73.8, 508.0, 97.9, 502.2, 99.3, 492.8,
-115.1, 546.9, 107.5, 568.2, 104.7, 567.6, 100.0, 589.5, 99.8, 594.3,
-98.3, 594.2, 96.7, 598.9, 93.8, 582.6, 92.0, 581.1, 81.6, 567.8,
-80.6, 562.5, 82.9, 560.1, 79.7, 557.1, 78.0, 556.0, 79.2, 554.2,
-78.7, 551.4, 81.6, 549.3, 81.2, 548.7, 83.8, 546.1, 99.1, 544.2,
-113.0, 541.4, 115.1, 546.9, 83.8, 546.1, 97.8, 531.6, 106.8, 534.3,
-111.8, 517.1, 114.8, 518.5, 118.5, 510.7, 124.8, 503.8, 125.4, 503.4,
-128.5, 505.7, 128.8, 508.0, 127.4, 512.0, 127.1, 511.9, 126.0, 515.9,
-124.2, 531.8, 120.5, 531.4, 115.1, 546.9, 113.0, 541.4, 99.1, 544.2,
-83.8, 546.1, -27.0, 410.9, -28.8, 406.8, -30.4, 406.9, -30.6, 402.7,
--32.6, 389.3, -29.2, 377.4, -34.5, 375.9, -34.7, 373.3, -32.7, 373.0,
--33.2, 370.6, -29.2, 388.7, -30.4, 389.0, -27.5, 407.4, -27.2, 409.2,
--27.8, 409.6, -27.0, 410.9, -22.3, 363.3, -25.0, 355.2, -24.5, 355.0,
--27.6, 347.1, -27.8, 346.5, -27.1, 346.3, -27.3, 345.7, -24.5, 354.4,
--20.5, 355.6, -22.3, 363.3, 2.2, 282.6, 9.2, 297.5, 18.3, 298.8,
-16.3, 312.3, 16.4, 326.7, 16.4, 326.7, 16.6, 341.0, 6.2, 338.8,
-1.5, 340.8, -6.7, 348.2, -16.5, 346.7, -15.9, 341.8, -24.8, 335.0,
--24.8, 335.0, -24.7, 334.8, -24.7, 334.6, -23.4, 329.3, -23.3, 329.4,
--22.1, 324.1, -11.1, 302.8, -14.7, 287.8, 2.2, 282.6, -22.1, 324.1,
--32.6, 302.0, -22.3, 289.0, -7.1, 263.0, -6.8, 272.9, -2.5, 272.8,
-2.2, 282.6, -14.7, 287.8, -11.1, 302.8, -22.1, 324.1, 48.9, 670.5,
-45.7, 656.7, 49.8, 654.0, 42.5, 643.0, 47.9, 644.1, 53.2, 643.6,
-53.4, 645.1, 59.0, 650.8, 62.8, 647.0, 72.2, 648.9, 70.0, 661.3,
-58.1, 672.3, 48.9, 670.5, 749.0, 492.6, 747.0, 491.5, 749.8, 485.2,
-748.1, 484.6, 762.9, 499.3, 767.1, 495.1, 786.1, 505.6, 785.1, 497.0,
-766.0, 502.0, 749.0, 492.6, 804.0, 583.1, 804.0, 596.3, 804.0, 598.2,
-797.6, 609.5, 793.0, 608.8, 788.4, 609.3, 787.9, 611.3, 783.2, 607.1,
-780.2, 601.8, 778.4, 602.8, 778.5, 602.6, 778.0, 602.4, 777.5, 602.0,
-781.5, 601.4, 784.1, 591.8, 782.5, 583.1, 787.8, 562.4, 787.8, 562.4,
-793.2, 541.7, 795.3, 533.5, 799.3, 532.4, 797.4, 525.2, 804.7, 553.1,
-803.9, 554.2, 804.0, 583.1, 797.4, 525.2, 797.1, 519.5, 798.1, 513.8,
-800.5, 513.5, 808.6, 518.0, 809.9, 516.5, 816.7, 522.4, 817.5, 523.1,
-818.2, 523.9, 818.4, 523.8, 815.5, 535.4, 814.9, 535.3, 812.7, 547.1,
-810.7, 555.2, 810.7, 555.2, 808.8, 563.4, 806.4, 573.2, 801.5, 574.7,
-804.0, 583.1, 803.9, 554.2, 804.7, 553.1, 797.4, 525.2, 713.5, 490.2,
-713.2, 490.0, 713.6, 489.3, 713.3, 489.1, 717.8, 492.9, 718.2, 492.3,
-723.2, 495.6, 722.6, 492.1, 718.1, 493.2, 713.5, 490.2, 744.7, 514.0,
-740.9, 511.5, 738.4, 508.1, 737.1, 509.1, 734.5, 506.4, 735.2, 505.7,
-733.3, 502.3, 732.5, 501.9, 732.8, 501.5, 732.3, 500.6, 738.7, 507.1,
-740.3, 506.3, 744.7, 514.0, 840.1, 624.8, 859.1, 643.0, 856.0, 656.1,
-878.0, 661.2, 875.3, 663.4, 875.3, 663.4, 872.6, 665.6, 862.1, 657.6,
-864.1, 655.0, 855.7, 644.3, 849.0, 635.9, 849.0, 635.9, 842.2, 627.4,
-841.2, 626.1, 841.3, 625.9, 840.1, 624.8, 839.5, 570.9, 839.5, 570.9,
-847.4, 578.7, 855.2, 586.5, 855.4, 586.6, 855.4, 586.6, 855.5, 586.8,
-860.1, 591.3, 860.2, 591.2, 864.8, 595.8, 865.1, 596.1, 865.0, 596.2,
-865.4, 596.6, 860.4, 591.7, 860.4, 591.7, 855.5, 586.8, 855.4, 586.6,
-855.4, 586.6, 855.2, 586.5, 847.4, 578.7, 839.5, 570.9, 839.5, 570.9,
-877.5, 603.6, 857.1, 585.8, 857.1, 585.8, 836.7, 568.0, 838.3, 567.7,
-839.8, 566.4, 839.6, 565.9, 839.5, 565.7, 842.7, 563.6, 845.9, 561.2,
-851.4, 552.7, 856.6, 556.1, 867.3, 550.9, 867.2, 551.2, 872.1, 553.1,
-876.8, 555.4, 881.3, 578.7, 884.1, 601.5, 877.5, 603.6, 876.8, 555.4,
-887.4, 560.3, 887.3, 560.5, 897.9, 565.3, 900.5, 583.4, 900.4, 583.4,
-903.1, 601.5, 904.2, 615.5, 904.8, 615.5, 907.1, 629.4, 892.3, 616.5,
-892.3, 616.5, 877.5, 603.6, 884.1, 601.5, 881.3, 578.7, 876.8, 555.4,
-924.9, 574.1, 934.6, 580.7, 934.6, 580.7, 944.3, 587.3, 944.0, 594.1,
-941.0, 598.8, 944.0, 600.9, 943.8, 604.9, 945.7, 606.7, 943.6, 608.8,
-926.1, 612.3, 927.9, 621.4, 912.2, 633.9, 912.3, 632.1, 910.0, 632.0,
-907.8, 630.0, 907.5, 626.4, 907.2, 626.4, 906.6, 622.8, 904.2, 604.5,
-903.8, 604.5, 901.1, 586.3, 904.6, 577.0, 913.1, 573.8, 924.9, 574.1,
-901.1, 586.3, 896.6, 584.8, 899.5, 575.8, 897.9, 565.3, 897.9, 565.1,
-897.9, 565.1, 897.9, 564.9, 897.2, 559.8, 898.2, 559.5, 896.4, 554.7,
-903.9, 559.8, 903.7, 560.0, 911.3, 564.9, 913.1, 566.1, 913.1, 566.1,
-915.0, 567.3, 915.1, 570.9, 919.9, 570.7, 924.9, 574.1, 913.1, 573.8,
-904.6, 577.0, 901.1, 586.3, 556.4, 358.5, 563.7, 373.2, 565.8, 372.2,
-575.2, 385.9, 582.9, 397.1, 582.9, 397.1, 590.6, 408.4, 612.9, 440.9,
-613.2, 440.7, 635.2, 473.4, 635.6, 474.9, 636.0, 474.9, 636.1, 476.4,
-637.2, 490.9, 632.9, 492.8, 638.3, 505.4, 638.4, 507.7, 638.1, 507.7,
-637.8, 510.0, 637.6, 511.1, 638.0, 511.3, 637.5, 512.3, 637.6, 512.1,
-637.2, 511.8, 636.9, 511.4, 596.6, 435.0, 594.5, 436.0, 556.4, 358.5,
-636.9, 511.4, 631.2, 500.0, 630.0, 500.6, 623.1, 489.8, 602.2, 457.1,
-602.2, 457.1, 581.3, 424.5, 580.7, 423.6, 580.7, 423.6, 580.1, 422.7,
-576.4, 416.8, 576.4, 416.8, 572.6, 410.9, 568.0, 403.6, 568.0, 403.6,
-563.3, 396.4, 554.4, 382.5, 554.4, 382.5, 545.5, 368.5, 542.6, 364.1,
-540.9, 364.5, 539.8, 359.6, 538.8, 344.7, 538.3, 344.7, 536.7, 329.8,
-545.6, 329.2, 548.0, 343.3, 556.4, 358.5, 594.5, 436.0, 596.6, 435.0,
-636.9, 511.4, 675.1, 570.2, 674.8, 570.2, 674.6, 570.3, 674.6, 570.2,
-665.5, 556.2, 665.7, 556.0, 656.7, 541.9, 653.1, 536.2, 653.0, 536.3,
-649.4, 530.7, 645.6, 524.9, 641.9, 519.1, 641.9, 519.1, 641.9, 519.1,
-645.6, 524.9, 649.4, 530.7, 653.0, 536.3, 653.1, 536.2, 656.7, 541.9,
-665.9, 556.0, 666.1, 555.9, 675.1, 570.2, 899.8, 548.7, 895.3, 542.3,
-895.6, 542.1, 890.9, 536.0, 885.0, 514.4, 887.5, 513.7, 884.2, 491.5,
-882.5, 489.1, 883.7, 488.2, 883.2, 484.9, 883.2, 484.2, 883.7, 484.2,
-884.2, 483.4, 886.2, 479.1, 886.7, 479.4, 889.2, 475.3, 894.8, 486.7,
-891.1, 488.4, 893.0, 501.6, 896.4, 525.1, 901.3, 525.5, 899.8, 548.7,
-884.2, 389.0, 889.3, 403.4, 884.3, 409.7, 894.4, 417.8, 899.5, 431.9,
-904.7, 432.0, 904.5, 446.0, 898.0, 455.1, 899.1, 455.9, 893.7, 465.8,
-881.0, 430.2, 883.6, 427.3, 884.2, 389.0, 893.7, 465.8, 888.9, 474.6,
-888.4, 474.4, 884.2, 483.4, 883.7, 484.2, 883.2, 484.2, 883.2, 484.9,
-882.6, 480.5, 884.0, 479.6, 881.9, 476.0, 881.7, 474.5, 881.7, 474.5,
-881.4, 472.9, 881.6, 432.1, 876.0, 432.0, 869.9, 391.2, 870.0, 370.4,
-872.9, 370.0, 870.1, 349.6, 876.6, 367.7, 878.4, 386.3, 883.1, 385.9,
-882.6, 387.0, 883.6, 387.4, 884.2, 389.0, 883.6, 427.3, 881.0, 430.2,
-893.7, 465.8, 912.4, 468.1, 909.0, 458.6, 911.4, 456.8, 905.6, 449.0,
-905.9, 447.7, 904.0, 446.7, 904.5, 446.0, 904.7, 432.0, 899.5, 431.9,
-894.4, 417.8, 896.0, 419.1, 901.1, 412.8, 907.7, 407.8, 917.5, 435.3,
-913.9, 438.2, 912.4, 468.1, 907.7, 407.8, 913.4, 403.5, 917.7, 404.6,
-919.1, 399.2, 920.4, 403.4, 920.4, 403.4, 921.6, 407.7, 923.3, 429.6,
-924.9, 429.4, 928.2, 451.2, 930.2, 470.0, 930.5, 470.0, 933.3, 488.7,
-936.3, 516.2, 934.7, 516.5, 939.4, 543.8, 931.7, 522.3, 935.4, 520.1,
-924.1, 500.9, 921.1, 492.4, 921.1, 492.4, 918.1, 484.0, 916.7, 480.1,
-916.7, 480.1, 915.3, 476.2, 916.2, 472.8, 913.8, 472.2, 912.4, 468.1,
-913.9, 438.2, 917.5, 435.3, 907.7, 407.8, 869.3, 391.2, 869.6, 393.4,
-869.6, 395.5, 869.9, 395.5, 875.4, 434.2, 881.6, 434.2, 881.4, 472.9,
-881.7, 474.5, 881.7, 474.5, 881.9, 476.0, 862.4, 442.8, 860.9, 443.7,
-840.0, 411.3, 838.8, 403.6, 853.7, 399.5, 869.3, 391.2, 840.0, 411.3,
-833.9, 401.9, 836.4, 396.3, 827.8, 392.5, 834.3, 373.1, 846.5, 358.5,
-840.8, 353.8, 844.2, 352.5, 844.2, 352.5, 847.6, 351.2, 847.8, 352.0,
-856.3, 353.2, 863.2, 350.6, 866.2, 370.9, 866.2, 370.9, 869.3, 391.2,
-853.7, 399.5, 838.8, 403.6, 840.0, 411.3, 797.4, 463.4, 818.1, 481.9,
-832.6, 485.1, 832.8, 507.0, 815.2, 491.3, 815.2, 491.3, 797.5, 475.5,
-794.5, 471.9, 800.4, 466.1, 797.4, 463.4, 797.5, 475.5, 781.5, 461.2,
-783.7, 457.2, 765.4, 446.9, 763.2, 449.1, 743.6, 417.7, 714.5, 401.6,
-727.0, 396.9, 727.0, 396.9, 739.4, 392.2, 746.0, 393.0, 745.1, 399.2,
-750.9, 406.3, 764.3, 422.8, 764.3, 422.8, 777.8, 439.4, 787.6, 451.4,
-790.1, 450.1, 797.4, 463.4, 800.4, 466.1, 794.5, 471.9, 797.5, 475.5,
-764.0, 382.8, 766.2, 382.0, 766.2, 382.0, 768.3, 381.2, 787.3, 419.8,
-792.2, 417.7, 818.3, 452.4, 839.0, 481.8, 837.6, 483.0, 859.8, 511.3,
-811.2, 449.2, 812.7, 448.1, 765.5, 384.9, 764.8, 383.9, 763.8, 383.1,
-764.0, 382.8, 875.4, 533.5, 871.8, 528.1, 871.7, 528.3, 868.0, 523.0,
-863.9, 517.2, 863.9, 517.2, 859.8, 511.3, 837.6, 483.0, 839.0, 481.8,
-818.3, 452.4, 814.6, 447.4, 815.7, 446.5, 813.2, 440.7, 831.1, 465.0,
-830.0, 465.8, 846.8, 490.9, 848.1, 492.9, 848.1, 492.9, 849.5, 494.8,
-862.4, 514.2, 862.6, 514.1, 875.4, 533.5, 544.1, 175.8, 556.5, 200.5,
-554.9, 201.4, 569.0, 225.3, 561.9, 229.4, 547.8, 205.6, 526.7, 186.0,
-525.3, 184.7, 524.4, 183.1, 523.9, 183.4, 533.0, 178.0, 540.5, 172.5,
-544.1, 175.8, 526.7, 186.0, 547.8, 205.6, 561.9, 229.4, 569.0, 225.3,
-572.1, 230.5, 576.1, 228.6, 578.3, 234.0, 586.1, 245.8, 588.9, 243.9,
-599.6, 253.8, 619.4, 274.2, 619.6, 274.0, 639.5, 294.1, 616.9, 278.6,
-614.7, 281.7, 589.9, 269.3, 577.6, 260.4, 580.3, 256.7, 570.7, 244.0,
-560.1, 230.0, 560.1, 230.0, 549.5, 216.0, 544.8, 209.8, 544.8, 209.8,
-540.0, 203.6, 538.5, 201.6, 538.5, 201.6, 537.0, 199.6, 531.9, 192.8,
-533.2, 191.2, 526.7, 186.0, 606.5, 321.3, 607.1, 332.5, 603.3, 334.3,
-607.8, 343.7, 582.8, 318.3, 582.8, 318.3, 557.8, 293.0, 550.1, 270.2,
-544.6, 272.1, 531.4, 251.2, 574.7, 276.3, 574.1, 282.0, 606.5, 321.3,
-531.4, 251.2, 526.9, 244.1, 528.3, 242.6, 522.4, 236.9, 563.4, 261.1,
-563.4, 261.1, 604.4, 285.3, 606.6, 286.8, 604.7, 289.6, 604.9, 294.0,
-605.1, 297.0, 605.1, 297.0, 605.3, 300.0, 602.1, 301.3, 605.9, 310.6,
-606.5, 321.3, 574.1, 282.0, 574.7, 276.3, 531.4, 251.2, 604.9, 294.0,
-604.7, 289.6, 606.6, 286.8, 604.4, 285.3, 606.9, 286.8, 606.9, 286.8,
-609.4, 288.2, 609.6, 291.0, 605.3, 294.2, 604.9, 294.0, 542.8, 279.0,
-564.4, 308.2, 562.7, 309.6, 586.0, 337.3, 543.6, 311.2, 543.6, 311.2,
-501.2, 285.0, 505.9, 288.8, 510.0, 283.7, 518.8, 282.5, 530.8, 280.7,
-536.5, 273.8, 542.8, 279.0, 567.3, 73.7, 569.0, 78.4, 568.2, 78.7,
-569.1, 83.6, 569.4, 84.9, 569.4, 84.9, 569.6, 86.2, 568.6, 86.9,
-571.5, 91.2, 570.6, 91.6, 566.7, 94.4, 566.7, 94.4, 562.7, 97.1,
-561.8, 97.0, 561.9, 94.1, 561.1, 91.2, 553.1, 61.2, 553.1, 61.2,
-545.1, 31.1, 543.1, 23.6, 543.1, 23.6, 541.1, 16.0, 535.7, -4.2,
-538.8, -5.6, 530.3, -24.4, 551.9, 23.2, 549.6, 24.4, 567.3, 73.7,
-530.3, -24.4, 529.7, -26.0, 529.8, -26.1, 529.4, -27.8, 528.2, -32.2,
-527.2, -32.2, 527.0, -36.7, 526.9, -37.9, 528.8, -39.2, 528.8, -39.2,
-530.9, -27.9, 550.9, -21.1, 549.9, -19.7, 553.8, 1.1, 548.9, 19.7,
-557.7, 22.0, 560.4, 36.7, 560.4, 36.7, 563.1, 51.4, 565.2, 62.6,
-562.9, 63.6, 567.3, 73.7, 549.6, 24.4, 551.9, 23.2, 530.3, -24.4,
-682.2, -11.8, 682.8, -12.2, 687.1, -7.7, 686.9, -7.4, 662.7, 7.7,
-666.9, 14.4, 646.9, 36.3, 607.4, 59.9, 606.8, 59.2, 569.6, 86.2,
-569.4, 84.9, 569.4, 84.9, 569.1, 83.6, 588.0, 66.3, 588.8, 67.1,
-608.4, 50.5, 624.1, 37.2, 624.1, 37.2, 639.9, 23.9, 661.0, 6.1,
-659.3, 3.5, 682.2, -11.8, 376.8, 74.3, 374.7, 66.1, 374.7, 66.1,
-372.6, 57.9, 376.1, 61.9, 406.7, 46.2, 406.0, 43.4, 413.5, 43.8,
-421.0, 59.2, 420.2, 60.1, 406.4, 74.7, 398.1, 75.3, 376.8, 74.3,
-439.2, 19.5, 426.1, 5.7, 426.1, 5.7, 413.0, -8.1, 441.4, -5.2,
-442.7, -8.0, 471.0, -14.3, 488.5, -14.8, 498.8, -2.9, 506.1, -10.7,
-482.9, 14.0, 473.1, 18.6, 439.2, 19.5, 506.1, -10.7, 506.9, -11.0,
-507.9, -10.1, 508.1, -10.5, 487.9, 19.2, 487.4, 18.9, 466.1, 47.9,
-466.2, 47.8, 465.9, 47.6, 465.6, 47.3, 452.6, 33.3, 452.4, 33.4,
-439.2, 19.5, 473.1, 18.6, 482.9, 14.0, 506.1, -10.7, 424.5, 65.0,
-422.7, 62.3, 422.4, 62.5, 420.2, 60.1, 421.0, 59.2, 413.5, 43.8,
-406.0, 43.4, 397.1, 8.3, 364.4, -22.7, 353.5, -18.0, 352.8, -20.5,
-351.7, -22.3, 349.8, -22.3, 355.9, -23.9, 355.9, -23.9, 362.0, -25.4,
-371.9, -18.7, 369.3, -14.8, 376.6, -4.2, 383.0, 5.0, 383.0, 5.0,
-389.3, 14.2, 396.6, 24.7, 396.6, 24.7, 403.8, 35.1, 414.2, 50.1,
-414.5, 49.8, 424.5, 65.0, 414.0, -38.8, 421.4, -40.7, 421.3, -40.9,
-428.6, -42.8, 449.2, -48.0, 449.2, -47.9, 469.8, -53.0, 471.6, -53.4,
-471.6, -53.4, 473.5, -53.9, 443.7, -46.3, 443.8, -46.2, 414.0, -38.8,
-208.2, 292.5, 217.0, 279.3, 222.7, 280.5, 225.8, 266.0, 239.8, 263.1,
-242.0, 274.1, 258.3, 282.1, 260.9, 283.4, 260.9, 283.4, 263.4, 284.6,
-267.9, 286.8, 272.4, 286.8, 272.4, 289.1, 272.4, 291.5, 267.9, 291.5,
-263.4, 293.9, 252.2, 300.0, 252.2, 300.0, 241.0, 306.0, 240.2, 306.5,
-239.9, 307.2, 239.3, 307.0, 223.5, 300.4, 211.9, 303.7, 208.2, 292.5,
-239.3, 307.0, 240.1, 309.9, 227.5, 313.4, 215.6, 319.8, 208.1, 323.9,
-208.1, 323.9, 200.5, 328.0, 197.8, 326.4, 191.7, 329.4, 190.1, 333.6,
-194.5, 320.1, 194.5, 320.1, 198.8, 306.6, 200.1, 299.0, 203.5, 299.5,
-208.2, 292.5, 211.9, 303.7, 223.5, 300.4, 239.3, 307.0, 238.5, 111.6,
-244.2, 108.1, 247.0, 109.7, 249.8, 104.6, 245.6, 119.3, 245.6, 119.3,
-241.5, 134.0, 240.6, 137.6, 239.4, 137.2, 238.0, 140.7, 230.1, 155.8,
-230.1, 155.8, 222.2, 171.0, 200.9, 211.7, 203.3, 213.2, 179.6, 252.5,
-180.5, 246.8, 179.8, 246.7, 179.9, 241.0, 207.3, 175.5, 206.2, 174.7,
-238.5, 111.6, 179.9, 241.0, 180.4, 221.2, 174.6, 203.5, 180.9, 201.5,
-201.5, 161.7, 201.5, 161.7, 222.1, 121.8, 224.7, 114.7, 230.3, 116.7,
-238.5, 111.6, 206.2, 174.7, 207.3, 175.5, 179.9, 241.0, 199.0, 163.7,
-180.0, 201.5, 180.0, 201.5, 161.1, 239.4, 150.1, 261.1, 150.0, 261.0,
-138.9, 282.6, 137.6, 285.0, 137.6, 285.0, 136.3, 287.5, 137.7, 283.6,
-136.5, 283.1, 136.6, 278.7, 146.3, 257.4, 147.8, 258.1, 159.0, 237.4,
-179.0, 200.6, 206.9, 171.3, 199.0, 163.7, 477.6, 762.9, 483.4, 806.1,
-483.5, 806.0, 489.1, 849.3, 489.8, 854.9, 489.6, 854.9, 490.1, 860.6,
-490.8, 868.4, 490.2, 868.5, 491.6, 876.2, 489.4, 864.4, 490.1, 864.3,
-488.6, 852.4, 483.4, 810.0, 483.4, 810.0, 478.2, 767.6, 477.9, 765.3,
-477.9, 765.2, 477.6, 762.9, 491.9, 847.9, 491.7, 854.3, 493.4, 859.1,
-490.1, 860.6, 489.6, 854.9, 489.8, 854.9, 489.1, 849.3, 487.8, 840.3,
-488.3, 840.2, 487.4, 831.1, 485.8, 836.4, 489.1, 837.4, 490.8, 843.6,
-491.4, 845.8, 492.0, 845.8, 491.9, 847.9, 501.5, 451.5, 496.1, 456.3,
-485.1, 452.0, 484.8, 454.4, 495.2, 435.8, 495.2, 435.9, 505.5, 417.3,
-512.4, 405.1, 519.8, 404.6, 519.2, 392.8, 528.4, 376.3, 537.4, 359.8,
-537.5, 359.8, 538.4, 359.2, 538.9, 358.3, 538.6, 357.9, 539.2, 358.7,
-539.7, 358.7, 539.8, 359.6, 540.9, 364.5, 542.6, 364.1, 545.5, 368.5,
-533.3, 400.4, 529.4, 398.9, 513.3, 429.3, 507.4, 440.4, 510.3, 443.7,
-501.5, 451.5, 468.2, 621.6, 466.6, 603.5, 466.5, 603.5, 464.8, 585.3,
-484.5, 550.0, 465.4, 538.7, 463.8, 492.1, 471.6, 478.1, 471.6, 478.1,
-479.4, 464.0, 488.2, 493.2, 477.1, 496.5, 474.8, 529.0, 474.7, 530.5,
-474.7, 530.5, 474.6, 531.9, 472.3, 563.6, 472.3, 563.6, 470.1, 595.2,
-469.2, 607.8, 469.2, 607.8, 468.3, 620.3, 468.2, 621.0, 468.1, 621.0,
-468.2, 621.6, 458.7, 501.2, 458.0, 502.4, 457.3, 502.5, 457.3, 503.6,
-456.5, 494.1, 456.5, 494.1, 455.6, 484.5, 452.4, 490.2, 457.9, 492.8,
-458.7, 501.2, 480.2, 266.5, 481.8, 271.2, 482.9, 270.8, 485.7, 275.1,
-492.4, 286.2, 492.6, 286.0, 499.6, 296.9, 503.1, 301.2, 500.0, 303.7,
-500.3, 310.6, 492.2, 303.8, 495.4, 300.0, 490.6, 289.4, 485.4, 277.9,
-484.3, 278.3, 480.2, 266.5, 205.6, 671.5, 207.4, 667.6, 208.7, 667.8,
-209.3, 663.7, 209.5, 676.0, 209.5, 676.0, 209.6, 688.4, 212.5, 682.3,
-205.7, 680.0, 205.6, 671.5, 173.8, 490.6, 180.4, 471.0, 174.1, 457.5,
-187.1, 451.5, 206.4, 425.2, 203.9, 422.9, 225.7, 398.9, 231.9, 390.5,
-230.2, 388.0, 238.3, 382.2, 236.2, 383.7, 239.4, 387.0, 237.7, 390.2,
-229.6, 406.0, 228.1, 405.3, 218.5, 420.3, 211.9, 430.8, 211.9, 430.8,
-205.2, 441.3, 189.5, 466.0, 196.2, 478.0, 173.8, 490.6, 434.6, 322.4,
-437.2, 344.4, 439.3, 344.4, 439.9, 366.4, 440.0, 367.4, 440.0, 367.4,
-440.0, 368.4, 432.0, 356.0, 432.4, 355.7, 424.7, 343.1, 424.2, 342.3,
-424.2, 342.3, 423.8, 341.6, 419.6, 334.6, 419.6, 334.6, 415.3, 327.6,
-405.7, 311.6, 405.7, 311.6, 396.0, 295.6, 392.0, 289.0, 389.9, 289.5,
-387.9, 282.3, 377.8, 275.8, 385.3, 264.0, 382.7, 245.8, 379.9, 250.3,
-390.0, 256.5, 397.3, 267.3, 407.0, 281.7, 407.0, 281.7, 416.8, 296.1,
-417.2, 296.7, 417.2, 296.7, 417.5, 297.2, 420.5, 301.6, 420.5, 301.6,
-423.4, 305.9, 429.0, 314.1, 432.1, 313.3, 434.6, 322.4, 209.1, 881.3,
-209.0, 881.8, 205.6, 882.1, 202.6, 881.2, 203.0, 880.7, 202.4, 880.2,
-202.3, 879.2, 215.2, 875.8, 205.3, 838.2, 208.2, 797.2, 203.1, 821.6,
-208.5, 822.8, 208.8, 848.4, 209.0, 864.8, 212.1, 865.4, 209.1, 881.3,
-322.4, 303.2, 317.5, 312.0, 320.3, 313.4, 316.6, 322.9, 314.1, 329.5,
-313.2, 329.1, 309.8, 335.3, 309.5, 336.0, 309.4, 336.0, 309.1, 336.7,
-315.6, 319.9, 313.8, 318.9, 322.4, 303.2, 309.8, 335.3, 313.2, 329.1,
-314.1, 329.5, 316.6, 322.9, 311.6, 347.8, 309.5, 347.3, 302.4, 371.7,
-301.0, 376.6, 301.0, 376.6, 299.6, 381.6, 296.0, 393.7, 296.0, 393.7,
-292.5, 405.8, 292.3, 406.5, 292.3, 406.5, 292.1, 407.2, 291.4, 409.5,
-291.4, 409.5, 290.7, 411.9, 283.9, 435.5, 283.9, 435.5, 277.0, 459.0,
-274.5, 467.6, 274.5, 467.6, 272.0, 476.1, 270.8, 480.4, 270.8, 480.4,
-269.5, 484.6, 256.2, 529.7, 256.2, 529.6, 242.9, 574.7, 241.7, 578.5,
-241.8, 578.5, 240.7, 582.4, 236.3, 598.2, 231.9, 614.0, 231.9, 614.0,
-231.9, 614.0, 236.3, 598.2, 240.7, 582.4, 241.8, 578.5, 241.7, 578.5,
-242.9, 574.7, 267.7, 486.1, 267.8, 486.1, 292.4, 397.5, 300.9, 367.2,
-300.6, 367.1, 309.1, 336.7, 309.4, 336.0, 309.5, 336.0, 309.8, 335.3,
-144.7, 133.3, 156.7, 133.2, 156.7, 133.2, 168.8, 133.0, 168.1, 133.2,
-169.2, 137.2, 169.5, 141.3, 146.3, 157.1, 147.5, 158.8, 125.4, 176.3,
-127.9, 177.1, 129.1, 148.9, 144.7, 133.3, 125.4, 176.3, 116.5, 183.4,
-109.2, 182.0, 107.5, 190.5, 104.8, 170.5, 104.8, 170.5, 102.0, 150.6,
-118.6, 144.8, 117.6, 142.0, 133.2, 133.5, 133.7, 132.2, 137.8, 135.0,
-140.7, 133.4, 142.0, 132.4, 142.7, 133.4, 144.7, 133.3, 129.1, 148.9,
-127.9, 177.1, 125.4, 176.3, 115.5, 261.9, 117.0, 266.4, 119.2, 266.7,
-118.6, 270.9, 118.7, 271.9, 118.7, 271.9, 118.9, 272.9, 123.6, 317.8,
-123.5, 317.8, 128.3, 362.6, 128.7, 366.0, 129.2, 369.3, 129.2, 369.3,
-129.2, 369.3, 128.7, 366.0, 128.3, 362.6, 121.9, 312.3, 120.9, 312.4,
-115.5, 261.9, 60.6, 101.9, 65.7, 116.8, 65.7, 116.8, 70.8, 131.7,
-67.1, 140.6, 67.3, 142.3, 69.2, 152.0, 68.3, 163.3, 69.5, 163.5,
-67.4, 174.6, 65.2, 180.0, 65.2, 180.0, 63.0, 185.5, 63.2, 185.1,
-63.0, 185.0, 63.0, 184.6, 62.5, 168.3, 62.5, 168.3, 62.1, 152.1,
-61.3, 127.0, 51.6, 122.9, 60.6, 101.9, 129.6, 436.3, 133.6, 448.4,
-133.2, 448.6, 137.6, 460.5, 122.5, 453.7, 126.3, 445.1, 115.1, 429.8,
-105.8, 417.1, 108.9, 409.5, 96.5, 404.4, 115.6, 412.2, 112.5, 419.8,
-128.4, 435.2, 129.0, 435.8, 129.3, 435.7, 129.6, 436.3, 38.9, 323.2,
-38.5, 321.0, 38.5, 321.0, 38.1, 318.9, 53.0, 296.7, 49.7, 294.5,
-61.2, 270.1, 65.4, 294.0, 51.2, 297.2, 38.9, 323.2, 115.1, 429.8,
-126.3, 445.1, 122.5, 453.7, 137.6, 460.5, 138.0, 461.7, 139.3, 461.7,
-139.2, 462.7, 139.8, 464.7, 142.0, 464.7, 141.8, 466.3, 141.8, 468.7,
-141.8, 468.7, 141.9, 471.0, 142.0, 471.5, 141.7, 471.6, 141.5, 472.1,
-130.0, 454.6, 130.4, 454.3, 119.3, 436.5, 117.2, 433.1, 117.5, 432.9,
-115.1, 429.8, -27.5, 407.4, -30.4, 389.0, -29.2, 388.7, -33.2, 370.6,
--33.3, 359.7, -34.8, 355.3, -28.1, 348.9, -26.1, 355.1, -25.7, 355.0,
--23.3, 361.1, -23.0, 384.2, -14.8, 395.3, -27.5, 407.4, -23.3, 361.1,
--22.7, 362.5, -22.7, 362.5, -22.1, 363.9, -20.4, 368.4, -20.4, 368.4,
--18.6, 372.9, -4.0, 410.0, -0.8, 409.0, 10.6, 447.0, 15.8, 451.1,
-10.4, 458.2, 10.2, 469.4, -3.1, 439.7, -25.9, 441.5, -25.5, 414.1,
--26.2, 412.5, -26.2, 412.5, -27.0, 410.9, -27.8, 409.6, -27.2, 409.2,
--27.5, 407.4, -14.8, 395.3, -23.0, 384.2, -23.3, 361.1, -15.8, 379.3,
--17.1, 376.1, -18.6, 372.9, -18.6, 372.9, -20.4, 368.4, -20.4, 368.4,
--22.1, 363.9, -22.2, 363.6, -22.2, 363.6, -22.3, 363.3, -20.5, 355.6,
--24.5, 354.4, -27.3, 345.7, -27.8, 340.5, -25.4, 335.0, -24.8, 335.0,
--15.9, 341.8, -16.5, 346.7, -6.7, 348.2, -5.9, 347.4, -2.9, 353.3,
-1.7, 354.3, 1.8, 359.9, 9.7, 365.8, 16.8, 365.3, 17.9, 368.2,
-19.8, 367.5, 22.8, 369.6, 22.8, 369.7, 22.8, 369.7, 22.8, 369.7,
-22.9, 371.5, 22.8, 371.5, 22.8, 373.4, 3.9, 378.1, 3.5, 379.5,
--15.8, 379.3, 22.8, 373.4, 22.9, 387.5, 22.9, 387.5, 22.9, 401.7,
-21.1, 397.3, -5.3, 402.7, -5.3, 403.6, -10.6, 391.4, -10.6, 391.4,
--15.8, 379.3, 3.5, 379.5, 3.9, 378.1, 22.8, 373.4, 89.4, 652.2,
-89.7, 652.3, 89.9, 652.3, 89.9, 652.3, 91.2, 668.6, 91.2, 668.6,
-92.5, 684.9, 87.9, 684.0, 90.7, 668.6, 89.4, 652.2, 765.8, 541.1,
-758.0, 521.3, 758.6, 521.0, 750.1, 501.5, 748.7, 497.4, 750.1, 492.7,
-749.0, 492.6, 766.0, 502.0, 785.1, 497.0, 786.1, 505.6, 793.3, 509.5,
-793.3, 509.5, 800.5, 513.5, 798.1, 513.8, 797.1, 519.5, 797.4, 525.2,
-799.3, 532.4, 795.3, 533.5, 793.2, 541.7, 782.4, 547.1, 773.3, 548.1,
-765.8, 541.1, 793.2, 541.7, 787.8, 562.4, 787.8, 562.4, 782.5, 583.1,
-778.3, 561.3, 774.1, 562.1, 765.8, 541.1, 773.3, 548.1, 782.4, 547.1,
-793.2, 541.7, 748.5, 575.4, 744.8, 572.5, 744.4, 572.8, 741.0, 569.6,
-734.7, 564.0, 734.7, 564.0, 728.5, 558.4, 727.5, 551.0, 726.0, 551.2,
-723.5, 543.9, 738.5, 556.7, 737.2, 558.8, 748.5, 575.4, 723.5, 543.9,
-723.0, 542.4, 722.7, 542.5, 722.5, 540.9, 722.2, 539.4, 721.3, 538.6,
-722.0, 537.9, 720.3, 528.5, 720.3, 528.5, 718.6, 519.2, 716.1, 504.7,
-710.9, 503.7, 713.5, 490.2, 718.1, 493.2, 722.6, 492.1, 723.2, 495.6,
-728.2, 499.0, 728.0, 499.4, 733.3, 502.3, 735.2, 505.7, 734.5, 506.4,
-737.1, 509.1, 736.7, 509.4, 739.2, 512.8, 741.2, 516.5, 744.6, 544.7,
-744.7, 547.0, 758.5, 571.7, 759.3, 578.0, 759.3, 578.0, 760.1, 584.4,
-754.8, 579.3, 754.3, 579.9, 748.5, 575.4, 737.2, 558.8, 738.5, 556.7,
-723.5, 543.9, 750.7, 506.1, 751.4, 512.5, 751.4, 512.5, 752.2, 518.9,
-750.9, 515.5, 748.4, 516.4, 744.7, 514.0, 740.3, 506.3, 738.7, 507.1,
-732.3, 500.6, 719.9, 478.6, 726.2, 469.7, 707.6, 456.6, 706.9, 452.6,
-706.9, 452.6, 706.2, 448.6, 730.0, 476.0, 730.8, 475.8, 750.7, 506.1,
-706.2, 448.6, 703.8, 435.3, 705.6, 434.7, 701.5, 422.0, 706.9, 425.7,
-706.9, 425.7, 712.4, 429.4, 714.7, 448.8, 726.1, 451.4, 745.7, 464.8,
-745.7, 465.1, 745.6, 465.3, 745.8, 465.5, 750.7, 468.2, 742.7, 479.3,
-748.1, 484.6, 749.8, 485.2, 747.0, 491.5, 749.0, 492.6, 750.1, 492.7,
-748.7, 497.4, 750.1, 501.5, 751.0, 503.5, 750.4, 503.8, 750.7, 506.1,
-730.8, 475.8, 730.0, 476.0, 706.2, 448.6, 835.7, 623.1, 836.7, 624.3,
-837.6, 623.4, 839.3, 624.0, 839.8, 624.1, 839.7, 624.4, 840.1, 624.8,
-841.3, 625.9, 841.2, 626.1, 842.2, 627.4, 838.6, 626.1, 838.1, 626.0,
-835.7, 623.1, 855.5, 586.8, 860.4, 591.7, 860.4, 591.7, 865.4, 596.6,
-880.6, 617.1, 878.7, 618.8, 895.8, 637.6, 867.6, 630.8, 867.6, 630.5,
-839.3, 624.0, 837.6, 623.4, 836.7, 624.3, 835.7, 623.1, 831.7, 622.2,
-828.2, 620.5, 827.8, 621.3, 835.7, 605.4, 839.2, 607.1, 850.6, 593.0,
-853.0, 589.9, 853.9, 586.4, 855.5, 586.8, 575.2, 385.9, 565.8, 372.2,
-563.7, 373.2, 556.4, 358.5, 548.0, 343.3, 545.6, 329.2, 536.7, 329.8,
-536.4, 326.7, 536.4, 326.7, 536.1, 323.7, 544.7, 334.1, 543.4, 335.2,
-550.6, 346.8, 562.9, 366.3, 565.0, 365.3, 575.2, 385.9, 626.3, 445.3,
-630.7, 459.4, 630.7, 459.4, 635.2, 473.4, 613.2, 440.7, 612.9, 440.9,
-590.6, 408.4, 585.9, 399.5, 595.0, 392.5, 589.2, 386.5, 612.9, 411.0,
-610.1, 414.7, 626.3, 445.3, 589.2, 386.5, 586.2, 380.6, 588.8, 379.2,
-588.3, 372.0, 587.4, 357.9, 582.3, 356.2, 586.5, 343.8, 591.1, 346.9,
-591.1, 346.9, 595.7, 350.0, 597.0, 350.8, 596.5, 351.7, 597.3, 353.4,
-586.5, 392.3, 611.8, 399.4, 626.3, 445.3, 610.1, 414.7, 612.9, 411.0,
-589.2, 386.5, 718.6, 519.2, 720.3, 528.5, 720.3, 528.5, 722.0, 537.9,
-711.8, 549.5, 701.7, 552.1, 703.4, 562.7, 704.0, 563.8, 701.3, 565.4,
-699.3, 568.1, 699.0, 569.1, 696.3, 568.4, 693.3, 568.6, 692.5, 565.5,
-695.3, 564.7, 697.3, 560.8, 700.6, 554.3, 700.6, 554.3, 704.0, 547.8,
-711.3, 533.5, 707.0, 525.6, 718.6, 519.2, 910.3, 563.5, 905.1, 556.1,
-905.1, 556.1, 899.8, 548.7, 901.3, 525.5, 896.4, 525.1, 893.0, 501.6,
-910.5, 526.3, 905.8, 531.9, 910.3, 563.5, 842.9, 516.0, 837.8, 511.5,
-837.8, 511.5, 832.8, 507.0, 832.6, 485.1, 818.1, 481.9, 797.4, 463.4,
-790.1, 450.1, 787.6, 451.4, 777.8, 439.4, 810.7, 477.4, 811.2, 477.0,
-842.9, 516.0, 846.8, 490.9, 830.0, 465.8, 831.1, 465.0, 813.2, 440.7,
-801.8, 415.0, 801.8, 415.0, 790.5, 389.3, 819.3, 429.5, 814.6, 432.8,
-838.7, 476.3, 842.8, 483.6, 842.0, 484.2, 846.8, 490.9, 485.3, 126.2,
-497.4, 124.9, 499.2, 128.7, 509.6, 123.7, 513.3, 124.0, 516.4, 125.4,
-516.9, 124.3, 518.5, 126.3, 518.5, 126.3, 520.2, 128.3, 527.6, 149.4,
-530.3, 148.5, 540.5, 168.7, 511.7, 166.9, 504.0, 153.5, 485.3, 126.2,
-540.5, 168.7, 542.3, 172.2, 542.3, 172.2, 544.1, 175.8, 540.5, 172.5,
-533.0, 178.0, 523.9, 183.4, 497.6, 169.5, 501.3, 162.4, 478.7, 141.4,
-471.8, 134.9, 471.2, 135.4, 464.8, 128.5, 465.1, 128.8, 465.7, 128.2,
-466.5, 128.1, 474.5, 124.3, 475.9, 127.1, 485.3, 126.2, 504.0, 153.5,
-511.7, 166.9, 540.5, 168.7, 804.5, 87.9, 824.8, 103.2, 825.5, 102.3,
-846.3, 117.0, 857.7, 124.9, 857.5, 125.2, 868.7, 133.4, 863.2, 129.3,
-863.1, 129.5, 857.5, 125.5, 831.0, 106.7, 830.4, 107.5, 804.5, 87.9,
-936.1, 245.9, 931.1, 239.5, 929.4, 240.9, 922.7, 235.8, 918.0, 232.3,
-918.1, 232.3, 913.4, 228.8, 876.6, 201.0, 876.6, 201.0, 839.8, 173.3,
-834.8, 169.5, 834.0, 165.0, 829.8, 165.7, 840.9, 163.7, 841.7, 168.3,
-853.6, 170.8, 864.6, 173.1, 868.4, 168.9, 875.6, 175.5, 909.7, 206.5,
-907.6, 209.3, 936.1, 245.9, 686.0, 149.5, 684.1, 135.7, 669.1, 137.8,
-652.1, 126.1, 638.8, 117.0, 638.8, 117.0, 625.6, 107.8, 618.0, 102.6,
-613.6, 104.6, 610.4, 97.3, 615.1, 96.3, 615.1, 96.3, 619.9, 95.3,
-629.9, 99.9, 628.7, 102.5, 637.5, 109.8, 644.5, 115.4, 644.5, 115.4,
-651.4, 121.1, 668.7, 135.3, 683.8, 133.2, 686.0, 149.5, 576.5, 124.0,
-580.8, 126.0, 580.8, 126.0, 585.0, 128.1, 586.0, 128.6, 586.0, 128.7,
-587.0, 129.2, 581.8, 126.6, 581.7, 126.7, 576.5, 124.0, 795.1, 271.6,
-794.1, 271.2, 796.8, 263.4, 798.5, 255.3, 799.9, 248.5, 802.0, 241.9,
-801.3, 241.7, 836.2, 260.0, 836.2, 260.0, 871.1, 278.3, 867.9, 276.4,
-867.0, 277.9, 862.9, 277.6, 829.0, 274.6, 826.3, 282.4, 795.1, 271.6,
-820.2, 241.9, 825.3, 245.5, 825.3, 245.5, 830.4, 249.0, 818.0, 241.3,
-817.2, 242.5, 804.0, 236.0, 810.9, 240.7, 812.5, 238.1, 820.2, 241.9,
-707.8, 186.5, 709.9, 187.9, 709.2, 189.3, 711.3, 190.3, 676.6, 173.2,
-676.6, 173.2, 641.9, 156.2, 623.4, 152.8, 624.9, 144.6, 607.9, 133.0,
-634.7, 139.2, 633.0, 146.5, 658.2, 159.9, 674.4, 168.6, 674.4, 168.6,
-690.7, 177.3, 699.2, 181.9, 699.6, 181.4, 707.8, 186.5, 625.1, 297.5,
-631.6, 301.3, 631.6, 301.3, 638.2, 305.2, 641.4, 305.5, 640.7, 312.7,
-643.3, 320.2, 631.5, 313.3, 629.5, 310.4, 625.1, 297.5, 444.3, 210.5,
-441.2, 208.2, 439.3, 206.5, 439.9, 203.6, 441.9, 192.6, 444.6, 193.1,
-449.3, 182.6, 449.3, 182.6, 449.3, 182.6, 449.3, 182.6, 449.3, 182.6,
-449.3, 182.6, 449.3, 182.6, 462.4, 196.0, 462.4, 196.0, 475.5, 209.3,
-500.5, 245.8, 507.0, 241.3, 538.5, 273.3, 538.9, 273.7, 538.9, 273.8,
-539.3, 274.3, 540.5, 275.8, 540.5, 275.8, 541.6, 277.4, 492.6, 244.5,
-492.1, 245.1, 444.3, 210.5, 626.5, 73.3, 662.7, 57.4, 662.7, 57.4,
-698.9, 41.5, 692.2, 43.1, 696.0, 54.8, 688.7, 58.0, 659.8, 70.7,
-638.4, 53.9, 626.5, 73.3, 688.7, 58.0, 684.0, 56.9, 681.7, 71.7,
-672.7, 84.0, 671.9, 85.1, 670.9, 84.4, 669.1, 84.8, 646.1, 89.7,
-646.1, 94.6, 623.1, 94.6, 612.1, 88.8, 611.6, 89.7, 600.1, 84.9,
-613.5, 79.6, 613.3, 79.1, 626.5, 73.3, 638.4, 53.9, 659.8, 70.7,
-688.7, 58.0, 682.9, 81.8, 678.3, 83.9, 673.3, 81.8, 672.7, 84.0,
-681.7, 71.7, 684.0, 56.9, 688.7, 58.0, 696.0, 54.8, 692.2, 43.1,
-698.9, 41.5, 701.1, 40.5, 701.1, 40.5, 703.4, 39.5, 695.5, 59.7,
-693.9, 59.1, 684.5, 78.6, 683.7, 80.2, 684.2, 81.2, 682.9, 81.8,
-438.1, 128.0, 441.8, 124.7, 441.4, 124.4, 444.8, 120.8, 470.4, 92.8,
-470.4, 92.8, 496.1, 64.9, 506.3, 53.8, 506.3, 53.8, 516.5, 42.7,
-528.8, 29.4, 525.8, 22.1, 541.1, 16.0, 543.1, 23.6, 543.1, 23.6,
-545.1, 31.1, 545.2, 32.4, 543.6, 32.5, 542.1, 33.9, 490.1, 80.9,
-490.4, 81.3, 438.1, 128.0, 444.8, 120.8, 441.4, 124.4, 441.8, 124.7,
-438.1, 128.0, 436.1, 130.2, 436.4, 132.0, 434.0, 132.5, 424.1, 132.5,
-424.1, 132.5, 414.2, 132.6, 424.2, 121.8, 428.9, 123.9, 444.8, 120.8,
-428.3, 100.5, 430.0, 102.1, 417.9, 114.9, 407.5, 129.4, 406.3, 131.1,
-406.3, 131.1, 405.1, 132.7, 401.3, 134.8, 401.5, 136.3, 399.5, 140.5,
-395.8, 140.0, 395.9, 136.0, 393.4, 131.0, 388.3, 125.4, 390.3, 123.5,
-387.3, 116.0, 385.9, 112.6, 386.4, 112.4, 385.5, 108.7, 405.6, 101.1,
-419.0, 91.7, 428.3, 100.5, 376.6, -4.2, 369.3, -14.8, 371.9, -18.7,
-362.0, -25.4, 362.3, -25.5, 362.3, -25.5, 362.6, -25.6, 369.8, -25.0,
-371.8, -27.7, 376.9, -24.1, 413.9, 15.4, 419.5, 10.2, 462.0, 44.4,
-443.6, 22.3, 435.3, 29.2, 408.7, 14.0, 392.6, 4.9, 390.5, 7.5,
-376.6, -4.2, 354.9, 111.6, 352.6, 104.8, 354.4, 104.1, 353.9, 96.6,
-353.5, 89.0, 353.5, 89.0, 353.0, 81.4, 352.5, 73.8, 356.0, 70.2,
-352.0, 66.3, 363.7, 84.6, 379.1, 99.0, 375.4, 102.9, 382.3, 117.9,
-382.3, 118.8, 393.4, 131.0, 395.9, 136.0, 395.8, 140.0, 399.5, 140.5,
-399.3, 141.0, 400.0, 142.2, 400.6, 142.2, 400.6, 148.2, 404.3, 148.1,
-408.1, 154.0, 408.2, 154.1, 408.0, 154.2, 407.9, 154.3, 404.6, 151.9,
-404.7, 151.7, 401.4, 149.1, 381.1, 132.7, 381.1, 132.7, 360.7, 116.3,
-357.8, 114.0, 355.9, 114.6, 354.9, 111.6, 354.1, 229.1, 355.0, 230.2,
-349.9, 234.6, 345.7, 240.1, 343.2, 243.5, 340.1, 246.3, 340.6, 246.9,
-334.1, 239.5, 330.2, 231.4, 333.8, 226.6, 336.9, 222.5, 349.0, 223.4,
-354.1, 229.1, 180.4, 458.9, 165.2, 479.0, 164.5, 478.5, 150.0, 499.1,
-148.8, 490.4, 148.8, 490.4, 147.6, 481.7, 151.1, 474.2, 155.4, 476.2,
-163.2, 470.8, 171.8, 464.8, 176.5, 467.1, 180.4, 458.9, 215.6, 319.8,
-227.5, 313.4, 240.1, 309.9, 239.3, 307.0, 239.9, 307.2, 240.2, 306.5,
-241.0, 306.0, 240.7, 308.1, 240.5, 309.0, 238.9, 309.9, 227.8, 315.9,
-216.7, 313.2, 215.6, 319.8, 222.2, 171.0, 230.1, 155.8, 230.1, 155.8,
-238.0, 140.7, 236.5, 144.5, 236.9, 144.6, 235.8, 148.5, 229.8, 160.1,
-225.6, 158.8, 222.2, 171.0, 176.4, 362.5, 165.4, 402.3, 165.4, 402.3,
-154.3, 442.2, 154.2, 419.4, 152.3, 419.4, 150.3, 396.7, 150.3, 396.6,
-150.3, 396.6, 150.4, 396.6, 163.4, 379.5, 177.8, 378.3, 176.4, 362.5,
-138.4, 232.7, 138.6, 227.7, 141.1, 225.7, 138.8, 222.8, 153.2, 201.8,
-147.7, 192.0, 167.7, 180.7, 169.5, 178.8, 169.6, 178.8, 170.7, 176.4,
-170.6, 175.3, 172.0, 175.3, 172.4, 174.0, 183.0, 160.3, 182.2, 159.7,
-192.0, 145.4, 212.5, 119.2, 212.1, 118.9, 232.3, 92.4, 204.5, 142.4,
-200.4, 140.1, 168.4, 187.8, 153.4, 210.2, 155.7, 212.2, 138.4, 232.7,
-470.8, 711.5, 474.2, 737.2, 474.2, 737.2, 477.6, 762.9, 477.9, 765.2,
-477.9, 765.3, 478.2, 767.6, 474.5, 739.6, 474.2, 739.6, 470.8, 711.5,
-498.0, 805.1, 500.3, 782.9, 501.2, 783.0, 504.3, 760.8, 504.4, 760.3,
-504.4, 760.3, 504.4, 759.9, 513.1, 698.6, 512.1, 698.4, 521.8, 637.3,
-523.2, 628.6, 524.2, 628.7, 526.6, 620.2, 535.0, 590.1, 535.0, 590.1,
-543.4, 560.1, 544.6, 555.9, 545.0, 555.9, 545.8, 551.6, 524.2, 668.1,
-523.8, 668.0, 501.9, 784.4, 500.0, 794.8, 499.1, 794.7, 498.0, 805.1,
-504.3, 760.8, 501.2, 783.0, 500.3, 782.9, 498.0, 805.1, 495.0, 826.5,
-495.9, 826.7, 491.9, 847.9, 492.0, 845.8, 491.4, 845.8, 490.8, 843.6,
-496.7, 802.1, 496.6, 802.0, 504.3, 760.8, 580.1, 422.7, 580.7, 423.6,
-580.7, 423.6, 581.3, 424.5, 581.4, 425.1, 580.6, 425.6, 580.8, 426.0,
-580.0, 424.7, 579.7, 424.1, 580.1, 422.7, 448.7, 409.5, 446.9, 389.4,
-446.9, 389.4, 445.0, 369.4, 445.1, 370.9, 445.7, 370.9, 446.4, 372.4,
-447.4, 374.6, 447.4, 374.6, 448.4, 376.8, 449.8, 380.1, 449.8, 380.1,
-451.3, 383.3, 452.7, 386.4, 452.7, 386.4, 454.1, 389.4, 463.1, 419.2,
-467.1, 418.0, 480.0, 446.7, 483.6, 433.2, 458.4, 430.8, 448.7, 409.5,
-480.0, 446.7, 480.5, 447.8, 480.5, 447.8, 481.0, 448.9, 468.8, 470.9,
-471.1, 472.2, 461.7, 495.7, 460.2, 498.5, 460.2, 498.5, 458.7, 501.2,
-457.9, 492.8, 452.4, 490.2, 455.6, 484.5, 452.1, 447.0, 452.1, 447.0,
-448.7, 409.5, 458.4, 430.8, 483.6, 433.2, 480.0, 446.7, 192.8, 698.4,
-199.2, 685.0, 199.2, 685.0, 205.6, 671.5, 205.7, 680.0, 212.5, 682.3,
-209.6, 688.4, 210.1, 726.6, 221.5, 730.2, 210.6, 764.9, 210.6, 767.8,
-209.7, 770.5, 210.2, 770.6, 208.8, 765.3, 204.7, 766.3, 199.2, 762.1,
-191.8, 731.2, 190.6, 729.9, 192.8, 698.4, 199.2, 762.1, 191.9, 756.3,
-192.1, 756.1, 184.6, 750.6, 182.7, 737.0, 182.7, 737.0, 180.9, 723.4,
-188.3, 722.5, 186.8, 710.9, 192.8, 698.4, 190.6, 729.9, 191.8, 731.2,
-199.2, 762.1, 236.2, 411.3, 233.8, 419.9, 235.6, 420.4, 234.9, 429.5,
-234.5, 434.5, 234.5, 434.5, 234.2, 439.5, 233.2, 453.4, 233.2, 453.4,
-232.2, 467.3, 231.7, 473.0, 231.7, 473.0, 231.3, 478.7, 229.9, 497.9,
-231.2, 498.1, 228.5, 517.2, 227.6, 517.0, 225.0, 523.0, 224.3, 529.2,
-235.1, 554.2, 204.3, 563.1, 199.8, 598.9, 204.3, 603.4, 194.9, 612.9,
-189.9, 626.9, 193.1, 620.6, 191.5, 619.8, 193.0, 612.6, 197.7, 591.0,
-197.7, 591.0, 202.3, 569.3, 204.0, 561.3, 204.0, 561.3, 205.8, 553.2,
-209.1, 537.8, 209.1, 537.8, 212.4, 522.3, 218.1, 495.7, 218.1, 495.7,
-223.8, 469.2, 230.0, 440.3, 228.3, 439.8, 236.2, 411.3, 348.6, 878.3,
-346.2, 840.7, 363.8, 822.4, 343.8, 803.1, 345.5, 776.0, 350.3, 776.3,
-356.8, 749.4, 361.1, 731.7, 358.3, 730.5, 365.4, 714.0, 361.6, 722.8,
-364.4, 724.0, 363.4, 734.1, 362.4, 743.8, 362.4, 743.8, 361.4, 753.6,
-360.9, 758.8, 360.9, 758.8, 360.3, 764.1, 360.0, 767.1, 360.0, 767.1,
-359.7, 770.2, 359.2, 775.3, 359.1, 775.3, 358.6, 780.4, 354.5, 820.5,
-354.5, 820.5, 350.4, 860.7, 349.5, 869.5, 347.6, 869.7, 348.6, 878.3,
-424.8, 241.2, 429.7, 281.8, 429.7, 281.8, 434.6, 322.4, 432.1, 313.3,
-429.0, 314.1, 423.4, 305.9, 419.6, 275.8, 424.1, 275.2, 424.7, 244.6,
-424.8, 242.9, 425.0, 242.8, 424.8, 241.2, 278.9, 391.8, 258.1, 432.7,
-256.9, 432.0, 234.8, 472.2, 233.1, 475.5, 230.4, 476.9, 231.3, 478.7,
-231.7, 473.0, 231.7, 473.0, 232.2, 467.3, 244.9, 442.6, 246.9, 443.6,
-261.6, 419.8, 270.2, 405.8, 271.4, 406.4, 278.9, 391.8, 142.6, 812.3,
-142.0, 745.0, 143.1, 745.0, 143.6, 677.7, 143.8, 660.2, 144.9, 660.2,
-143.9, 642.7, 143.9, 642.7, 143.9, 642.7, 143.9, 642.6, 144.5, 656.6,
-149.1, 656.4, 154.3, 670.2, 155.2, 672.8, 155.2, 673.1, 155.0, 675.9,
-150.4, 732.9, 149.8, 732.8, 144.7, 789.8, 143.7, 801.1, 142.5, 801.1,
-142.6, 812.3, 166.1, 703.6, 176.1, 732.7, 175.0, 733.1, 186.1, 761.7,
-187.3, 770.3, 187.3, 770.3, 188.5, 778.9, 183.8, 801.5, 180.9, 800.9,
-173.4, 823.0, 173.4, 823.1, 173.5, 823.2, 173.5, 823.2, 173.5, 823.2,
-173.4, 823.1, 173.4, 823.0, 171.5, 807.5, 171.5, 807.5, 169.5, 791.9,
-165.2, 757.5, 162.3, 757.6, 160.9, 723.1, 160.5, 713.5, 169.8, 709.3,
-166.1, 703.6, 160.9, 723.1, 152.3, 701.7, 157.9, 699.5, 155.0, 675.9,
-155.2, 673.1, 155.2, 672.8, 154.3, 670.2, 156.0, 674.9, 156.0, 674.9,
-157.8, 679.7, 162.5, 691.5, 162.0, 691.7, 166.1, 703.6, 169.8, 709.3,
-160.5, 713.5, 160.9, 723.1, 90.3, 188.5, 91.4, 191.9, 92.7, 191.9,
-92.6, 195.2, 97.0, 229.5, 104.1, 228.6, 115.5, 261.9, 120.9, 312.4,
-121.9, 312.3, 128.3, 362.6, 127.0, 342.9, 124.1, 343.2, 119.8, 323.7,
-119.2, 321.0, 119.2, 321.0, 118.7, 318.3, 114.6, 299.8, 114.6, 299.8,
-110.6, 281.3, 100.4, 234.9, 100.0, 235.0, 90.3, 188.5, 55.9, 88.2,
-58.2, 95.1, 58.2, 95.1, 60.6, 101.9, 51.6, 122.9, 61.3, 127.0,
-62.1, 152.1, 51.9, 122.6, 56.8, 120.2, 55.9, 88.2, 128.4, 435.2,
-112.5, 419.8, 115.6, 412.2, 96.5, 404.4, 88.8, 396.0, 89.7, 395.1,
-82.9, 385.9, 82.7, 385.3, 82.6, 385.4, 82.2, 384.9, 88.2, 391.3,
-88.1, 391.4, 94.0, 397.8, 111.2, 416.5, 120.2, 413.2, 128.4, 435.2,
-59.1, 353.3, 49.3, 339.9, 51.9, 336.6, 39.5, 326.5, 39.3, 325.6,
-39.4, 325.6, 39.1, 324.7, 38.9, 324.0, 39.0, 324.0, 38.9, 323.2,
-51.2, 297.2, 65.4, 294.0, 61.2, 270.1, 62.8, 266.8, 62.8, 266.8,
-64.4, 263.4, 63.2, 308.4, 74.8, 313.5, 59.1, 353.3, 64.4, 263.4,
-65.7, 260.7, 67.4, 260.4, 67.0, 257.9, 72.4, 272.6, 72.4, 272.6,
-77.7, 287.3, 83.2, 291.6, 76.6, 299.7, 76.0, 312.1, 76.0, 314.7,
-75.8, 314.6, 75.7, 317.2, 82.3, 326.3, 62.3, 336.1, 60.9, 355.8,
-60.0, 354.6, 60.0, 354.6, 59.1, 353.3, 74.8, 313.5, 63.2, 308.4,
-64.4, 263.4, 94.6, 422.5, 88.8, 404.2, 88.9, 404.1, 82.9, 385.9,
-89.7, 395.1, 88.8, 396.0, 96.5, 404.4, 108.9, 409.5, 105.8, 417.1,
-115.1, 429.8, 117.5, 432.9, 117.2, 433.1, 119.3, 436.5, 106.1, 431.9,
-102.1, 433.0, 94.6, 422.5, 119.3, 436.5, 130.4, 454.3, 130.0, 454.6,
-141.5, 472.1, 135.1, 490.1, 135.1, 490.1, 128.8, 508.0, 128.5, 505.7,
-125.4, 503.4, 124.8, 503.8, 124.8, 503.8, 124.6, 503.6, 124.4, 503.4,
-117.4, 500.8, 119.6, 494.7, 114.9, 486.1, 119.4, 483.8, 104.7, 454.3,
-94.6, 422.5, 102.1, 433.0, 106.1, 431.9, 119.3, 436.5, 93.3, 695.5,
-93.8, 702.6, 91.2, 708.1, 94.4, 709.6, 89.1, 714.5, 89.1, 714.5,
-83.8, 719.4, 83.9, 719.1, 79.8, 717.4, 75.8, 715.5, 68.6, 706.3,
-67.0, 706.5, 56.3, 701.2, 56.1, 701.0, 56.1, 701.0, 55.9, 700.7,
-61.0, 692.4, 52.8, 687.4, 49.7, 674.1, 69.7, 671.4, 74.7, 680.8,
-93.3, 695.5, 49.7, 674.1, 49.3, 672.3, 49.3, 672.3, 48.9, 670.5,
-58.1, 672.3, 70.0, 661.3, 72.2, 648.9, 80.8, 650.5, 80.8, 650.5,
-89.4, 652.2, 90.7, 668.6, 87.9, 684.0, 92.5, 684.9, 92.9, 690.2,
-92.9, 690.2, 93.3, 695.5, 74.7, 680.8, 69.7, 671.4, 49.7, 674.1,
-855.7, 644.3, 864.1, 655.0, 862.1, 657.6, 872.6, 665.6, 867.3, 669.8,
-867.3, 669.8, 861.9, 674.1, 855.1, 664.1, 839.5, 674.7, 817.1, 675.3,
-814.8, 664.3, 834.4, 648.1, 855.7, 644.3, 850.6, 593.0, 839.2, 607.1,
-835.7, 605.4, 827.8, 621.3, 824.4, 623.7, 821.5, 619.7, 815.2, 618.2,
-805.9, 616.0, 805.7, 616.5, 796.5, 613.7, 796.7, 613.2, 796.7, 613.2,
-796.8, 612.7, 806.7, 608.6, 806.9, 609.0, 817.0, 605.3, 833.8, 599.1,
-848.1, 589.4, 850.6, 593.0, 550.6, 346.8, 543.4, 335.2, 544.7, 334.1,
-536.1, 323.7, 535.4, 316.0, 538.8, 312.6, 534.6, 308.4, 560.5, 326.1,
-560.5, 326.1, 586.5, 343.8, 582.3, 356.2, 587.4, 357.9, 588.3, 372.0,
-570.6, 373.5, 567.0, 362.0, 550.6, 346.8, 588.3, 372.0, 588.8, 379.2,
-586.2, 380.6, 589.2, 386.5, 595.0, 392.5, 585.9, 399.5, 590.6, 408.4,
-582.9, 397.1, 582.9, 397.1, 575.2, 385.9, 565.0, 365.3, 562.9, 366.3,
-550.6, 346.8, 567.0, 362.0, 570.6, 373.5, 588.3, 372.0, 706.7, 478.9,
-709.8, 483.0, 713.1, 483.1, 713.0, 487.0, 713.1, 488.1, 712.7, 488.6,
-713.3, 489.1, 713.6, 489.3, 713.2, 490.0, 713.5, 490.2, 710.9, 503.7,
-716.1, 504.7, 718.6, 519.2, 707.0, 525.6, 711.3, 533.5, 704.0, 547.8,
-694.7, 516.5, 701.7, 512.8, 706.7, 478.9, 922.2, 514.6, 918.6, 541.0,
-913.8, 541.2, 915.0, 567.3, 913.1, 566.1, 913.1, 566.1, 911.3, 564.9,
-910.8, 564.5, 910.9, 564.3, 910.5, 563.7, 912.9, 551.4, 913.4, 551.5,
-916.3, 539.2, 916.9, 536.7, 916.9, 536.7, 917.5, 534.2, 919.9, 524.4,
-921.4, 524.5, 922.2, 514.6, 868.0, 523.0, 871.7, 528.3, 871.8, 528.1,
-875.4, 533.5, 880.0, 540.1, 880.9, 539.6, 884.7, 546.7, 882.9, 545.5,
-882.5, 544.0, 881.1, 544.3, 881.2, 544.2, 876.3, 539.0, 874.5, 539.8,
-875.5, 535.3, 864.1, 532.8, 853.8, 525.7, 847.5, 522.2, 848.3, 520.8,
-842.9, 516.0, 811.2, 477.0, 810.7, 477.4, 777.8, 439.4, 764.3, 422.8,
-764.3, 422.8, 750.9, 406.3, 794.4, 444.7, 792.0, 447.3, 833.2, 488.3,
-850.6, 505.7, 851.2, 505.1, 868.0, 523.0, 800.2, 369.8, 812.1, 386.9,
-808.4, 391.3, 823.9, 404.0, 850.1, 450.0, 852.8, 448.7, 884.2, 491.5,
-887.5, 513.7, 885.0, 514.4, 890.9, 536.0, 891.2, 536.4, 890.9, 536.6,
-891.0, 537.3, 856.2, 473.4, 856.3, 473.3, 821.7, 409.3, 810.9, 389.5,
-794.8, 382.7, 800.2, 369.8, 906.3, 160.9, 920.0, 170.9, 919.3, 171.9,
-933.6, 180.8, 935.5, 182.7, 933.6, 187.9, 934.2, 187.9, 907.8, 185.9,
-908.1, 182.4, 882.0, 176.8, 878.8, 176.1, 878.8, 176.1, 875.6, 175.5,
-868.4, 168.9, 864.6, 173.1, 853.6, 170.8, 877.1, 159.7, 881.0, 157.7,
-906.3, 160.9, 938.0, 227.0, 943.7, 234.1, 941.1, 238.1, 940.0, 248.8,
-940.2, 247.6, 937.7, 247.7, 936.1, 245.9, 907.6, 209.3, 909.7, 206.5,
-875.6, 175.5, 878.8, 176.1, 878.8, 176.1, 882.0, 176.8, 910.9, 200.7,
-914.7, 198.1, 938.0, 227.0, 882.0, 176.8, 908.1, 182.4, 907.8, 185.9,
-934.2, 187.9, 945.0, 197.5, 932.2, 225.8, 938.0, 227.0, 914.7, 198.1,
-910.9, 200.7, 882.0, 176.8, 913.4, 228.8, 924.8, 237.3, 924.8, 237.3,
-936.1, 245.9, 937.7, 247.7, 940.2, 247.6, 940.0, 248.8, 940.1, 248.9,
-940.0, 249.0, 940.1, 249.1, 934.5, 244.9, 934.5, 244.9, 929.0, 240.6,
-925.8, 238.2, 925.8, 238.2, 922.7, 235.8, 918.0, 232.3, 918.1, 232.3,
-913.4, 228.8, 681.9, 99.4, 674.2, 94.0, 674.0, 93.0, 669.1, 84.8,
-670.9, 84.4, 671.9, 85.1, 672.7, 84.0, 673.3, 81.8, 678.3, 83.9,
-682.9, 81.8, 696.7, 78.9, 697.8, 73.4, 710.6, 75.9, 721.9, 78.2,
-720.8, 83.6, 731.1, 91.4, 735.2, 94.5, 735.9, 98.2, 739.3, 97.6,
-715.3, 102.1, 714.6, 98.4, 689.9, 99.1, 685.9, 99.3, 684.6, 101.2,
-681.9, 99.4, 767.4, 197.3, 774.3, 201.8, 772.5, 209.7, 778.7, 210.2,
-766.2, 203.2, 766.9, 201.7, 753.8, 196.2, 720.3, 174.2, 722.5, 153.6,
-687.8, 150.7, 729.3, 154.2, 728.8, 172.1, 767.4, 197.3, 862.9, 277.6,
-867.0, 277.9, 867.9, 276.4, 871.1, 278.3, 874.9, 280.3, 875.3, 279.8,
-878.8, 282.3, 883.0, 285.2, 883.2, 288.4, 887.3, 288.2, 887.1, 288.3,
-886.8, 288.3, 886.8, 288.4, 870.8, 290.2, 867.9, 292.0, 856.1, 303.1,
-856.0, 302.9, 853.8, 304.2, 851.6, 305.3, 816.2, 322.3, 817.1, 324.5,
-780.8, 339.3, 782.3, 338.7, 780.3, 335.4, 782.0, 333.8, 789.5, 326.7,
-790.6, 327.8, 799.3, 321.8, 802.4, 319.6, 802.4, 319.6, 805.6, 317.4,
-834.2, 297.5, 833.0, 295.4, 862.9, 277.6, 657.9, 132.4, 654.5, 130.0,
-655.6, 128.2, 652.1, 126.1, 669.1, 137.8, 684.1, 135.7, 686.0, 149.5,
-686.9, 150.1, 686.9, 150.1, 687.8, 150.7, 720.3, 173.2, 720.2, 173.3,
-752.8, 195.8, 753.2, 196.1, 753.4, 195.9, 753.8, 196.2, 761.2, 199.3,
-760.5, 200.8, 767.2, 205.4, 764.9, 203.8, 764.9, 203.9, 762.5, 202.3,
-757.6, 199.0, 757.6, 199.0, 752.8, 195.8, 705.4, 164.1, 704.8, 164.9,
-657.9, 132.4, 625.6, 107.8, 638.8, 117.0, 638.8, 117.0, 652.1, 126.1,
-655.6, 128.2, 654.5, 130.0, 657.9, 132.4, 661.1, 135.9, 661.1, 135.9,
-664.3, 139.4, 666.3, 141.5, 666.0, 142.0, 668.3, 143.7, 662.0, 139.2,
-662.4, 138.7, 656.5, 133.7, 646.2, 125.1, 646.2, 125.1, 635.9, 116.5,
-630.8, 112.2, 631.3, 111.2, 625.6, 107.8, 529.6, 223.2, 534.4, 238.6,
-552.7, 230.3, 570.7, 244.0, 580.3, 256.7, 577.6, 260.4, 589.9, 269.3,
-583.2, 266.0, 583.2, 266.0, 576.5, 262.7, 552.2, 244.1, 537.3, 247.9,
-529.6, 223.2, 576.5, 262.7, 542.1, 245.5, 542.5, 244.8, 507.7, 228.3,
-491.6, 218.8, 485.1, 223.3, 475.5, 209.3, 462.4, 196.0, 462.4, 196.0,
-449.3, 182.6, 451.0, 184.5, 451.8, 183.9, 454.2, 185.1, 491.9, 204.2,
-494.1, 200.7, 529.6, 223.2, 537.3, 247.9, 552.2, 244.1, 576.5, 262.7,
-454.2, 185.1, 451.8, 183.9, 451.0, 184.5, 449.3, 182.6, 449.3, 182.6,
-449.3, 182.6, 449.3, 182.6, 436.6, 157.6, 430.6, 159.3, 408.0, 140.6,
-408.6, 140.5, 408.6, 140.5, 409.3, 140.3, 415.1, 145.5, 414.8, 145.9,
-420.4, 151.4, 434.4, 165.4, 434.4, 165.4, 448.4, 179.4, 451.3, 182.2,
-453.2, 181.7, 454.2, 185.1, 613.8, 318.3, 609.5, 309.1, 605.8, 299.8,
-605.3, 300.0, 605.1, 297.0, 605.1, 297.0, 604.9, 294.0, 605.3, 294.2,
-609.6, 291.0, 609.4, 288.2, 617.2, 292.8, 617.2, 292.8, 625.1, 297.5,
-629.5, 310.4, 631.5, 313.3, 643.3, 320.2, 644.4, 323.5, 643.2, 325.5,
-645.5, 326.8, 647.2, 327.6, 645.5, 330.3, 647.2, 331.9, 654.4, 331.7,
-655.2, 355.4, 663.1, 378.8, 631.4, 365.8, 636.9, 349.7, 613.8, 318.3,
-663.1, 378.8, 665.6, 386.2, 665.9, 393.6, 668.1, 393.5, 665.6, 394.7,
-663.0, 395.4, 663.1, 395.9, 657.0, 391.8, 657.0, 391.8, 650.9, 387.6,
-645.7, 384.7, 646.5, 383.2, 642.2, 378.7, 633.7, 347.0, 628.0, 348.5,
-613.8, 318.3, 636.9, 349.7, 631.4, 365.8, 663.1, 378.8, 499.3, 283.8,
-494.8, 281.0, 494.6, 281.3, 490.3, 278.3, 488.5, 277.1, 488.5, 277.1,
-486.8, 275.9, 493.1, 279.8, 493.2, 279.7, 499.3, 283.8, 745.7, 58.1,
-738.0, 64.9, 735.2, 63.3, 730.2, 71.7, 721.6, 76.1, 720.4, 73.8,
-710.6, 75.9, 697.8, 73.4, 696.7, 78.9, 682.9, 81.8, 684.2, 81.2,
-683.7, 80.2, 684.5, 78.6, 714.6, 67.2, 714.3, 62.8, 745.7, 58.1,
-684.5, 78.6, 693.9, 59.1, 695.5, 59.7, 703.4, 39.5, 715.2, 34.3,
-715.7, 35.3, 727.1, 29.1, 740.2, 32.1, 738.4, 39.7, 750.0, 50.0,
-751.2, 51.1, 752.8, 51.7, 752.7, 51.9, 750.0, 51.3, 749.2, 55.0,
-745.7, 58.1, 714.3, 62.8, 714.6, 67.2, 684.5, 78.6, 542.1, 33.9,
-543.6, 32.5, 545.2, 32.4, 545.1, 31.1, 553.1, 61.2, 553.1, 61.2,
-561.1, 91.2, 561.8, 66.9, 553.0, 66.6, 544.8, 42.1, 543.5, 38.0,
-542.0, 37.9, 542.1, 33.9, 407.5, 129.4, 417.9, 114.9, 430.0, 102.1,
-428.3, 100.5, 434.4, 92.1, 434.4, 92.1, 440.4, 83.6, 447.0, 74.6,
-447.0, 74.6, 453.5, 65.5, 459.8, 56.7, 459.8, 56.7, 466.1, 47.9,
-487.4, 18.9, 487.9, 19.2, 508.1, -10.5, 509.0, -11.6, 509.0, -11.6,
-509.8, -12.8, 518.4, -24.7, 515.8, -28.1, 527.0, -36.7, 527.2, -32.2,
-528.2, -32.2, 529.4, -27.8, 519.7, -10.1, 516.9, -11.6, 504.3, 4.5,
-492.4, 20.0, 492.4, 20.0, 480.4, 35.4, 462.3, 58.7, 462.3, 58.7,
-444.3, 82.0, 425.9, 105.7, 427.1, 106.7, 407.5, 129.4, 638.1, -51.9,
-648.3, -56.7, 681.7, -32.3, 682.2, -11.8, 659.3, 3.5, 661.0, 6.1,
-639.9, 23.9, 642.7, 22.6, 639.7, 16.2, 639.5, 8.4, 638.8, -21.7,
-627.0, -46.6, 638.1, -51.9, 590.4, 20.7, 590.0, 21.0, 591.9, 23.2,
-593.4, 25.8, 600.9, 38.2, 611.7, 42.7, 608.4, 50.5, 588.8, 67.1,
-588.0, 66.3, 569.1, 83.6, 568.2, 78.7, 569.0, 78.4, 567.3, 73.7,
-562.9, 63.6, 565.2, 62.6, 563.1, 51.4, 570.9, 33.5, 574.9, 33.8,
-590.4, 20.7, 563.1, 51.4, 560.4, 36.7, 560.4, 36.7, 557.7, 22.0,
-558.4, 22.2, 563.3, 3.6, 568.9, -14.7, 567.4, -13.1, 573.7, -6.8,
-578.5, 1.0, 583.6, 9.6, 583.6, 9.6, 588.8, 18.1, 589.6, 19.4,
-590.7, 20.3, 590.4, 20.7, 574.9, 33.8, 570.9, 33.5, 563.1, 51.4,
-381.2, 91.7, 379.0, 83.0, 379.0, 83.0, 376.8, 74.3, 398.1, 75.3,
-406.4, 74.7, 420.2, 60.1, 422.4, 62.5, 422.7, 62.3, 424.5, 65.0,
-424.7, 65.3, 424.7, 65.3, 424.9, 65.5, 429.1, 70.4, 432.4, 75.9,
-433.3, 75.3, 410.5, 89.0, 407.1, 92.2, 381.2, 91.7, 433.3, 75.3,
-436.2, 74.9, 441.1, 80.3, 440.4, 83.6, 434.4, 92.1, 434.4, 92.1,
-428.3, 100.5, 419.0, 91.7, 405.6, 101.1, 385.5, 108.7, 383.3, 100.2,
-383.3, 100.2, 381.2, 91.7, 407.1, 92.2, 410.5, 89.0, 433.3, 75.3,
-389.3, 14.2, 383.0, 5.0, 383.0, 5.0, 376.6, -4.2, 390.5, 7.5,
-392.6, 4.9, 408.7, 14.0, 405.6, 9.6, 396.6, 18.3, 389.3, 14.2,
-436.9, -32.1, 422.6, -36.7, 419.5, -26.5, 402.0, -21.5, 401.0, -21.6,
-400.6, -21.2, 400.1, -21.7, 390.0, -26.2, 383.0, -17.7, 376.9, -24.1,
-371.8, -27.7, 369.8, -25.0, 362.6, -25.6, 370.0, -27.5, 370.0, -27.5,
-377.4, -29.4, 407.0, -32.0, 410.3, -40.7, 436.9, -32.1, 377.4, -29.4,
-388.0, -32.1, 387.8, -33.8, 398.6, -34.9, 399.3, -35.1, 399.3, -34.9,
-400.0, -35.1, 407.0, -36.9, 407.0, -37.0, 414.0, -38.8, 441.9, -46.0,
-441.9, -45.9, 469.8, -53.0, 471.6, -53.4, 471.6, -53.4, 473.5, -53.9,
-508.4, -62.5, 508.4, -62.5, 543.4, -71.1, 543.5, -71.2, 546.8, -66.8,
-549.1, -67.4, 548.5, -66.6, 548.5, -66.6, 548.0, -65.9, 523.9, -58.0,
-523.8, -58.5, 499.5, -51.2, 493.8, -49.4, 493.8, -49.4, 488.0, -47.7,
-474.0, -43.4, 474.0, -43.4, 460.0, -39.1, 448.4, -35.6, 448.7, -33.5,
-436.9, -32.1, 410.3, -40.7, 407.0, -32.0, 377.4, -29.4, 413.6, -20.3,
-407.8, -20.9, 407.8, -20.9, 402.0, -21.5, 419.5, -26.5, 422.6, -36.7,
-436.9, -32.1, 448.7, -33.5, 448.4, -35.6, 460.0, -39.1, 437.7, -27.9,
-437.4, -27.6, 413.6, -20.3, 262.6, 59.6, 266.1, 47.2, 266.1, 47.2,
-269.6, 34.9, 275.0, 35.4, 273.9, 47.9, 278.3, 61.0, 280.9, 68.7,
-282.6, 68.5, 283.5, 76.5, 283.3, 74.8, 281.6, 75.0, 279.7, 73.4,
-278.0, 72.0, 278.0, 72.0, 276.3, 70.7, 269.4, 65.1, 263.8, 66.2,
-262.6, 59.6, 258.3, 282.1, 242.0, 274.1, 239.8, 263.1, 225.8, 266.0,
-226.1, 264.6, 220.4, 263.4, 215.0, 260.7, 215.6, 260.1, 215.2, 259.7,
-215.5, 258.6, 231.4, 266.1, 230.9, 267.1, 246.4, 275.6, 252.4, 278.8,
-252.2, 279.3, 258.3, 282.1, 328.2, 263.3, 327.4, 271.4, 317.3, 278.9,
-316.7, 278.6, 304.2, 270.5, 309.3, 262.4, 302.0, 246.3, 292.6, 225.6,
-289.8, 226.5, 283.1, 204.9, 281.7, 200.4, 287.8, 196.8, 285.8, 194.3,
-306.2, 219.1, 302.8, 221.9, 319.8, 249.5, 324.0, 256.4, 328.9, 256.9,
-328.2, 263.3, 302.0, 246.3, 309.3, 262.4, 304.2, 270.5, 316.7, 278.6,
-317.4, 281.6, 313.8, 282.4, 310.9, 286.3, 304.9, 294.2, 305.5, 301.5,
-298.9, 302.1, 287.0, 303.2, 286.3, 295.9, 273.8, 289.7, 273.2, 289.5,
-272.7, 289.1, 272.7, 289.2, 286.8, 267.4, 283.3, 250.8, 302.0, 246.3,
-272.7, 289.2, 272.7, 289.2, 272.6, 289.1, 272.4, 289.1, 272.4, 286.8,
-267.9, 286.8, 263.4, 284.6, 262.5, 271.2, 266.8, 270.9, 270.2, 257.1,
-276.7, 231.0, 269.4, 209.6, 283.1, 204.9, 289.8, 226.5, 292.6, 225.6,
-302.0, 246.3, 283.3, 250.8, 286.8, 267.4, 272.7, 289.2, 355.1, 114.2,
-354.4, 113.6, 355.4, 111.8, 354.9, 111.6, 355.9, 114.6, 357.8, 114.0,
-360.7, 116.3, 360.6, 115.1, 357.3, 116.0, 355.1, 114.2, 290.3, 313.5,
-264.4, 347.9, 264.3, 347.9, 238.3, 382.2, 230.2, 388.0, 231.9, 390.5,
-225.7, 398.9, 200.5, 426.6, 203.0, 428.9, 180.4, 458.9, 176.5, 467.1,
-171.8, 464.8, 163.2, 470.8, 180.2, 443.2, 183.7, 445.4, 204.3, 420.0,
-243.4, 371.5, 243.4, 371.5, 282.5, 323.1, 284.3, 320.9, 284.3, 320.9,
-286.0, 318.8, 288.1, 316.1, 288.2, 316.2, 290.3, 313.5, 176.4, 420.6,
-168.2, 442.5, 164.8, 441.2, 153.1, 461.8, 153.0, 462.3, 152.8, 462.2,
-152.7, 462.6, 167.5, 420.8, 166.8, 420.5, 182.4, 379.0, 181.0, 382.6,
-181.8, 382.9, 181.3, 386.7, 178.8, 403.7, 182.3, 404.9, 176.4, 420.6,
-177.5, 256.5, 178.6, 254.5, 179.3, 254.6, 179.6, 252.5, 203.3, 213.2,
-200.9, 211.7, 222.2, 171.0, 225.6, 158.8, 229.8, 160.1, 235.8, 148.5,
-235.5, 149.5, 235.5, 149.5, 235.3, 150.5, 230.0, 160.7, 229.8, 160.6,
-224.3, 170.6, 214.9, 187.9, 214.9, 187.9, 205.5, 205.2, 192.6, 228.8,
-192.5, 228.8, 179.6, 252.5, 179.3, 254.6, 178.6, 254.5, 177.5, 256.5,
-146.0, 348.1, 145.8, 345.7, 145.5, 345.7, 145.6, 343.2, 146.0, 329.6,
-141.9, 317.5, 146.4, 316.0, 151.6, 306.0, 151.6, 306.0, 156.8, 296.1,
-155.4, 298.3, 156.2, 298.9, 155.7, 301.6, 154.8, 305.8, 154.8, 305.8,
-154.0, 309.9, 150.0, 329.0, 150.8, 329.2, 146.0, 348.1, 159.0, 237.4,
-147.8, 258.1, 146.3, 257.4, 136.6, 278.7, 137.5, 255.7, 137.5, 255.7,
-138.4, 232.7, 155.7, 212.2, 153.4, 210.2, 168.4, 187.8, 169.4, 188.0,
-167.3, 213.8, 159.0, 237.4, 168.4, 187.8, 200.4, 140.1, 204.5, 142.4,
-232.3, 92.4, 235.7, 87.8, 236.4, 88.2, 239.2, 83.3, 219.1, 123.5,
-219.1, 123.5, 199.0, 163.7, 206.9, 171.3, 179.0, 200.6, 159.0, 237.4,
-167.3, 213.8, 169.4, 188.0, 168.4, 187.8, 471.9, 840.0, 468.5, 791.8,
-468.5, 791.8, 465.1, 743.6, 463.7, 718.3, 464.4, 718.2, 463.6, 692.9,
-463.5, 690.2, 463.4, 690.2, 463.3, 687.6, 463.2, 686.9, 463.2, 686.2,
-463.2, 686.2, 463.2, 686.2, 463.2, 686.9, 463.3, 687.6, 463.4, 690.2,
-463.5, 690.2, 463.6, 692.9, 467.8, 766.4, 469.7, 766.4, 471.9, 840.0,
-704.6, 772.1, 709.6, 768.3, 709.0, 767.6, 713.4, 763.0, 716.6, 759.7,
-716.6, 759.7, 719.8, 756.4, 725.4, 750.5, 725.4, 750.5, 731.1, 744.7,
-735.2, 740.4, 735.2, 740.4, 739.3, 736.1, 751.8, 723.2, 750.1, 721.0,
-764.3, 710.3, 765.7, 712.6, 766.5, 712.4, 767.2, 714.9, 768.1, 717.4,
-768.7, 717.2, 770.2, 719.5, 739.2, 747.8, 738.0, 746.6, 704.6, 772.1,
-530.8, 680.6, 529.6, 688.2, 529.9, 688.2, 529.0, 695.8, 526.4, 716.5,
-526.4, 716.5, 523.8, 737.3, 519.5, 772.2, 519.5, 772.2, 515.2, 807.1,
-512.6, 828.3, 512.6, 828.3, 510.0, 849.6, 508.0, 865.3, 511.1, 866.3,
-506.1, 880.9, 505.7, 882.1, 499.2, 880.7, 499.2, 881.1, 505.3, 820.4,
-508.7, 820.8, 518.2, 760.4, 524.5, 720.5, 524.2, 720.5, 530.8, 680.6,
-504.4, 759.9, 504.4, 760.3, 504.4, 760.3, 504.3, 760.8, 496.6, 802.0,
-496.7, 802.1, 490.8, 843.6, 489.1, 837.4, 485.8, 836.4, 487.4, 831.1,
-486.4, 819.9, 486.4, 819.9, 485.3, 808.6, 485.3, 808.6, 483.9, 793.3,
-482.5, 778.1, 485.1, 756.8, 480.5, 747.8, 494.2, 736.4, 491.4, 738.7,
-499.5, 748.0, 504.4, 759.9, 494.2, 736.4, 501.4, 685.9, 537.8, 673.8,
-521.8, 637.3, 512.1, 698.4, 513.1, 698.6, 504.4, 759.9, 499.5, 748.0,
-491.4, 738.7, 494.2, 736.4, 572.6, 410.9, 576.4, 416.8, 576.4, 416.8,
-580.1, 422.7, 579.7, 424.1, 580.0, 424.7, 580.8, 426.0, 580.2, 430.4,
-579.6, 430.3, 578.5, 434.6, 577.9, 436.5, 578.4, 438.1, 577.4, 438.4,
-563.8, 442.5, 563.3, 440.9, 549.3, 443.3, 545.6, 443.9, 543.5, 442.4,
-541.9, 444.6, 555.1, 426.2, 553.8, 421.7, 572.6, 410.9, 482.0, 772.1,
-480.0, 750.5, 480.1, 750.5, 478.0, 728.9, 478.3, 721.1, 484.7, 720.8,
-484.0, 713.4, 486.7, 742.4, 492.0, 746.3, 482.0, 772.1, 446.9, 345.2,
-448.3, 351.9, 446.0, 352.4, 445.1, 359.6, 444.8, 361.9, 444.1, 362.0,
-444.5, 364.1, 443.9, 357.8, 443.9, 357.8, 443.4, 351.4, 443.8, 348.2,
-447.5, 347.8, 446.9, 345.2, 406.2, 718.4, 412.9, 726.6, 407.7, 747.1,
-403.8, 747.8, 396.2, 749.3, 393.5, 735.4, 383.3, 722.9, 376.1, 714.2,
-374.3, 704.6, 369.0, 705.6, 385.7, 702.3, 395.6, 705.4, 406.2, 718.4,
-451.5, 559.9, 451.9, 567.7, 451.9, 567.7, 452.4, 575.5, 452.6, 578.7,
-452.6, 578.7, 452.8, 581.9, 453.1, 588.3, 453.1, 588.3, 453.5, 594.6,
-455.3, 625.3, 455.3, 625.3, 457.1, 655.9, 457.9, 669.3, 457.9, 669.3,
-458.7, 682.6, 460.2, 708.3, 460.1, 708.3, 461.7, 734.0, 463.2, 759.1,
-463.3, 759.1, 464.9, 784.3, 464.9, 784.9, 464.8, 784.9, 464.7, 785.5,
-463.1, 759.8, 463.2, 759.7, 461.7, 734.0, 460.1, 708.3, 460.2, 708.3,
-458.7, 682.6, 457.9, 669.3, 457.9, 669.3, 457.1, 655.9, 455.3, 625.3,
-455.3, 625.3, 453.5, 594.6, 453.1, 588.3, 453.1, 588.3, 452.8, 581.9,
-452.6, 578.7, 452.6, 578.7, 452.4, 575.5, 451.9, 567.7, 451.9, 567.7,
-451.5, 559.9, 358.6, 780.4, 359.1, 775.3, 359.2, 775.3, 359.7, 770.2,
-360.0, 767.1, 360.0, 767.1, 360.3, 764.1, 360.9, 758.8, 360.9, 758.8,
-361.4, 753.6, 362.4, 743.8, 362.4, 743.8, 363.4, 734.1, 364.4, 724.0,
-361.6, 722.8, 365.4, 714.0, 365.5, 713.7, 365.5, 713.7, 365.5, 713.5,
-364.5, 723.8, 364.5, 723.8, 363.4, 734.1, 362.4, 743.8, 362.4, 743.8,
-361.4, 753.6, 360.9, 758.8, 360.9, 758.8, 360.3, 764.1, 360.0, 767.1,
-360.0, 767.1, 359.7, 770.2, 359.2, 775.3, 359.1, 775.3, 358.6, 780.4,
-419.4, 196.3, 422.1, 218.7, 422.1, 218.7, 424.8, 241.2, 425.0, 242.8,
-424.8, 242.9, 424.7, 244.6, 423.4, 234.8, 423.6, 234.8, 422.5, 225.0,
-421.0, 210.6, 421.3, 210.6, 419.4, 196.3, 356.8, 749.4, 350.3, 776.3,
-345.5, 776.0, 343.8, 803.1, 354.5, 813.4, 336.9, 831.8, 329.9, 860.4,
-330.6, 857.7, 330.0, 857.6, 330.6, 854.9, 343.4, 802.1, 343.4, 802.1,
-356.8, 749.4, 369.0, 519.0, 376.4, 514.0, 386.1, 528.3, 403.2, 537.7,
-403.4, 537.8, 403.4, 537.8, 403.6, 538.0, 405.6, 539.1, 407.7, 539.3,
-407.6, 540.2, 405.2, 559.0, 409.8, 571.4, 398.6, 577.3, 394.5, 579.5,
-387.8, 566.8, 377.0, 556.3, 376.7, 556.1, 376.5, 556.1, 376.5, 555.8,
-372.5, 537.4, 363.0, 523.0, 369.0, 519.0, 376.5, 555.8, 376.3, 552.5,
-373.2, 552.6, 370.0, 549.5, 362.3, 542.1, 362.3, 542.1, 354.7, 534.6,
-341.8, 522.1, 341.8, 522.1, 329.0, 509.6, 314.1, 495.1, 316.5, 484.7,
-299.2, 480.6, 336.5, 489.3, 341.5, 492.2, 369.0, 519.0, 363.0, 523.0,
-372.5, 537.4, 376.5, 555.8, 403.2, 537.7, 386.1, 528.3, 376.4, 514.0,
-369.0, 519.0, 341.5, 492.2, 336.5, 489.3, 299.2, 480.6, 295.0, 478.2,
-296.3, 475.1, 292.1, 473.7, 302.0, 476.9, 301.3, 479.0, 310.5, 484.3,
-356.8, 511.0, 357.2, 510.5, 403.2, 537.7, 324.0, 409.5, 317.7, 409.2,
-311.5, 396.8, 312.2, 396.0, 316.9, 390.7, 323.6, 396.7, 334.9, 397.3,
-338.5, 397.5, 340.5, 399.4, 342.0, 397.7, 335.1, 405.5, 332.6, 410.0,
-324.0, 409.5, 278.7, 425.6, 285.6, 411.6, 288.9, 412.4, 292.4, 397.5,
-267.8, 486.1, 267.7, 486.1, 242.9, 574.7, 250.8, 548.1, 249.4, 547.7,
-255.8, 520.7, 267.2, 473.2, 267.2, 473.2, 278.6, 425.7, 278.7, 425.6,
-278.7, 425.6, 278.7, 425.6, 278.6, 425.7, 275.1, 429.0, 276.4, 430.3,
-274.1, 435.0, 273.4, 436.3, 273.4, 436.3, 272.8, 437.6, 262.3, 459.0,
-262.3, 459.0, 251.8, 480.4, 239.7, 505.1, 242.2, 506.7, 227.6, 529.8,
-228.1, 523.5, 229.2, 517.3, 228.5, 517.2, 231.2, 498.1, 229.9, 497.9,
-231.3, 478.7, 230.4, 476.9, 233.1, 475.5, 234.8, 472.2, 256.1, 448.4,
-255.5, 447.6, 278.6, 425.7, 234.8, 472.2, 256.9, 432.0, 258.1, 432.7,
-278.9, 391.8, 294.0, 364.3, 294.0, 364.3, 309.1, 336.7, 309.4, 336.0,
-309.5, 336.0, 309.8, 335.3, 301.3, 366.5, 302.9, 367.1, 292.4, 397.5,
-288.9, 412.4, 285.6, 411.6, 278.7, 425.6, 278.7, 425.6, 278.7, 425.6,
-278.6, 425.7, 255.5, 447.6, 256.1, 448.4, 234.8, 472.2, 173.4, 823.0,
-173.4, 823.1, 173.5, 823.2, 173.5, 823.2, 169.0, 836.5, 163.8, 836.8,
-164.5, 849.8, 156.3, 851.7, 151.6, 841.8, 142.6, 830.7, 142.7, 830.7,
-142.6, 826.8, 142.6, 822.9, 142.6, 817.6, 142.3, 817.6, 142.6, 812.3,
-142.5, 801.1, 143.7, 801.1, 144.7, 789.8, 143.9, 791.3, 147.5, 793.0,
-150.3, 796.2, 161.8, 809.6, 161.9, 809.6, 173.4, 823.0, 119.8, 323.7,
-124.1, 343.2, 127.0, 342.9, 128.3, 362.6, 128.7, 366.0, 129.2, 369.3,
-129.2, 369.3, 130.6, 382.7, 130.6, 382.7, 132.1, 396.2, 124.8, 369.2,
-120.5, 370.3, 108.8, 344.5, 107.3, 335.3, 122.1, 325.8, 119.8, 323.7,
-63.0, 185.6, 57.2, 200.1, 54.3, 199.5, 51.4, 214.6, 49.9, 210.5,
-49.9, 210.5, 48.4, 206.4, 53.0, 194.9, 65.5, 192.5, 63.0, 185.6,
-105.4, 363.9, 106.3, 366.5, 106.3, 366.5, 107.3, 369.1, 122.3, 400.9,
-118.4, 402.7, 129.6, 436.3, 129.3, 435.7, 129.0, 435.8, 128.4, 435.2,
-120.2, 413.2, 111.2, 416.5, 94.0, 397.8, 89.6, 384.1, 97.9, 380.0,
-105.4, 363.9, 94.0, 397.8, 88.1, 391.4, 88.2, 391.3, 82.2, 384.9,
-79.3, 381.0, 75.7, 380.0, 76.5, 377.0, 76.4, 376.3, 75.1, 375.7,
-75.3, 375.5, 75.5, 375.2, 74.8, 374.8, 74.3, 374.1, 74.1, 374.0,
-74.2, 373.9, 74.1, 373.8, 75.7, 359.1, 74.5, 359.0, 75.0, 344.2,
-75.0, 344.2, 90.3, 334.3, 90.8, 323.7, 98.1, 343.8, 98.1, 343.8,
-105.4, 363.9, 97.9, 380.0, 89.6, 384.1, 94.0, 397.8, 804.3, 668.0,
-797.3, 661.3, 797.3, 661.3, 790.4, 654.6, 793.9, 640.3, 795.5, 639.4,
-793.8, 625.1, 794.2, 623.3, 794.7, 621.4, 794.7, 621.4, 795.2, 621.3,
-796.2, 619.0, 795.5, 618.0, 795.4, 618.0, 796.0, 615.9, 796.5, 613.7,
-805.7, 616.5, 805.9, 616.0, 815.2, 618.2, 818.6, 641.9, 817.6, 648.5,
-804.3, 668.0, 815.2, 618.2, 821.5, 619.7, 824.4, 623.7, 827.8, 621.3,
-828.2, 620.5, 831.7, 622.2, 835.7, 623.1, 838.1, 626.0, 838.6, 626.1,
-842.2, 627.4, 849.0, 635.9, 849.0, 635.9, 855.7, 644.3, 834.4, 648.1,
-814.8, 664.3, 817.1, 675.3, 814.5, 675.3, 814.5, 675.3, 811.9, 675.4,
-809.7, 676.2, 808.1, 671.7, 804.3, 668.0, 817.6, 648.5, 818.6, 641.9,
-815.2, 618.2, 813.9, 548.1, 824.6, 557.5, 824.6, 557.5, 835.3, 566.8,
-837.5, 568.8, 837.4, 568.9, 839.5, 570.9, 839.5, 570.9, 847.4, 578.7,
-855.2, 586.5, 834.2, 567.7, 833.9, 567.9, 813.9, 548.1, 703.1, 474.3,
-704.9, 476.6, 704.9, 476.6, 706.7, 478.9, 701.7, 512.8, 694.7, 516.5,
-704.0, 547.8, 700.6, 554.3, 700.6, 554.3, 697.3, 560.8, 694.3, 542.7,
-698.6, 542.0, 699.8, 523.1, 700.3, 515.6, 700.3, 515.6, 700.8, 508.2,
-701.6, 497.2, 701.6, 497.2, 702.3, 486.2, 702.5, 483.1, 702.5, 483.1,
-702.7, 480.0, 702.8, 478.7, 702.8, 478.7, 702.9, 477.3, 703.0, 475.8,
-703.5, 474.5, 703.1, 474.3, 918.1, 484.0, 921.1, 492.4, 921.1, 492.4,
-924.1, 500.9, 926.8, 505.5, 923.1, 507.7, 922.2, 514.6, 921.4, 524.5,
-919.9, 524.4, 917.5, 534.2, 914.2, 509.6, 913.3, 508.2, 918.1, 484.0,
-765.5, 384.9, 812.7, 448.1, 811.2, 449.2, 859.8, 511.3, 863.9, 517.2,
-863.9, 517.2, 868.0, 523.0, 851.2, 505.1, 850.6, 505.7, 833.2, 488.3,
-796.5, 438.8, 810.5, 423.8, 765.5, 384.9, 833.2, 488.3, 792.0, 447.3,
-794.4, 444.7, 750.9, 406.3, 745.1, 399.2, 746.0, 393.0, 739.4, 392.2,
-751.7, 387.5, 751.7, 387.5, 764.0, 382.8, 763.8, 383.1, 764.8, 383.9,
-765.5, 384.9, 810.5, 423.8, 796.5, 438.8, 833.2, 488.3, 789.5, 387.2,
-786.9, 381.2, 788.2, 380.2, 784.2, 375.2, 792.1, 372.2, 792.1, 372.2,
-799.9, 369.3, 800.0, 369.2, 800.1, 369.5, 800.2, 369.8, 794.8, 382.7,
-810.9, 389.5, 821.7, 409.3, 820.1, 403.3, 814.9, 404.7, 808.2, 400.0,
-798.9, 393.6, 797.2, 395.2, 789.5, 387.2, 875.3, 138.2, 890.8, 149.6,
-890.8, 149.6, 906.3, 160.9, 881.0, 157.7, 877.1, 159.7, 853.6, 170.8,
-841.7, 168.3, 840.9, 163.7, 829.8, 165.7, 822.6, 162.9, 818.5, 154.8,
-816.9, 156.1, 832.1, 143.9, 836.9, 149.9, 857.0, 143.8, 866.1, 141.0,
-868.0, 135.7, 875.3, 138.2, 839.8, 173.3, 876.6, 201.0, 876.6, 201.0,
-913.4, 228.8, 918.1, 232.3, 918.0, 232.3, 922.7, 235.8, 881.2, 204.6,
-881.1, 204.8, 839.8, 173.3, 774.9, 157.7, 800.5, 192.0, 799.6, 193.6,
-817.9, 232.4, 812.6, 229.4, 812.6, 229.4, 807.2, 226.4, 799.9, 216.7,
-801.9, 215.2, 796.7, 204.0, 785.8, 180.8, 789.9, 177.8, 774.9, 157.7,
-742.1, 168.4, 748.6, 172.2, 747.3, 174.3, 752.5, 180.3, 759.9, 188.8,
-758.0, 193.0, 767.4, 197.3, 728.8, 172.1, 729.3, 154.2, 687.8, 150.7,
-686.9, 150.1, 686.9, 150.1, 686.0, 149.5, 683.8, 133.2, 668.7, 135.3,
-651.4, 121.1, 699.3, 137.2, 698.0, 142.6, 742.1, 168.4, 799.3, 321.8,
-790.6, 327.8, 789.5, 326.7, 782.0, 333.8, 782.8, 333.4, 782.3, 332.4,
-782.6, 330.9, 783.7, 325.5, 781.7, 321.8, 784.9, 320.1, 790.0, 317.2,
-799.1, 322.4, 799.3, 321.8, 664.3, 139.4, 661.1, 135.9, 661.1, 135.9,
-657.9, 132.4, 704.8, 164.9, 705.4, 164.1, 752.8, 195.8, 716.3, 163.2,
-711.0, 169.1, 669.2, 142.5, 666.8, 140.9, 666.5, 141.3, 664.3, 139.4,
-658.2, 159.9, 633.0, 146.5, 634.7, 139.2, 607.9, 133.0, 589.3, 120.3,
-589.3, 120.3, 570.7, 107.6, 572.4, 108.8, 572.5, 108.7, 574.2, 109.7,
-593.2, 121.1, 593.2, 121.1, 612.2, 132.4, 635.2, 146.2, 637.3, 162.6,
-658.2, 159.9, 549.5, 216.0, 560.1, 230.0, 560.1, 230.0, 570.7, 244.0,
-552.7, 230.3, 534.4, 238.6, 529.6, 223.2, 494.1, 200.7, 491.9, 204.2,
-454.2, 185.1, 453.2, 181.7, 451.3, 182.2, 448.4, 179.4, 466.8, 183.8,
-466.3, 185.9, 484.2, 192.4, 511.4, 202.2, 511.4, 202.2, 538.5, 212.0,
-544.0, 214.0, 545.7, 212.3, 549.5, 216.0, 468.4, 248.2, 463.1, 244.0,
-464.6, 242.2, 460.7, 236.1, 452.5, 223.3, 456.0, 216.4, 444.3, 210.5,
-492.1, 245.1, 492.6, 244.5, 541.6, 277.4, 542.2, 278.2, 542.2, 278.3,
-542.8, 279.0, 536.5, 273.8, 530.8, 280.7, 518.8, 282.5, 491.3, 271.0,
-492.2, 267.1, 468.4, 248.2, 518.8, 282.5, 510.0, 283.7, 505.9, 288.8,
-501.2, 285.0, 500.2, 284.4, 500.2, 284.4, 499.3, 283.8, 493.2, 279.7,
-493.1, 279.8, 486.8, 275.9, 486.2, 275.5, 486.0, 275.6, 485.7, 275.1,
-482.9, 270.8, 481.8, 271.2, 480.2, 266.5, 477.7, 262.6, 477.7, 262.6,
-475.1, 258.7, 471.8, 253.4, 473.2, 250.8, 468.4, 248.2, 492.2, 267.1,
-491.3, 271.0, 518.8, 282.5, 504.3, 4.5, 516.9, -11.6, 519.7, -10.1,
-529.4, -27.8, 529.8, -26.1, 529.7, -26.0, 530.3, -24.4, 538.8, -5.6,
-535.7, -4.2, 541.1, 16.0, 525.8, 22.1, 528.8, 29.4, 516.5, 42.7,
-516.9, 42.3, 516.0, 41.4, 515.6, 40.0, 510.5, 23.9, 510.5, 23.9,
-505.4, 7.7, 504.9, 6.1, 503.8, 5.4, 504.3, 4.5, 639.5, 8.4,
-639.7, 16.2, 642.7, 22.6, 639.9, 23.9, 624.1, 37.2, 624.1, 37.2,
-608.4, 50.5, 611.7, 42.7, 600.9, 38.2, 593.4, 25.8, 593.3, 25.3,
-597.4, 24.3, 601.4, 22.8, 610.8, 19.2, 610.8, 19.2, 620.2, 15.7,
-624.8, 14.0, 624.8, 14.0, 629.3, 12.3, 634.4, 10.4, 638.2, 7.0,
-639.5, 8.4, 453.5, 65.5, 447.0, 74.6, 447.0, 74.6, 440.4, 83.6,
-441.1, 80.3, 436.2, 74.9, 433.3, 75.3, 432.4, 75.9, 429.1, 70.4,
-424.9, 65.5, 436.5, 59.9, 447.5, 58.4, 453.5, 65.5, 450.5, -16.5,
-432.0, -18.4, 432.0, -18.4, 413.6, -20.3, 437.4, -27.6, 437.7, -27.9,
-460.0, -39.1, 474.0, -43.4, 474.0, -43.4, 488.0, -47.7, 479.7, -27.7,
-472.1, -24.4, 450.5, -16.5, 265.1, 182.1, 248.9, 202.2, 226.0, 217.1,
-225.3, 216.3, 232.4, 185.6, 232.4, 185.6, 239.6, 154.9, 239.5, 155.4,
-240.3, 155.6, 240.9, 156.3, 249.7, 165.6, 249.7, 165.6, 258.5, 175.0,
-261.8, 178.5, 265.5, 181.5, 265.1, 182.1, 286.3, 163.8, 287.4, 159.2,
-290.1, 157.2, 295.2, 156.1, 293.8, 156.4, 295.6, 160.6, 293.7, 162.2,
-291.1, 164.4, 286.7, 162.2, 286.3, 163.8, 319.8, 249.5, 302.8, 221.9,
-306.2, 219.1, 285.8, 194.3, 281.7, 180.7, 289.7, 178.2, 293.7, 162.2,
-295.6, 160.6, 293.8, 156.4, 295.2, 156.1, 298.4, 143.3, 298.4, 143.3,
-301.6, 130.4, 301.6, 130.4, 301.5, 130.3, 301.5, 130.3, 301.5, 130.3,
-301.6, 130.4, 301.6, 130.4, 310.7, 190.0, 333.2, 195.5, 319.8, 249.5,
-301.6, 130.4, 302.9, 144.6, 306.2, 144.2, 310.9, 158.1, 320.4, 186.5,
-320.4, 186.5, 329.9, 214.9, 331.8, 220.7, 331.8, 220.7, 333.8, 226.6,
-330.2, 231.4, 334.1, 239.5, 340.6, 246.9, 340.9, 248.6, 339.1, 248.9,
-337.6, 250.9, 332.9, 257.1, 332.4, 263.6, 328.2, 263.3, 328.9, 256.9,
-324.0, 256.4, 319.8, 249.5, 333.2, 195.5, 310.7, 190.0, 301.6, 130.4,
-356.7, 139.2, 350.2, 134.3, 353.0, 126.2, 355.1, 114.2, 357.3, 116.0,
-360.6, 115.1, 360.7, 116.3, 381.1, 132.7, 381.1, 132.7, 401.4, 149.1,
-401.6, 148.1, 373.4, 151.7, 356.7, 139.2, 299.7, 125.0, 289.1, 108.1,
-282.8, 103.1, 286.7, 86.0, 287.4, 82.9, 297.8, 85.2, 308.9, 84.4,
-315.9, 83.9, 321.9, 81.1, 323.0, 83.4, 325.0, 87.7, 319.0, 90.5,
-315.0, 97.6, 310.1, 106.4, 310.1, 106.4, 305.2, 115.3, 302.5, 120.1,
-298.3, 122.7, 299.7, 125.0, 181.3, 386.7, 181.8, 382.9, 181.0, 382.6,
-182.4, 379.0, 186.4, 367.7, 186.4, 367.7, 190.4, 356.3, 188.2, 371.8,
-186.6, 371.8, 181.3, 386.7, 224.3, 170.6, 229.8, 160.6, 230.0, 160.7,
-235.3, 150.5, 231.1, 165.6, 231.1, 165.6, 226.9, 180.6, 227.0, 180.2,
-226.8, 180.1, 226.7, 179.6, 225.5, 175.1, 223.2, 174.4, 224.3, 170.6,
-155.7, 301.6, 156.2, 298.9, 155.4, 298.3, 156.8, 296.1, 157.4, 294.9,
-157.1, 294.1, 158.1, 293.8, 165.8, 287.7, 163.1, 284.1, 168.1, 274.5,
-182.5, 266.1, 189.3, 262.0, 202.7, 267.7, 200.1, 277.3, 200.1, 277.3,
-197.4, 286.9, 194.8, 290.7, 192.0, 288.8, 186.7, 290.7, 179.3, 293.3,
-179.3, 293.3, 172.0, 295.9, 171.2, 296.2, 171.2, 296.2, 170.5, 296.4,
-164.9, 298.4, 164.9, 298.4, 159.2, 300.4, 157.5, 301.0, 155.8, 301.9,
-155.7, 301.6, 474.7, 878.3, 473.3, 859.1, 473.3, 859.1, 471.9, 840.0,
-469.7, 766.4, 467.8, 766.4, 463.6, 692.9, 463.5, 690.2, 463.4, 690.2,
-463.3, 687.6, 463.4, 690.2, 463.5, 690.2, 463.6, 692.9, 467.8, 766.4,
-469.7, 766.4, 471.9, 840.0, 473.3, 859.1, 473.3, 859.1, 474.7, 878.3,
-703.6, 773.3, 704.1, 772.7, 704.0, 772.6, 704.6, 772.1, 738.0, 746.6,
-739.2, 747.8, 770.2, 719.5, 770.4, 719.9, 770.8, 720.0, 770.7, 720.3,
-771.7, 726.6, 776.6, 732.6, 778.2, 732.1, 769.4, 744.7, 763.0, 739.6,
-750.0, 750.0, 696.0, 793.3, 704.4, 809.3, 644.3, 839.4, 681.2, 820.9,
-673.9, 806.3, 703.6, 773.3, 644.3, 839.4, 633.2, 850.9, 632.6, 850.6,
-619.8, 860.2, 624.5, 856.6, 623.9, 855.9, 628.1, 851.5, 661.0, 817.4,
-661.0, 817.4, 693.8, 783.4, 698.7, 778.3, 698.9, 778.5, 703.6, 773.3,
-673.9, 806.3, 681.2, 820.9, 644.3, 839.4, 518.2, 760.4, 508.7, 820.8,
-505.3, 820.4, 499.2, 881.1, 499.0, 882.0, 494.5, 882.9, 492.0, 881.3,
-490.7, 880.5, 491.8, 878.8, 491.6, 876.2, 490.2, 868.5, 490.8, 868.4,
-490.1, 860.6, 493.4, 859.1, 491.7, 854.3, 491.9, 847.9, 495.9, 826.7,
-495.0, 826.5, 498.0, 805.1, 499.1, 794.7, 500.0, 794.8, 501.9, 784.4,
-507.8, 771.4, 517.9, 772.6, 518.2, 760.4, 501.9, 784.4, 516.1, 671.5,
-522.3, 672.2, 543.4, 560.1, 544.6, 555.9, 545.0, 555.9, 545.8, 551.6,
-546.7, 548.5, 546.1, 548.2, 547.5, 545.3, 546.7, 546.9, 547.3, 547.2,
-547.1, 549.0, 545.2, 564.5, 545.2, 564.5, 543.2, 580.0, 542.6, 585.6,
-542.6, 585.6, 541.9, 591.3, 540.1, 605.1, 540.1, 605.1, 538.4, 619.0,
-537.3, 627.8, 537.3, 627.8, 536.3, 636.7, 533.8, 656.3, 533.8, 656.3,
-531.4, 675.9, 531.1, 678.3, 531.2, 678.3, 530.8, 680.6, 524.2, 720.5,
-524.5, 720.5, 518.2, 760.4, 517.9, 772.6, 507.8, 771.4, 501.9, 784.4,
-563.3, 396.4, 568.0, 403.6, 568.0, 403.6, 572.6, 410.9, 553.8, 421.7,
-555.1, 426.2, 541.9, 444.6, 541.1, 445.4, 540.4, 444.8, 539.0, 445.1,
-528.2, 446.9, 528.2, 446.9, 517.4, 448.8, 509.5, 450.2, 501.5, 451.9,
-501.5, 451.5, 510.3, 443.7, 507.4, 440.4, 513.3, 429.3, 535.4, 409.6,
-535.8, 404.9, 563.3, 396.4, 513.3, 429.3, 529.4, 398.9, 533.3, 400.4,
-545.5, 368.5, 554.4, 382.5, 554.4, 382.5, 563.3, 396.4, 535.8, 404.9,
-535.4, 409.6, 513.3, 429.3, 526.6, 620.2, 524.2, 628.7, 523.2, 628.6,
-521.8, 637.3, 537.8, 673.8, 501.4, 685.9, 494.2, 736.4, 480.5, 747.8,
-485.1, 756.8, 482.5, 778.1, 482.3, 775.1, 482.3, 775.1, 482.0, 772.1,
-492.0, 746.3, 486.7, 742.4, 484.0, 713.4, 490.1, 684.0, 495.0, 685.1,
-506.0, 656.7, 507.2, 653.4, 506.8, 653.2, 508.5, 650.2, 517.1, 634.9,
-514.4, 631.9, 526.6, 620.2, 508.5, 650.2, 506.3, 648.9, 514.9, 633.7,
-521.3, 617.1, 524.2, 609.7, 524.2, 609.7, 527.1, 602.3, 535.2, 581.2,
-542.9, 581.4, 543.4, 560.1, 535.0, 590.1, 535.0, 590.1, 526.6, 620.2,
-514.4, 631.9, 517.1, 634.9, 508.5, 650.2, 451.2, 311.6, 452.2, 312.4,
-450.9, 313.9, 450.6, 316.3, 448.7, 330.7, 449.8, 331.0, 446.9, 345.2,
-447.5, 347.8, 443.8, 348.2, 443.4, 351.4, 441.3, 329.1, 441.3, 329.1,
-439.3, 306.7, 439.0, 307.9, 446.5, 307.6, 451.2, 311.6, 490.6, 289.4,
-495.4, 300.0, 492.2, 303.8, 500.3, 310.6, 501.6, 337.8, 501.6, 337.8,
-503.0, 365.1, 487.6, 331.4, 492.5, 327.4, 490.6, 289.4, 453.6, 292.6,
-451.1, 287.9, 456.2, 280.0, 455.2, 279.7, 461.1, 281.5, 459.3, 287.6,
-463.5, 295.5, 465.0, 298.4, 464.4, 300.7, 466.5, 301.3, 459.4, 299.2,
-456.8, 298.7, 453.6, 292.6, 184.0, 643.8, 178.9, 658.2, 177.4, 657.8,
-173.9, 672.6, 169.9, 643.5, 169.9, 643.5, 165.9, 614.5, 163.2, 624.8,
-174.0, 627.6, 182.2, 640.8, 183.1, 642.3, 184.3, 642.6, 184.0, 643.8,
-218.5, 420.3, 228.1, 405.3, 229.6, 406.0, 237.7, 390.2, 232.9, 392.7,
-238.0, 401.0, 236.2, 411.3, 228.3, 439.8, 230.0, 440.3, 223.8, 469.2,
-233.1, 461.9, 221.4, 447.0, 219.0, 424.9, 218.8, 422.6, 217.7, 422.0,
-218.5, 420.3, 421.1, 484.6, 422.3, 473.1, 423.9, 473.2, 426.6, 461.9,
-427.4, 458.4, 428.0, 458.4, 428.3, 454.9, 425.3, 497.4, 424.7, 497.4,
-421.2, 539.9, 420.9, 543.2, 420.6, 543.2, 420.6, 546.5, 420.4, 532.8,
-420.7, 532.8, 420.8, 519.2, 421.0, 501.9, 419.4, 501.7, 421.1, 484.6,
-422.5, 225.0, 423.6, 234.8, 423.4, 234.8, 424.7, 244.6, 424.1, 275.2,
-419.6, 275.8, 423.4, 305.9, 420.5, 301.6, 420.5, 301.6, 417.5, 297.2,
-417.2, 261.1, 417.7, 260.8, 422.5, 225.0, 355.0, 647.4, 355.7, 641.6,
-358.4, 641.9, 358.8, 636.1, 356.5, 665.5, 360.6, 667.3, 351.3, 694.7,
-358.7, 672.9, 352.0, 670.9, 355.0, 647.4, 376.3, 669.4, 377.1, 669.7,
-372.0, 686.8, 367.8, 704.1, 366.7, 708.8, 366.7, 708.8, 365.5, 713.5,
-365.5, 713.7, 365.5, 713.7, 365.4, 714.0, 358.3, 730.5, 361.1, 731.7,
-356.8, 749.4, 343.4, 802.1, 343.4, 802.1, 330.6, 854.9, 337.9, 833.6,
-333.6, 832.1, 336.5, 809.4, 337.2, 803.9, 337.2, 803.9, 337.9, 798.5,
-338.4, 794.6, 338.4, 794.6, 338.9, 790.7, 339.9, 783.2, 339.9, 783.2,
-340.8, 775.8, 345.8, 737.4, 338.7, 735.0, 350.7, 699.0, 356.4, 681.9,
-368.6, 667.1, 376.3, 669.4, 292.5, 405.8, 296.0, 393.7, 296.0, 393.7,
-299.6, 381.6, 301.7, 380.5, 305.9, 388.8, 312.2, 396.0, 311.5, 396.8,
-317.7, 409.2, 324.0, 409.5, 326.5, 412.4, 326.5, 412.4, 329.1, 415.3,
-332.3, 419.0, 331.6, 421.7, 335.5, 422.7, 313.3, 417.0, 306.0, 421.3,
-292.5, 405.8, 302.4, 371.7, 309.5, 347.3, 311.6, 347.8, 316.6, 322.9,
-320.3, 313.4, 317.5, 312.0, 322.4, 303.2, 327.4, 285.8, 327.4, 285.8,
-332.5, 268.4, 332.7, 267.9, 333.0, 267.6, 332.8, 267.4, 338.5, 275.2,
-344.3, 276.1, 343.5, 283.5, 341.6, 301.3, 335.5, 300.7, 327.5, 317.9,
-326.6, 319.9, 326.6, 319.9, 325.6, 322.0, 319.1, 335.8, 319.1, 335.8,
-312.7, 349.7, 310.3, 354.7, 310.3, 354.7, 308.0, 359.7, 305.2, 365.7,
-303.9, 365.4, 302.4, 371.7, 420.4, 487.6, 421.6, 491.2, 419.3, 491.9,
-418.3, 496.3, 418.2, 496.3, 418.2, 496.3, 418.2, 496.4, 416.2, 504.6,
-411.6, 510.8, 414.3, 512.8, 385.3, 491.1, 389.9, 484.9, 365.6, 457.1,
-362.0, 453.0, 362.0, 453.0, 358.5, 448.9, 350.7, 440.1, 352.6, 437.1,
-343.0, 431.2, 380.2, 454.0, 378.3, 457.0, 413.7, 482.7, 417.0, 485.2,
-419.3, 484.4, 420.4, 487.6, 303.1, 319.5, 315.6, 292.9, 311.4, 286.3,
-332.5, 268.4, 327.4, 285.8, 327.4, 285.8, 322.4, 303.2, 313.8, 318.9,
-315.6, 319.9, 309.1, 336.7, 294.0, 364.3, 294.0, 364.3, 278.9, 391.8,
-271.4, 406.4, 270.2, 405.8, 261.6, 419.8, 278.8, 368.5, 280.1, 368.6,
-303.1, 319.5, 261.6, 419.8, 246.9, 443.6, 244.9, 442.6, 232.2, 467.3,
-233.2, 453.4, 233.2, 453.4, 234.2, 439.5, 264.1, 377.3, 252.0, 356.3,
-303.1, 319.5, 280.1, 368.6, 278.8, 368.5, 261.6, 419.8, 234.9, 429.5,
-235.6, 420.4, 233.8, 419.9, 236.2, 411.3, 238.0, 401.0, 232.9, 392.7,
-237.7, 390.2, 239.4, 387.0, 236.2, 383.7, 238.3, 382.2, 258.8, 351.6,
-260.3, 352.6, 282.5, 323.1, 284.3, 320.9, 284.3, 320.9, 286.0, 318.8,
-288.1, 316.1, 288.2, 316.2, 290.3, 313.5, 294.6, 307.8, 294.6, 307.8,
-298.9, 302.1, 305.5, 301.5, 304.9, 294.2, 310.9, 286.3, 274.5, 358.7,
-276.4, 360.0, 234.9, 429.5, 310.9, 286.3, 313.8, 282.4, 317.4, 281.6,
-316.7, 278.6, 317.3, 278.9, 327.4, 271.4, 328.2, 263.3, 332.4, 263.6,
-332.9, 257.1, 337.6, 250.9, 340.4, 253.4, 335.2, 259.1, 332.8, 267.4,
-333.0, 267.6, 332.7, 267.9, 332.5, 268.4, 311.4, 286.3, 315.6, 292.9,
-303.1, 319.5, 252.0, 356.3, 264.1, 377.3, 234.2, 439.5, 234.5, 434.5,
-234.5, 434.5, 234.9, 429.5, 276.4, 360.0, 274.5, 358.7, 310.9, 286.3,
-240.7, 582.4, 236.3, 598.2, 231.9, 614.0, 231.9, 614.0, 226.4, 633.0,
-226.3, 633.0, 220.8, 652.1, 219.4, 656.7, 217.9, 656.8, 218.1, 661.3,
-219.1, 648.1, 219.1, 648.1, 220.0, 634.9, 225.6, 614.0, 228.0, 614.6,
-236.0, 594.4, 238.4, 588.4, 239.4, 588.6, 240.7, 582.4, 169.5, 791.9,
-171.5, 807.5, 171.5, 807.5, 173.4, 823.0, 161.9, 809.6, 161.8, 809.6,
-150.3, 796.2, 150.1, 795.3, 166.5, 788.4, 169.5, 791.9, 150.3, 796.2,
-147.5, 793.0, 143.9, 791.3, 144.7, 789.8, 149.8, 732.8, 150.4, 732.9,
-155.0, 675.9, 157.9, 699.5, 152.3, 701.7, 160.9, 723.1, 162.3, 757.6,
-165.2, 757.5, 169.5, 791.9, 166.5, 788.4, 150.1, 795.3, 150.3, 796.2,
-76.7, 162.3, 81.1, 168.4, 84.6, 167.9, 85.5, 174.4, 87.9, 181.5,
-87.9, 181.5, 90.3, 188.5, 100.0, 235.0, 100.4, 234.9, 110.6, 281.3,
-108.8, 272.7, 108.2, 272.8, 105.7, 264.3, 104.5, 259.8, 104.5, 259.8,
-103.2, 255.3, 89.9, 208.8, 87.0, 209.4, 76.7, 162.3, 50.5, 72.6,
-53.0, 79.9, 51.3, 86.0, 55.5, 87.2, 55.6, 87.2, 55.7, 87.7,
-55.9, 88.2, 56.8, 120.2, 51.9, 122.6, 62.1, 152.1, 62.5, 168.3,
-62.5, 168.3, 63.0, 184.6, 66.0, 173.1, 61.6, 171.9, 60.2, 159.3,
-55.4, 116.0, 53.3, 116.1, 50.5, 72.6, 817.0, 605.3, 806.9, 609.0,
-806.7, 608.6, 796.8, 612.7, 797.2, 611.1, 797.4, 609.5, 797.6, 609.5,
-804.0, 598.2, 804.0, 596.3, 804.0, 583.1, 801.5, 574.7, 806.4, 573.2,
-808.8, 563.4, 819.0, 580.8, 821.5, 586.4, 817.0, 605.3, 808.8, 563.4,
-810.7, 555.2, 810.7, 555.2, 812.7, 547.1, 812.6, 547.5, 813.3, 547.6,
-813.9, 548.1, 833.9, 567.9, 834.2, 567.7, 855.2, 586.5, 855.4, 586.6,
-855.4, 586.6, 855.5, 586.8, 853.9, 586.4, 853.0, 589.9, 850.6, 593.0,
-848.1, 589.4, 833.8, 599.1, 817.0, 605.3, 821.5, 586.4, 819.0, 580.8,
-808.8, 563.4, 911.8, 470.4, 913.5, 473.3, 915.9, 473.9, 915.3, 476.2,
-916.7, 480.1, 916.7, 480.1, 918.1, 484.0, 913.3, 508.2, 914.2, 509.6,
-917.5, 534.2, 916.9, 536.7, 916.9, 536.7, 916.3, 539.2, 913.2, 504.9,
-912.4, 504.8, 911.8, 470.4, 916.3, 539.2, 913.4, 551.5, 912.9, 551.4,
-910.5, 563.7, 910.4, 563.6, 910.4, 563.6, 910.3, 563.5, 905.8, 531.9,
-910.5, 526.3, 893.0, 501.6, 891.1, 488.4, 894.8, 486.7, 889.2, 475.3,
-895.7, 464.8, 895.7, 464.8, 902.2, 454.4, 904.7, 463.1, 907.0, 462.4,
-911.8, 470.4, 912.4, 504.8, 913.2, 504.9, 916.3, 539.2, 849.5, 494.8,
-848.1, 492.9, 848.1, 492.9, 846.8, 490.9, 842.0, 484.2, 842.8, 483.6,
-838.7, 476.3, 844.7, 485.2, 844.3, 485.5, 849.5, 494.8, 738.7, 69.9,
-753.9, 66.6, 761.8, 72.8, 769.2, 63.4, 788.7, 68.7, 786.9, 75.6,
-804.5, 87.9, 830.4, 107.5, 831.0, 106.7, 857.5, 125.5, 854.9, 123.5,
-854.5, 124.1, 851.4, 122.6, 813.2, 104.8, 813.2, 104.8, 775.0, 86.9,
-756.8, 78.4, 741.7, 82.2, 738.7, 69.9, 760.7, 133.2, 746.8, 120.3,
-752.8, 100.3, 740.9, 98.7, 768.4, 102.3, 766.4, 118.0, 791.8, 137.2,
-792.9, 137.9, 792.8, 138.7, 793.9, 138.7, 788.0, 138.5, 788.0, 137.7,
-782.2, 136.8, 771.4, 135.0, 767.4, 139.3, 760.7, 133.2, 684.7, 102.6,
-683.4, 102.7, 682.1, 99.2, 681.9, 99.4, 684.6, 101.2, 685.9, 99.3,
-689.9, 99.1, 689.7, 98.8, 687.4, 102.5, 684.7, 102.6, 705.7, 126.7,
-727.5, 138.7, 723.1, 146.6, 740.5, 166.5, 741.3, 167.5, 741.1, 167.9,
-742.1, 168.4, 698.0, 142.6, 699.3, 137.2, 651.4, 121.1, 644.5, 115.4,
-644.5, 115.4, 637.5, 109.8, 672.1, 113.3, 676.0, 110.3, 705.7, 126.7,
-637.5, 109.8, 628.7, 102.5, 629.9, 99.9, 619.9, 95.3, 621.5, 95.0,
-622.0, 94.0, 623.1, 94.6, 646.1, 94.6, 646.1, 89.7, 669.1, 84.8,
-674.0, 93.0, 674.2, 94.0, 681.9, 99.4, 682.1, 99.2, 683.4, 102.7,
-684.7, 102.6, 692.8, 111.8, 692.8, 111.8, 700.8, 121.1, 703.3, 123.9,
-702.9, 126.2, 705.7, 126.7, 676.0, 110.3, 672.1, 113.3, 637.5, 109.8,
-629.3, 214.7, 629.4, 214.6, 627.9, 213.2, 626.6, 211.7, 620.0, 204.5,
-620.0, 204.5, 613.4, 197.3, 608.6, 192.1, 608.6, 192.1, 603.8, 186.8,
-591.9, 173.9, 591.5, 174.3, 580.1, 161.0, 579.1, 158.9, 579.1, 158.9,
-578.0, 156.8, 578.1, 157.0, 578.3, 156.9, 578.7, 157.1, 580.9, 157.7,
-580.9, 157.7, 583.1, 158.4, 618.0, 168.9, 623.6, 160.4, 653.0, 179.5,
-652.8, 179.4, 647.2, 188.0, 641.5, 196.5, 635.4, 205.6, 636.9, 207.0,
-629.3, 214.7, 689.0, 182.7, 706.2, 191.7, 706.2, 191.7, 723.5, 200.8,
-715.9, 194.0, 712.7, 197.5, 701.9, 194.3, 698.4, 193.2, 697.4, 194.4,
-695.0, 192.2, 691.0, 188.6, 693.0, 183.9, 689.0, 182.7, 626.8, 212.0,
-626.7, 211.8, 626.7, 211.8, 626.6, 211.7, 627.9, 213.2, 629.4, 214.6,
-629.3, 214.7, 633.7, 219.4, 633.7, 219.4, 638.0, 224.2, 638.4, 224.6,
-638.4, 224.6, 638.7, 224.9, 645.6, 232.5, 645.6, 232.5, 652.5, 240.0,
-665.2, 253.8, 665.2, 253.8, 677.8, 267.5, 681.5, 271.6, 681.5, 271.6,
-685.2, 275.6, 685.8, 276.2, 685.8, 276.2, 686.3, 276.8, 688.5, 279.2,
-688.5, 279.2, 690.7, 281.6, 697.1, 288.6, 697.1, 288.6, 703.6, 295.6,
-710.4, 303.0, 710.4, 303.0, 717.1, 310.4, 720.6, 314.2, 720.6, 314.2,
-724.0, 317.9, 730.1, 324.6, 736.2, 331.2, 736.2, 331.2, 736.2, 331.2,
-730.1, 324.6, 724.0, 317.9, 720.6, 314.2, 720.6, 314.2, 717.1, 310.4,
-710.4, 303.0, 710.4, 303.0, 703.6, 295.6, 697.1, 288.6, 697.1, 288.6,
-690.7, 281.6, 688.5, 279.2, 688.5, 279.2, 686.3, 276.8, 685.8, 276.2,
-685.8, 276.2, 685.2, 275.6, 681.5, 271.6, 681.5, 271.6, 677.8, 267.5,
-665.2, 253.8, 665.2, 253.8, 652.5, 240.0, 645.6, 232.5, 645.6, 232.5,
-638.7, 224.9, 638.4, 224.6, 638.4, 224.6, 638.0, 224.2, 633.7, 219.4,
-633.7, 219.4, 629.3, 214.7, 628.1, 213.3, 628.0, 213.3, 626.8, 212.0,
-626.8, 212.0, 626.8, 212.0, 626.8, 212.0, 645.8, 239.4, 690.1, 300.2,
-690.2, 300.2, 731.8, 362.9, 730.3, 363.7, 730.3, 363.7, 728.7, 364.4,
-716.2, 348.6, 717.6, 347.6, 706.4, 330.7, 696.0, 315.0, 696.0, 315.0,
-685.6, 299.3, 665.7, 269.4, 667.0, 268.4, 645.8, 239.4, 792.6, 283.1,
-791.4, 277.9, 793.4, 271.7, 795.1, 271.6, 826.3, 282.4, 829.0, 274.6,
-862.9, 277.6, 833.0, 295.4, 834.2, 297.5, 805.6, 317.4, 800.5, 317.8,
-796.7, 300.8, 792.6, 283.1, 805.6, 317.4, 802.4, 319.6, 802.4, 319.6,
-799.3, 321.8, 799.1, 322.4, 790.0, 317.2, 784.9, 320.1, 784.8, 320.1,
-785.1, 318.9, 785.4, 317.7, 789.0, 300.4, 788.8, 283.1, 792.6, 283.1,
-796.7, 300.8, 800.5, 317.8, 805.6, 317.4, 669.2, 142.5, 711.0, 169.1,
-716.3, 163.2, 752.8, 195.8, 757.6, 199.0, 757.6, 199.0, 762.5, 202.3,
-715.8, 172.5, 715.3, 173.2, 669.2, 142.5, 656.5, 133.7, 662.4, 138.7,
-662.0, 139.2, 668.3, 143.7, 682.3, 157.8, 681.8, 158.3, 695.4, 173.0,
-701.6, 179.8, 707.8, 186.6, 707.8, 186.5, 699.6, 181.4, 699.2, 181.9,
-690.7, 177.3, 677.9, 165.3, 679.7, 163.4, 668.8, 149.5, 662.6, 141.6,
-657.2, 142.1, 656.5, 133.7, 484.2, 192.4, 466.3, 185.9, 466.8, 183.8,
-448.4, 179.4, 434.4, 165.4, 434.4, 165.4, 420.4, 151.4, 423.0, 154.3,
-423.8, 153.6, 427.2, 155.8, 427.8, 156.2, 427.8, 156.2, 428.4, 156.5,
-441.0, 164.6, 441.0, 164.6, 453.6, 172.7, 468.9, 182.5, 483.2, 193.7,
-484.2, 192.4, 511.2, 117.2, 506.6, 118.9, 503.0, 121.8, 502.0, 120.5,
-497.6, 121.5, 496.6, 123.8, 493.2, 122.4, 479.7, 123.8, 478.5, 122.4,
-466.5, 128.1, 465.7, 128.2, 465.1, 128.8, 464.8, 128.5, 464.3, 128.6,
-464.0, 128.4, 463.7, 128.7, 497.3, 92.4, 497.5, 92.6, 531.3, 56.5,
-537.7, 49.7, 541.4, 50.9, 544.1, 42.8, 531.4, 81.3, 530.5, 81.6,
-511.2, 117.2, 544.1, 42.8, 544.3, 42.4, 544.9, 42.3, 544.8, 42.1,
-553.0, 66.6, 561.8, 66.9, 561.1, 91.2, 561.9, 94.1, 561.8, 97.0,
-562.7, 97.1, 560.1, 98.9, 560.1, 98.9, 557.4, 100.7, 533.6, 105.7,
-534.3, 109.0, 511.2, 117.2, 530.5, 81.6, 531.4, 81.3, 544.1, 42.8,
-436.8, 132.4, 435.4, 132.4, 435.4, 132.4, 434.0, 132.5, 436.4, 132.0,
-436.1, 130.2, 438.1, 128.0, 490.4, 81.3, 490.1, 80.9, 542.1, 33.9,
-542.0, 37.9, 543.5, 38.0, 544.8, 42.1, 544.9, 42.3, 544.3, 42.4,
-544.1, 42.8, 541.4, 50.9, 537.7, 49.7, 531.3, 56.5, 484.8, 95.3,
-484.6, 95.1, 436.8, 132.4, 531.3, 56.5, 497.5, 92.6, 497.3, 92.4,
-463.7, 128.7, 458.1, 133.7, 455.3, 131.1, 446.7, 132.3, 442.2, 133.8,
-441.7, 132.4, 436.8, 132.4, 484.6, 95.1, 484.8, 95.3, 531.3, 56.5,
-612.3, -75.3, 626.2, -73.9, 633.4, -66.3, 638.1, -51.9, 627.0, -46.6,
-638.8, -21.7, 639.5, 8.4, 638.2, 7.0, 634.4, 10.4, 629.3, 12.3,
-619.7, -9.4, 624.7, -11.6, 620.1, -35.4, 618.2, -44.7, 618.2, -44.7,
-616.4, -54.1, 614.4, -64.7, 615.4, -75.0, 612.3, -75.3, 403.8, 35.1,
-396.6, 24.7, 396.6, 24.7, 389.3, 14.2, 396.6, 18.3, 405.6, 9.6,
-408.7, 14.0, 435.3, 29.2, 443.6, 22.3, 462.0, 44.4, 462.7, 45.0,
-462.7, 45.0, 463.4, 45.6, 433.6, 40.8, 431.0, 46.6, 403.8, 35.1,
-463.4, 45.6, 464.5, 46.4, 464.7, 46.3, 465.6, 47.3, 465.9, 47.6,
-466.2, 47.8, 466.1, 47.9, 459.8, 56.7, 459.8, 56.7, 453.5, 65.5,
-447.5, 58.4, 436.5, 59.9, 424.9, 65.5, 424.7, 65.3, 424.7, 65.3,
-424.5, 65.0, 414.5, 49.8, 414.2, 50.1, 403.8, 35.1, 431.0, 46.6,
-433.6, 40.8, 463.4, 45.6, 509.8, -12.8, 509.0, -11.6, 509.0, -11.6,
-508.1, -10.5, 507.9, -10.1, 506.9, -11.0, 506.1, -10.7, 498.8, -2.9,
-488.5, -14.8, 471.0, -14.3, 461.5, -12.2, 460.8, -15.4, 450.5, -16.5,
-472.1, -24.4, 479.7, -27.7, 488.0, -47.7, 493.8, -49.4, 493.8, -49.4,
-499.5, -51.2, 509.6, -35.0, 505.7, -32.2, 509.8, -12.8, 499.5, -51.2,
-523.8, -58.5, 523.9, -58.0, 548.0, -65.9, 546.5, -63.9, 544.5, -62.9,
-545.1, -61.8, 545.4, -61.3, 542.5, -60.0, 542.7, -58.6, 543.8, -57.6,
-527.3, -47.3, 528.8, -39.2, 528.8, -39.2, 526.9, -37.9, 527.0, -36.7,
-515.8, -28.1, 518.4, -24.7, 509.8, -12.8, 505.7, -32.2, 509.6, -35.0,
-499.5, -51.2, 284.2, 78.5, 283.5, 81.8, 285.4, 82.2, 286.7, 86.0,
-282.8, 103.1, 289.1, 108.1, 299.7, 125.0, 300.6, 127.6, 301.9, 127.8,
-301.5, 130.3, 299.6, 143.4, 300.6, 144.3, 295.2, 156.1, 290.1, 157.2,
-287.4, 159.2, 286.3, 163.8, 280.3, 169.0, 280.3, 169.0, 274.3, 174.1,
-271.1, 176.8, 268.3, 176.5, 268.0, 179.5, 273.3, 128.7, 274.2, 128.6,
-284.2, 78.5, 373.3, 203.2, 370.5, 207.2, 370.8, 207.5, 367.6, 211.2,
-364.7, 215.0, 364.7, 215.0, 361.9, 218.8, 356.5, 189.2, 344.2, 177.1,
-358.0, 158.3, 349.9, 169.3, 369.1, 180.1, 373.3, 203.2, 358.0, 158.3,
-356.2, 151.9, 357.5, 151.5, 357.1, 144.7, 356.9, 141.9, 357.2, 139.2,
-356.7, 139.2, 373.4, 151.7, 401.6, 148.1, 401.4, 149.1, 404.7, 151.7,
-404.6, 151.9, 407.9, 154.3, 390.6, 178.7, 390.6, 178.7, 373.3, 203.2,
-369.1, 180.1, 349.9, 169.3, 358.0, 158.3, 308.9, 84.4, 297.8, 85.2,
-287.4, 82.9, 286.7, 86.0, 285.4, 82.2, 283.5, 81.8, 284.2, 78.5,
-283.8, 77.5, 283.8, 77.5, 283.5, 76.5, 282.6, 68.5, 280.9, 68.7,
-278.3, 61.0, 282.4, 55.0, 292.3, 52.8, 297.3, 56.6, 307.6, 64.5,
-312.6, 74.0, 308.9, 84.4, 297.3, 56.6, 297.3, 55.1, 303.3, 55.2,
-309.4, 53.8, 320.2, 51.3, 320.2, 51.3, 331.0, 48.8, 335.2, 47.8,
-337.5, 45.1, 339.5, 46.8, 345.7, 56.6, 345.7, 56.6, 352.0, 66.3,
-356.0, 70.2, 352.5, 73.8, 353.0, 81.4, 343.1, 87.8, 339.5, 82.3,
-326.0, 83.2, 324.5, 83.3, 324.5, 83.3, 323.0, 83.4, 321.9, 81.1,
-315.9, 83.9, 308.9, 84.4, 312.6, 74.0, 307.6, 64.5, 297.3, 56.6,
-333.5, 40.1, 335.5, 41.8, 336.2, 41.4, 337.4, 43.5, 338.4, 45.2,
-338.4, 45.2, 339.5, 46.8, 337.5, 45.1, 335.2, 47.8, 331.0, 48.8,
-329.4, 47.0, 330.6, 42.5, 333.5, 40.1, 273.8, 289.7, 286.3, 295.9,
-287.0, 303.2, 298.9, 302.1, 294.6, 307.8, 294.6, 307.8, 290.3, 313.5,
-288.2, 316.2, 288.1, 316.1, 286.0, 318.8, 277.3, 306.1, 269.1, 295.9,
-273.8, 289.7, 204.3, 420.0, 183.7, 445.4, 180.2, 443.2, 163.2, 470.8,
-155.4, 476.2, 151.1, 474.2, 147.6, 481.7, 147.4, 480.0, 147.4, 480.0,
-147.1, 478.3, 146.9, 478.2, 148.1, 475.5, 149.2, 472.6, 175.8, 445.4,
-173.8, 423.9, 204.3, 420.0, 213.9, 354.1, 211.2, 376.4, 202.0, 375.3,
-190.1, 396.4, 185.5, 404.4, 185.5, 404.4, 181.0, 412.4, 178.7, 416.5,
-176.4, 416.5, 176.4, 420.6, 182.3, 404.9, 178.8, 403.7, 181.3, 386.7,
-186.6, 371.8, 188.2, 371.8, 190.4, 356.3, 193.8, 346.9, 193.8, 346.9,
-197.1, 337.6, 204.7, 336.9, 214.8, 347.0, 213.9, 354.1, 197.1, 337.6,
-198.8, 332.8, 201.3, 328.4, 200.5, 328.0, 208.1, 323.9, 208.1, 323.9,
-215.6, 319.8, 216.7, 313.2, 227.8, 315.9, 238.9, 309.9, 237.8, 332.4,
-226.4, 331.9, 214.0, 353.9, 214.0, 354.0, 213.9, 354.1, 213.9, 354.1,
-214.8, 347.0, 204.7, 336.9, 197.1, 337.6, 205.5, 205.2, 214.9, 187.9,
-214.9, 187.9, 224.3, 170.6, 223.2, 174.4, 225.5, 175.1, 226.7, 179.6,
-218.9, 193.9, 203.1, 195.7, 205.5, 205.2, 226.7, 179.6, 226.8, 180.1,
-227.0, 180.2, 226.9, 180.6, 214.8, 224.2, 214.8, 224.2, 202.7, 267.7,
-189.3, 262.0, 182.5, 266.1, 168.1, 274.5, 172.0, 267.1, 178.1, 263.9,
-175.9, 259.7, 176.2, 259.8, 176.7, 258.1, 177.5, 256.5, 191.5, 230.8,
-189.8, 229.7, 205.5, 205.2, 203.1, 195.7, 218.9, 193.9, 226.7, 179.6,
-186.7, 290.7, 192.0, 288.8, 194.8, 290.7, 197.4, 286.9, 189.6, 315.0,
-189.6, 315.0, 181.8, 343.0, 182.1, 342.0, 181.9, 342.0, 182.0, 340.9,
-183.7, 322.7, 183.7, 322.7, 185.4, 304.5, 186.1, 297.6, 183.3, 295.7,
-186.7, 290.7, 463.6, 692.9, 463.5, 690.2, 463.4, 690.2, 463.3, 687.6,
-463.2, 686.9, 463.2, 686.2, 463.2, 686.2, 463.0, 680.2, 463.8, 680.1,
-462.8, 674.3, 464.4, 678.0, 464.4, 678.0, 466.1, 681.7, 466.3, 687.2,
-466.0, 687.8, 463.6, 692.9, 578.5, 434.6, 579.6, 430.3, 580.2, 430.4,
-580.8, 426.0, 580.6, 425.6, 581.4, 425.1, 581.3, 424.5, 602.2, 457.1,
-602.2, 457.1, 623.1, 489.8, 628.7, 470.0, 598.0, 464.0, 578.5, 434.6,
-673.6, 757.7, 672.3, 759.2, 679.5, 765.3, 685.5, 772.8, 689.7, 778.1,
-694.9, 781.9, 693.8, 783.4, 661.0, 817.4, 661.0, 817.4, 628.1, 851.5,
-629.8, 849.8, 629.2, 849.3, 630.3, 847.0, 634.0, 839.4, 634.0, 839.4,
-637.6, 831.9, 639.3, 828.4, 639.3, 828.4, 641.0, 824.9, 657.3, 791.3,
-650.1, 785.2, 673.6, 757.7, 491.4, 532.6, 491.9, 530.4, 503.1, 533.1,
-514.8, 533.6, 520.0, 533.8, 525.1, 533.3, 525.2, 534.0, 525.8, 540.2,
-520.7, 540.8, 516.3, 547.5, 512.5, 553.3, 509.0, 559.2, 508.7, 559.0,
-496.5, 551.7, 488.9, 543.1, 491.4, 532.6, 474.8, 529.0, 477.1, 496.5,
-488.2, 493.2, 479.4, 464.0, 481.8, 459.8, 483.6, 460.0, 484.1, 455.6,
-483.9, 455.4, 484.4, 455.0, 484.8, 454.4, 485.1, 452.0, 496.1, 456.3,
-501.5, 451.5, 501.5, 451.9, 509.5, 450.2, 517.4, 448.8, 517.2, 464.4,
-509.2, 464.3, 501.0, 479.8, 499.7, 482.2, 499.7, 482.2, 498.4, 484.5,
-486.6, 506.8, 469.2, 522.9, 474.8, 529.0, 527.1, 602.3, 524.2, 609.7,
-524.2, 609.7, 521.3, 617.1, 515.0, 592.1, 519.4, 590.9, 517.5, 564.7,
-517.0, 557.6, 517.0, 557.6, 516.5, 550.4, 516.4, 549.0, 515.7, 548.6,
-516.3, 547.5, 520.7, 540.8, 525.8, 540.2, 525.2, 534.0, 536.3, 517.1,
-536.3, 517.1, 547.5, 500.3, 551.2, 494.6, 553.7, 495.1, 555.0, 488.9,
-543.5, 546.1, 541.9, 545.8, 527.1, 602.3, 555.0, 488.9, 555.3, 487.8,
-555.7, 487.9, 556.3, 486.9, 562.9, 477.0, 563.1, 466.9, 569.4, 467.1,
-566.8, 467.0, 566.6, 477.0, 563.8, 487.0, 562.8, 490.6, 562.8, 490.6,
-561.8, 494.2, 556.7, 512.6, 556.7, 512.6, 551.5, 531.1, 549.5, 538.2,
-549.5, 538.2, 547.5, 545.3, 546.1, 548.2, 546.7, 548.5, 545.8, 551.6,
-545.0, 555.9, 544.6, 555.9, 543.4, 560.1, 542.9, 581.4, 535.2, 581.2,
-527.1, 602.3, 541.9, 545.8, 543.5, 546.1, 555.0, 488.9, 432.0, 228.2,
-431.8, 226.0, 431.8, 226.0, 431.6, 223.8, 437.1, 213.6, 439.0, 212.2,
-438.3, 201.1, 439.1, 202.4, 440.2, 203.0, 439.9, 203.6, 439.3, 206.5,
-441.2, 208.2, 444.3, 210.5, 456.0, 216.4, 452.5, 223.3, 460.7, 236.1,
-464.0, 254.6, 453.1, 274.4, 455.8, 275.1, 438.7, 270.4, 443.2, 252.0,
-432.0, 228.2, 455.8, 275.1, 456.6, 276.9, 455.5, 277.4, 455.2, 279.7,
-456.2, 280.0, 451.1, 287.9, 453.6, 292.6, 452.4, 302.1, 456.5, 306.3,
-451.2, 311.6, 446.5, 307.6, 439.0, 307.9, 439.3, 306.7, 435.6, 267.5,
-435.6, 267.5, 432.0, 228.2, 443.2, 252.0, 438.7, 270.4, 455.8, 275.1,
-475.1, 258.7, 477.7, 262.6, 477.7, 262.6, 480.2, 266.5, 484.3, 278.3,
-485.4, 277.9, 490.6, 289.4, 492.5, 327.4, 487.6, 331.4, 503.0, 365.1,
-503.1, 368.1, 503.1, 368.1, 503.3, 371.1, 497.3, 363.5, 498.7, 362.4,
-494.1, 353.7, 486.4, 339.0, 486.4, 339.0, 478.6, 324.2, 472.6, 312.8,
-472.6, 312.8, 466.5, 301.3, 464.4, 300.7, 465.0, 298.4, 463.5, 295.5,
-467.3, 276.7, 465.7, 275.0, 475.1, 258.7, 463.5, 295.5, 459.3, 287.6,
-461.1, 281.5, 455.2, 279.7, 455.5, 277.4, 456.6, 276.9, 455.8, 275.1,
-453.1, 274.4, 464.0, 254.6, 460.7, 236.1, 464.6, 242.2, 463.1, 244.0,
-468.4, 248.2, 473.2, 250.8, 471.8, 253.4, 475.1, 258.7, 465.7, 275.0,
-467.3, 276.7, 463.5, 295.5, 494.1, 353.7, 498.7, 362.4, 497.3, 363.5,
-503.3, 371.1, 503.6, 377.8, 505.6, 383.9, 503.9, 384.4, 498.4, 392.8,
-504.5, 396.8, 505.1, 409.1, 486.1, 398.3, 484.5, 401.1, 463.9, 393.2,
-464.2, 393.4, 466.8, 389.5, 469.6, 385.7, 480.9, 370.9, 480.9, 370.9,
-492.2, 356.2, 493.2, 355.0, 494.4, 354.1, 494.1, 353.7, 185.8, 516.6,
-187.6, 526.3, 190.7, 525.7, 195.7, 534.8, 200.7, 544.0, 203.9, 543.4,
-205.8, 553.2, 204.0, 561.3, 204.0, 561.3, 202.3, 569.3, 189.3, 545.5,
-190.9, 543.6, 185.8, 516.6, 195.7, 534.8, 190.7, 525.7, 187.6, 526.3,
-185.8, 516.6, 179.3, 504.9, 178.5, 505.2, 172.9, 493.1, 173.3, 491.8,
-173.3, 491.8, 173.8, 490.6, 196.2, 478.0, 189.5, 466.0, 205.2, 441.3,
-222.8, 476.9, 207.3, 489.8, 195.7, 534.8, 418.3, 496.3, 419.3, 491.9,
-421.6, 491.2, 420.4, 487.6, 420.7, 486.1, 421.1, 486.1, 421.1, 484.6,
-419.4, 501.7, 421.0, 501.9, 420.8, 519.2, 421.1, 514.2, 420.3, 514.1,
-419.7, 509.1, 419.0, 502.7, 419.0, 502.7, 418.3, 496.4, 418.3, 496.3,
-418.3, 496.3, 418.3, 496.3, 412.4, 667.3, 410.4, 684.4, 413.1, 685.3,
-407.6, 701.4, 411.8, 689.1, 408.8, 688.1, 409.9, 674.8, 410.7, 664.7,
-410.7, 664.7, 411.6, 654.6, 415.4, 609.0, 415.4, 609.0, 419.2, 563.4,
-419.9, 555.0, 419.9, 555.0, 420.6, 546.5, 420.6, 543.2, 420.9, 543.2,
-421.2, 539.9, 417.4, 595.7, 417.3, 595.6, 413.5, 651.4, 413.0, 659.4,
-413.3, 659.4, 412.4, 667.3, 427.3, 776.5, 428.0, 780.3, 430.1, 779.9,
-433.0, 783.4, 446.6, 800.0, 455.1, 797.7, 460.2, 816.6, 457.1, 838.5,
-457.1, 838.5, 453.9, 860.5, 455.4, 855.6, 452.0, 854.6, 450.1, 848.6,
-444.2, 830.0, 444.2, 830.0, 438.3, 811.3, 432.8, 793.9, 430.7, 794.3,
-427.3, 776.5, 406.6, 883.8, 406.0, 882.6, 403.3, 884.1, 400.0, 884.0,
-374.4, 883.8, 374.2, 886.1, 348.9, 883.3, 349.2, 883.2, 348.7, 880.8,
-348.6, 878.3, 347.6, 869.7, 349.5, 869.5, 350.4, 860.7, 355.0, 857.9,
-358.6, 864.1, 366.8, 867.4, 382.6, 873.9, 382.6, 873.9, 398.3, 880.4,
-402.4, 882.1, 405.1, 880.8, 406.6, 883.8, 377.5, 209.4, 376.8, 204.7,
-376.0, 199.9, 376.1, 199.9, 392.8, 177.9, 393.6, 178.5, 409.4, 156.0,
-412.5, 160.9, 412.5, 160.9, 415.7, 165.8, 417.1, 167.5, 416.0, 168.4,
-416.3, 171.0, 416.3, 171.1, 416.1, 171.1, 416.0, 171.3, 413.9, 173.3,
-413.9, 173.3, 411.9, 175.4, 394.7, 192.4, 397.1, 195.9, 377.5, 209.4,
-225.8, 746.3, 226.0, 752.9, 224.7, 752.9, 223.6, 759.5, 217.9, 793.6,
-217.9, 793.6, 212.2, 827.7, 210.5, 838.1, 207.5, 838.4, 208.8, 848.4,
-208.5, 822.8, 203.1, 821.6, 208.2, 797.2, 209.2, 783.9, 213.3, 782.9,
-210.2, 770.6, 209.7, 770.5, 210.6, 767.8, 210.6, 764.9, 225.7, 716.7,
-214.3, 713.1, 218.1, 661.3, 217.9, 656.8, 219.4, 656.7, 220.8, 652.1,
-223.9, 661.3, 221.3, 662.2, 221.9, 672.3, 223.8, 709.3, 225.1, 709.3,
-225.8, 746.3, 377.7, 663.3, 378.7, 665.6, 378.0, 667.1, 376.3, 669.4,
-368.6, 667.1, 356.4, 681.9, 350.7, 699.0, 351.9, 697.8, 351.0, 696.9,
-351.3, 694.7, 360.6, 667.3, 356.5, 665.5, 358.8, 636.1, 359.1, 633.6,
-359.1, 633.6, 359.5, 631.2, 359.5, 631.2, 359.5, 631.2, 359.5, 631.2,
-368.6, 647.3, 370.4, 646.5, 377.7, 663.3, 365.6, 457.1, 389.9, 484.9,
-385.3, 491.1, 414.3, 512.8, 419.1, 522.3, 413.0, 527.4, 407.6, 540.2,
-407.7, 539.3, 405.6, 539.1, 403.6, 538.0, 401.5, 535.4, 402.1, 534.9,
-400.7, 531.7, 387.8, 504.4, 387.8, 504.4, 374.9, 477.0, 370.3, 467.0,
-373.1, 463.9, 365.6, 457.1, 396.0, 295.6, 405.7, 311.6, 405.7, 311.6,
-415.3, 327.6, 415.1, 326.1, 403.1, 330.3, 400.9, 326.8, 393.5, 314.7,
-398.5, 311.6, 396.1, 296.5, 396.1, 296.0, 396.2, 296.0, 396.0, 295.6,
-429.5, 402.8, 428.6, 401.2, 424.0, 404.3, 422.4, 402.4, 409.9, 388.2,
-410.4, 387.3, 401.3, 370.6, 404.8, 377.1, 406.3, 376.3, 411.3, 382.1,
-420.4, 392.5, 423.1, 391.0, 429.5, 402.8, 327.5, 317.9, 335.5, 300.7,
-341.6, 301.3, 343.5, 283.5, 344.7, 282.9, 350.0, 293.2, 356.4, 303.0,
-363.8, 314.1, 363.8, 314.1, 371.2, 325.2, 376.4, 333.1, 375.3, 339.9,
-381.6, 341.0, 353.4, 336.2, 341.1, 338.4, 327.5, 317.9, 413.7, 482.7,
-378.3, 457.0, 380.2, 454.0, 343.0, 431.2, 338.6, 427.9, 339.3, 427.0,
-335.5, 422.7, 331.6, 421.7, 332.3, 419.0, 329.1, 415.3, 342.3, 424.3,
-341.6, 425.3, 354.1, 435.3, 359.8, 439.8, 359.8, 439.8, 365.4, 444.3,
-366.7, 445.3, 366.7, 445.3, 367.9, 446.3, 390.8, 464.5, 388.8, 467.8,
-413.7, 482.7, 274.1, 435.0, 276.4, 430.3, 275.1, 429.0, 278.6, 425.7,
-278.7, 425.6, 278.7, 425.6, 278.7, 425.6, 268.4, 467.8, 268.3, 467.8,
-258.1, 510.1, 256.8, 515.4, 255.8, 520.7, 255.8, 520.7, 255.8, 520.7,
-256.8, 515.4, 258.1, 510.1, 259.6, 503.2, 259.6, 503.2, 261.0, 496.3,
-267.6, 465.7, 266.5, 465.4, 274.1, 435.0, 64.3, 245.5, 63.3, 243.2,
-63.3, 243.2, 62.3, 240.9, 69.8, 212.3, 64.6, 210.9, 66.9, 181.0,
-65.6, 193.9, 66.4, 193.9, 65.9, 206.9, 65.1, 226.2, 66.4, 226.4,
-64.3, 245.5, 43.9, 79.8, 44.0, 76.2, 43.5, 76.1, 44.2, 72.5,
-44.4, 71.7, 44.2, 70.8, 44.2, 70.8, 45.3, 66.2, 44.7, 65.8,
-46.8, 61.7, 46.6, 62.8, 47.2, 62.9, 47.6, 64.1, 46.3, 72.1,
-46.9, 72.5, 43.9, 79.8, 649.4, 530.7, 645.6, 524.9, 641.9, 519.1,
-641.9, 519.1, 639.7, 515.7, 639.7, 515.7, 637.5, 512.3, 637.5, 512.3,
-637.5, 512.3, 637.5, 512.3, 638.0, 511.3, 637.6, 511.1, 637.8, 510.0,
-652.4, 503.5, 652.8, 504.4, 667.8, 498.9, 677.4, 495.4, 677.4, 495.4,
-687.0, 491.8, 694.7, 489.0, 700.5, 484.1, 702.3, 486.2, 701.6, 497.2,
-701.6, 497.2, 700.8, 508.2, 698.8, 512.4, 695.2, 510.7, 689.5, 513.1,
-669.4, 521.9, 670.2, 528.0, 649.4, 530.7, 700.8, 471.3, 701.9, 472.8,
-701.9, 472.8, 703.1, 474.3, 703.5, 474.5, 703.0, 475.8, 702.9, 477.3,
-701.0, 474.9, 700.6, 474.2, 700.8, 471.3, 808.2, 400.0, 814.9, 404.7,
-820.1, 403.3, 821.7, 409.3, 859.1, 470.9, 856.4, 472.5, 890.9, 536.0,
-891.2, 536.4, 890.9, 536.6, 891.0, 537.3, 892.0, 543.8, 892.0, 543.8,
-893.0, 550.3, 848.4, 476.5, 847.1, 476.9, 808.2, 400.0, 893.0, 550.3,
-893.2, 551.5, 892.7, 551.8, 893.3, 552.6, 889.0, 549.7, 889.0, 549.7,
-884.7, 546.7, 880.9, 539.6, 880.0, 540.1, 875.4, 533.5, 862.6, 514.1,
-862.4, 514.2, 849.5, 494.8, 844.3, 485.5, 844.7, 485.2, 838.7, 476.3,
-814.6, 432.8, 819.3, 429.5, 790.5, 389.3, 790.0, 388.3, 790.0, 388.3,
-789.5, 387.2, 797.2, 395.2, 798.9, 393.6, 808.2, 400.0, 847.1, 476.9,
-848.4, 476.5, 893.0, 550.3, 731.1, 91.4, 720.8, 83.6, 721.9, 78.2,
-710.6, 75.9, 720.4, 73.8, 721.6, 76.1, 730.2, 71.7, 731.7, 69.2,
-734.5, 70.8, 738.7, 69.9, 741.7, 82.2, 756.8, 78.4, 775.0, 86.9,
-771.2, 83.6, 767.7, 87.7, 760.4, 88.4, 745.7, 89.9, 744.5, 94.7,
-731.1, 91.4, 782.2, 136.8, 788.0, 137.7, 788.0, 138.5, 793.9, 138.7,
-800.7, 141.9, 800.0, 143.3, 806.2, 148.0, 811.6, 152.0, 811.6, 152.0,
-816.9, 156.1, 818.5, 154.8, 822.6, 162.9, 829.8, 165.7, 834.0, 165.0,
-834.8, 169.5, 839.8, 173.3, 876.6, 201.0, 876.6, 201.0, 913.4, 228.8,
-918.1, 232.3, 918.0, 232.3, 922.7, 235.8, 925.8, 238.2, 925.8, 238.2,
-929.0, 240.6, 912.7, 229.3, 912.8, 229.1, 896.6, 217.7, 896.5, 217.6,
-896.4, 217.7, 896.3, 217.7, 858.2, 190.7, 858.3, 190.6, 820.2, 163.7,
-801.2, 150.2, 798.9, 152.6, 782.2, 136.8, 782.6, 330.9, 782.3, 332.4,
-782.8, 333.4, 782.0, 333.8, 780.3, 335.4, 782.3, 338.7, 780.8, 339.3,
-767.9, 345.5, 767.9, 345.5, 755.0, 351.7, 744.1, 349.8, 745.6, 341.5,
-736.2, 331.2, 736.2, 331.2, 730.1, 324.6, 724.0, 317.9, 748.1, 316.3,
-748.5, 323.3, 773.0, 328.8, 777.8, 329.9, 778.5, 328.6, 782.6, 330.9,
-578.7, 157.1, 578.3, 156.9, 578.1, 157.0, 578.0, 156.8, 567.2, 135.5,
-567.2, 135.5, 556.4, 114.1, 565.8, 120.1, 566.5, 119.0, 576.5, 124.0,
-581.7, 126.7, 581.8, 126.6, 587.0, 129.2, 596.9, 134.4, 596.9, 134.4,
-606.8, 139.6, 603.3, 151.5, 592.9, 148.5, 578.7, 157.1, 690.7, 281.6,
-697.1, 288.6, 697.1, 288.6, 703.6, 295.6, 710.4, 303.0, 710.4, 303.0,
-717.1, 310.4, 720.6, 314.2, 720.6, 314.2, 724.0, 317.9, 730.1, 324.6,
-736.2, 331.2, 736.2, 331.2, 745.6, 341.5, 744.1, 349.8, 755.0, 351.7,
-750.9, 353.7, 750.9, 353.7, 746.8, 355.7, 734.4, 346.0, 737.0, 342.8,
-727.2, 329.8, 708.9, 305.7, 707.9, 306.5, 690.7, 281.6, 645.4, 281.4,
-639.4, 274.1, 639.4, 274.1, 633.4, 266.7, 624.4, 257.5, 629.3, 253.2,
-621.3, 242.7, 617.0, 239.1, 618.6, 237.3, 615.8, 231.9, 631.1, 256.4,
-632.5, 255.7, 645.4, 281.4, 695.4, 173.0, 681.8, 158.3, 682.3, 157.8,
-668.3, 143.7, 666.0, 142.0, 666.3, 141.5, 664.3, 139.4, 666.5, 141.3,
-666.8, 140.9, 669.2, 142.5, 711.0, 169.1, 716.3, 163.2, 752.8, 195.8,
-753.2, 196.1, 753.4, 195.9, 753.8, 196.2, 758.2, 199.1, 758.1, 199.2,
-762.5, 202.3, 764.9, 203.9, 764.9, 203.8, 767.2, 205.4, 768.4, 206.2,
-768.4, 206.2, 769.5, 207.0, 732.3, 190.2, 729.6, 194.5, 695.4, 173.0,
-769.5, 207.0, 794.8, 224.5, 794.8, 224.5, 820.2, 241.9, 812.5, 238.1,
-810.9, 240.7, 804.0, 236.0, 757.7, 213.1, 757.7, 213.1, 711.3, 190.3,
-709.2, 189.3, 709.9, 187.9, 707.8, 186.5, 707.8, 186.6, 701.6, 179.8,
-695.4, 173.0, 729.6, 194.5, 732.3, 190.2, 769.5, 207.0, 574.2, 109.7,
-572.5, 108.7, 572.4, 108.8, 570.7, 107.6, 569.7, 106.9, 569.6, 106.1,
-568.7, 106.2, 569.2, 106.1, 569.2, 106.1, 569.8, 106.0, 572.2, 107.5,
-572.8, 107.4, 574.2, 109.7, 538.5, 212.0, 511.4, 202.2, 511.4, 202.2,
-484.2, 192.4, 483.2, 193.7, 468.9, 182.5, 453.6, 172.7, 477.3, 175.2,
-476.5, 183.3, 499.3, 193.9, 505.2, 196.6, 505.2, 196.6, 511.1, 199.4,
-524.8, 205.7, 524.1, 208.3, 538.5, 212.0, 480.4, 35.4, 492.4, 20.0,
-492.4, 20.0, 504.3, 4.5, 503.8, 5.4, 504.9, 6.1, 505.4, 7.7,
-500.4, 15.2, 499.3, 14.5, 493.2, 21.2, 486.8, 28.3, 485.7, 27.5,
-480.4, 35.4, 413.7, 132.6, 409.4, 132.7, 408.4, 130.9, 405.1, 132.7,
-406.3, 131.1, 406.3, 131.1, 407.5, 129.4, 427.1, 106.7, 425.9, 105.7,
-444.3, 82.0, 453.8, 73.5, 465.3, 82.3, 470.6, 73.3, 450.2, 107.6,
-442.5, 103.1, 414.2, 132.6, 414.0, 132.6, 414.0, 132.6, 413.7, 132.6,
-470.6, 73.3, 480.3, 65.3, 491.4, 73.5, 496.1, 64.9, 470.4, 92.8,
-470.4, 92.8, 444.8, 120.8, 428.9, 123.9, 424.2, 121.8, 414.2, 132.6,
-414.0, 132.6, 414.0, 132.6, 413.7, 132.6, 442.0, 102.8, 439.1, 99.2,
-470.6, 73.3, 578.5, 1.0, 573.7, -6.8, 567.4, -13.1, 568.9, -14.7,
-569.8, -17.4, 571.5, -18.3, 570.6, -20.1, 568.1, -21.8, 573.8, -30.5,
-577.0, -41.0, 574.6, -40.2, 577.3, -31.7, 577.7, -22.4, 578.1, -10.7,
-584.0, -3.9, 578.5, 1.0, 240.9, 156.3, 240.3, 155.6, 239.5, 155.4,
-239.6, 154.9, 248.0, 118.7, 248.0, 118.7, 256.4, 82.5, 253.0, 96.4,
-253.5, 96.5, 250.6, 110.4, 245.7, 133.4, 246.6, 133.6, 240.9, 156.3,
-254.9, 243.8, 255.7, 242.2, 250.0, 239.5, 245.2, 235.3, 235.1, 226.5,
-234.7, 226.9, 225.0, 217.7, 225.1, 217.0, 225.1, 217.0, 225.3, 216.3,
-226.0, 217.1, 248.9, 202.2, 265.1, 182.1, 266.6, 180.8, 266.6, 180.8,
-268.0, 179.5, 268.3, 176.5, 271.1, 176.8, 274.3, 174.1, 267.1, 209.5,
-270.2, 211.6, 254.9, 243.8, 274.3, 174.1, 280.3, 169.0, 280.3, 169.0,
-286.3, 163.8, 286.7, 162.2, 291.1, 164.4, 293.7, 162.2, 289.7, 178.2,
-281.7, 180.7, 285.8, 194.3, 287.8, 196.8, 281.7, 200.4, 283.1, 204.9,
-269.4, 209.6, 276.7, 231.0, 270.2, 257.1, 270.8, 256.4, 254.6, 250.1,
-254.9, 243.8, 270.2, 211.6, 267.1, 209.5, 274.3, 174.1, 245.2, 235.3,
-250.0, 239.5, 255.7, 242.2, 254.9, 243.8, 254.6, 250.1, 270.8, 256.4,
-270.2, 257.1, 266.8, 270.9, 262.5, 271.2, 263.4, 284.6, 260.9, 283.4,
-260.9, 283.4, 258.3, 282.1, 252.2, 279.3, 252.4, 278.8, 246.4, 275.6,
-241.1, 256.7, 240.2, 253.9, 245.2, 235.3, 246.4, 275.6, 230.9, 267.1,
-231.4, 266.1, 215.5, 258.6, 220.2, 238.1, 220.2, 238.1, 225.0, 217.7,
-234.7, 226.9, 235.1, 226.5, 245.2, 235.3, 240.2, 253.9, 241.1, 256.7,
-246.4, 275.6, 357.1, 144.7, 357.5, 151.5, 356.2, 151.9, 358.0, 158.3,
-344.2, 177.1, 356.5, 189.2, 361.9, 218.8, 361.3, 219.5, 361.3, 219.5,
-360.7, 220.3, 355.7, 209.1, 352.7, 208.9, 352.1, 197.2, 350.9, 171.1,
-353.2, 170.7, 357.1, 144.7, 310.9, 158.1, 306.2, 144.2, 302.9, 144.6,
-301.6, 130.4, 301.6, 130.4, 301.5, 130.3, 301.5, 130.3, 301.9, 127.8,
-300.6, 127.6, 299.7, 125.0, 298.3, 122.7, 302.5, 120.1, 305.2, 115.3,
-310.9, 124.6, 306.7, 127.1, 308.3, 138.9, 309.6, 148.5, 305.7, 151.6,
-310.9, 158.1, 309.4, 53.8, 303.3, 55.2, 297.3, 55.1, 297.3, 56.6,
-292.3, 52.8, 282.4, 55.0, 278.3, 61.0, 273.9, 47.9, 275.0, 35.4,
-269.6, 34.9, 270.1, 33.0, 270.1, 33.0, 270.6, 31.1, 271.6, 29.7,
-271.6, 29.7, 272.6, 28.3, 291.9, 39.5, 295.2, 37.4, 309.4, 53.8,
-272.6, 28.3, 281.5, 15.3, 281.5, 15.3, 290.4, 2.4, 306.7, 25.1,
-311.9, 21.3, 333.5, 40.1, 330.6, 42.5, 329.4, 47.0, 331.0, 48.8,
-320.2, 51.3, 320.2, 51.3, 309.4, 53.8, 295.2, 37.4, 291.9, 39.5,
-272.6, 28.3, 263.4, 293.9, 267.9, 291.5, 272.4, 291.5, 272.4, 289.1,
-272.6, 289.1, 272.7, 289.2, 272.7, 289.2, 272.7, 289.1, 273.2, 289.5,
-273.8, 289.7, 269.1, 295.9, 277.3, 306.1, 286.0, 318.8, 284.3, 320.9,
-284.3, 320.9, 282.5, 323.1, 275.2, 330.1, 274.9, 329.8, 267.3, 336.5,
-265.5, 338.1, 265.4, 339.8, 263.7, 339.6, 263.6, 339.6, 263.7, 337.9,
-263.7, 336.2, 263.6, 315.1, 259.6, 314.3, 263.4, 293.9, 153.1, 461.8,
-164.8, 441.2, 168.2, 442.5, 176.4, 420.6, 176.4, 416.5, 178.7, 416.5,
-181.0, 412.4, 186.9, 405.9, 190.4, 408.1, 194.2, 400.8, 180.4, 426.9,
-177.6, 425.5, 161.0, 450.1, 157.1, 456.0, 156.4, 455.6, 153.1, 461.8,
-149.5, 388.3, 147.8, 368.2, 147.8, 368.2, 146.0, 348.1, 150.8, 329.2,
-150.0, 329.0, 154.0, 309.9, 158.2, 344.5, 152.0, 345.3, 150.0, 380.7,
-149.8, 384.5, 149.1, 384.6, 149.5, 388.3, 488.6, 852.4, 490.1, 864.3,
-489.4, 864.4, 491.6, 876.2, 491.8, 878.8, 490.7, 880.5, 492.0, 881.3,
-484.3, 884.0, 483.2, 883.3, 474.9, 881.8, 475.7, 881.1, 474.8, 880.1,
-474.7, 878.3, 473.9, 865.1, 467.8, 861.9, 473.1, 852.0, 474.8, 848.9,
-485.7, 848.5, 488.6, 852.4, 473.1, 852.0, 460.8, 773.6, 466.9, 772.5,
-463.6, 692.9, 466.0, 687.8, 466.3, 687.2, 466.1, 681.7, 466.6, 682.9,
-466.6, 682.9, 467.1, 684.1, 461.8, 693.8, 469.0, 697.8, 470.8, 711.5,
-474.2, 737.2, 474.2, 737.2, 477.6, 762.9, 477.9, 765.2, 477.9, 765.3,
-478.2, 767.6, 483.4, 810.0, 483.4, 810.0, 488.6, 852.4, 485.7, 848.5,
-474.8, 848.9, 473.1, 852.0, 580.6, 496.9, 580.8, 495.0, 576.3, 494.4,
-572.1, 491.9, 568.0, 489.5, 564.1, 489.9, 563.8, 487.0, 566.6, 477.0,
-566.8, 467.0, 569.4, 467.1, 572.1, 457.2, 568.4, 453.0, 574.9, 447.3,
-572.0, 449.9, 575.7, 454.1, 576.4, 460.9, 578.5, 478.9, 583.0, 479.5,
-580.6, 496.9, 570.5, 776.6, 568.1, 777.6, 568.6, 778.9, 566.7, 781.1,
-553.8, 796.7, 553.8, 796.7, 540.9, 812.3, 525.4, 830.9, 521.3, 851.8,
-510.0, 849.6, 512.6, 828.3, 512.6, 828.3, 515.2, 807.1, 515.6, 805.4,
-517.5, 805.8, 519.9, 804.5, 533.1, 797.2, 533.1, 797.2, 546.4, 789.9,
-558.4, 783.3, 557.9, 782.0, 570.5, 776.6, 538.4, 619.0, 540.1, 605.1,
-540.1, 605.1, 541.9, 591.3, 541.1, 592.1, 553.2, 598.7, 552.4, 604.6,
-551.4, 612.5, 537.6, 618.0, 538.4, 619.0, 476.1, 608.4, 475.7, 614.6,
-466.7, 616.9, 468.3, 620.3, 469.2, 607.8, 469.2, 607.8, 470.1, 595.2,
-468.0, 598.4, 476.6, 602.1, 476.1, 608.4, 470.1, 595.2, 472.3, 563.6,
-472.3, 563.6, 474.6, 531.9, 475.4, 529.7, 486.1, 528.4, 491.4, 532.6,
-488.9, 543.1, 496.5, 551.7, 508.7, 559.0, 503.3, 585.9, 497.1, 588.7,
-476.1, 608.4, 476.6, 602.1, 468.0, 598.4, 470.1, 595.2, 549.3, 443.3,
-563.3, 440.9, 563.8, 442.5, 577.4, 438.4, 576.8, 438.4, 576.1, 442.9,
-574.9, 447.3, 568.4, 453.0, 572.1, 457.2, 569.4, 467.1, 563.1, 466.9,
-562.9, 477.0, 556.3, 486.9, 544.2, 472.5, 552.8, 465.2, 549.3, 443.5,
-549.3, 443.4, 549.3, 443.3, 549.3, 443.3, 516.5, 550.4, 517.0, 557.6,
-517.0, 557.6, 517.5, 564.7, 517.6, 565.4, 517.1, 566.1, 517.0, 566.1,
-516.8, 566.1, 517.0, 565.3, 517.0, 564.6, 516.7, 557.5, 518.6, 551.0,
-516.5, 550.4, 474.2, 687.1, 474.0, 684.3, 473.9, 684.3, 473.7, 681.5,
-492.4, 628.3, 493.5, 628.7, 513.3, 575.9, 514.3, 573.4, 514.3, 573.5,
-515.2, 571.0, 505.3, 599.1, 505.3, 599.1, 495.3, 627.2, 484.8, 657.2,
-485.9, 657.6, 474.2, 687.1, 450.6, 316.3, 450.9, 313.9, 452.2, 312.4,
-451.2, 311.6, 456.5, 306.3, 452.4, 302.1, 453.6, 292.6, 456.8, 298.7,
-459.4, 299.2, 466.5, 301.3, 472.6, 312.8, 472.6, 312.8, 478.6, 324.2,
-478.7, 323.4, 471.0, 322.1, 463.3, 319.9, 461.5, 319.4, 461.5, 319.4,
-459.7, 318.9, 458.1, 318.4, 458.1, 318.4, 456.6, 318.0, 453.6, 317.2,
-452.2, 318.3, 450.6, 316.3, 193.0, 612.6, 191.5, 619.8, 193.1, 620.6,
-189.9, 626.9, 187.0, 635.3, 187.0, 635.3, 184.0, 643.8, 184.3, 642.6,
-183.1, 642.3, 182.2, 640.8, 182.7, 636.7, 183.7, 636.8, 185.3, 632.9,
-188.4, 624.7, 188.4, 624.7, 191.5, 616.5, 192.3, 614.5, 192.7, 614.6,
-193.0, 612.6, 219.0, 424.9, 221.4, 447.0, 233.1, 461.9, 223.8, 469.2,
-218.1, 495.7, 218.1, 495.7, 212.4, 522.3, 207.3, 474.5, 208.9, 472.1,
-219.0, 424.9, 212.4, 522.3, 209.1, 537.8, 209.1, 537.8, 205.8, 553.2,
-203.9, 543.4, 200.7, 544.0, 195.7, 534.8, 207.3, 489.8, 222.8, 476.9,
-205.2, 441.3, 211.9, 430.8, 211.9, 430.8, 218.5, 420.3, 217.7, 422.0,
-218.8, 422.6, 219.0, 424.9, 208.9, 472.1, 207.3, 474.5, 212.4, 522.3,
-461.7, 734.0, 463.2, 759.7, 463.1, 759.8, 464.7, 785.5, 462.5, 801.0,
-462.5, 801.0, 460.2, 816.6, 455.1, 797.7, 446.6, 800.0, 433.0, 783.4,
-430.7, 774.5, 439.5, 772.2, 446.0, 761.1, 450.1, 753.9, 450.1, 753.9,
-454.2, 746.8, 458.0, 740.4, 463.1, 739.0, 461.7, 734.0, 447.6, 495.3,
-448.0, 501.2, 447.9, 501.2, 448.3, 507.2, 450.3, 533.5, 449.9, 533.5,
-451.5, 559.9, 451.9, 567.7, 451.9, 567.7, 452.4, 575.5, 451.9, 567.7,
-451.9, 567.7, 451.5, 559.9, 449.9, 533.5, 450.3, 533.5, 448.3, 507.2,
-447.9, 501.2, 448.0, 501.2, 447.6, 495.3, 413.5, 651.4, 420.1, 608.0,
-416.2, 607.4, 419.2, 563.4, 419.9, 555.0, 419.9, 555.0, 420.6, 546.5,
-420.6, 543.2, 420.9, 543.2, 421.2, 539.9, 424.7, 497.4, 425.3, 497.4,
-428.3, 454.9, 429.0, 448.0, 429.9, 448.1, 431.6, 441.3, 431.6, 441.3,
-431.6, 441.3, 431.6, 441.3, 436.2, 422.4, 436.2, 422.4, 440.8, 403.5,
-441.3, 401.3, 442.4, 401.0, 441.8, 399.1, 442.2, 404.5, 442.2, 404.5,
-442.5, 409.9, 428.9, 530.8, 431.7, 531.2, 413.5, 651.4, 442.5, 409.9,
-443.4, 424.6, 443.4, 424.6, 444.3, 439.3, 444.3, 445.8, 443.4, 445.8,
-442.5, 452.2, 432.1, 526.1, 432.1, 526.1, 421.8, 600.0, 417.1, 633.6,
-417.8, 633.8, 412.4, 667.3, 413.3, 659.4, 413.0, 659.4, 413.5, 651.4,
-431.7, 531.2, 428.9, 530.8, 442.5, 409.9, 383.3, 722.9, 393.5, 735.4,
-396.2, 749.3, 403.8, 747.8, 409.1, 754.3, 409.1, 754.3, 414.4, 760.8,
-416.7, 763.5, 416.7, 763.5, 418.9, 766.3, 423.1, 771.4, 424.8, 770.6,
-427.3, 776.5, 434.5, 793.1, 432.8, 793.9, 438.3, 811.2, 438.3, 811.3,
-438.3, 811.3, 438.3, 811.3, 438.3, 811.3, 438.3, 811.3, 438.3, 811.2,
-420.6, 782.9, 420.6, 782.9, 403.0, 754.5, 393.1, 738.7, 381.6, 737.4,
-383.3, 722.9, 366.8, 867.4, 358.6, 864.1, 355.0, 857.9, 350.4, 860.7,
-354.5, 820.5, 354.5, 820.5, 358.6, 780.4, 359.1, 775.3, 359.2, 775.3,
-359.7, 770.2, 363.7, 811.1, 362.7, 811.2, 365.7, 852.2, 366.3, 859.8,
-369.6, 865.9, 366.8, 867.4, 377.8, 211.3, 377.6, 210.3, 377.6, 210.3,
-377.5, 209.4, 397.1, 195.9, 394.7, 192.4, 411.9, 175.4, 400.3, 185.7,
-401.1, 186.7, 390.4, 198.0, 389.4, 199.1, 389.4, 199.1, 388.3, 200.2,
-383.0, 205.7, 383.6, 206.3, 377.8, 211.3, 239.8, 662.8, 239.0, 701.7,
-233.3, 701.6, 226.8, 740.4, 226.3, 743.4, 225.6, 743.4, 225.8, 746.3,
-225.1, 709.3, 223.8, 709.3, 221.9, 672.3, 221.9, 670.5, 225.1, 670.6,
-228.3, 668.9, 234.0, 665.8, 239.7, 665.9, 239.8, 662.8, 223.6, 759.5,
-224.7, 752.9, 226.0, 752.9, 225.8, 746.3, 225.6, 743.4, 226.3, 743.4,
-226.8, 740.4, 243.2, 724.1, 244.4, 725.4, 262.0, 710.4, 263.0, 709.5,
-263.0, 709.5, 264.0, 708.7, 312.0, 667.8, 311.7, 667.4, 360.0, 626.8,
-359.6, 627.2, 360.2, 627.9, 359.8, 628.3, 353.5, 635.0, 353.1, 634.7,
-346.4, 641.2, 315.7, 670.8, 315.7, 670.8, 284.9, 700.5, 262.0, 722.6,
-262.0, 722.6, 239.0, 744.7, 237.6, 746.0, 237.6, 746.0, 236.2, 747.4,
-229.9, 753.5, 229.3, 760.1, 223.6, 759.5, 285.2, 852.2, 296.7, 804.1,
-297.5, 803.6, 317.2, 758.2, 316.2, 760.6, 323.3, 763.1, 322.6, 766.3,
-318.0, 785.6, 314.5, 784.8, 306.5, 803.3, 295.8, 827.8, 291.3, 826.7,
-285.2, 852.2, 349.9, 662.3, 350.7, 654.7, 355.3, 654.7, 355.0, 647.4,
-352.0, 670.9, 358.7, 672.9, 351.3, 694.7, 351.0, 696.9, 351.9, 697.8,
-350.7, 699.0, 338.7, 735.0, 345.8, 737.4, 340.8, 775.8, 339.6, 719.2,
-343.7, 718.9, 349.9, 662.3, 340.8, 775.8, 339.9, 783.2, 339.9, 783.2,
-338.9, 790.7, 327.5, 784.7, 330.7, 778.5, 322.6, 766.3, 323.3, 763.1,
-316.2, 760.6, 317.2, 758.2, 319.6, 741.4, 322.8, 741.8, 328.4, 725.4,
-338.4, 696.1, 338.4, 696.1, 348.4, 666.8, 349.1, 664.5, 349.7, 664.6,
-349.9, 662.3, 343.7, 718.9, 339.6, 719.2, 340.8, 775.8, 385.0, 633.5,
-387.8, 636.1, 383.1, 641.1, 381.3, 648.8, 380.1, 653.4, 380.1, 653.4,
-379.0, 658.0, 378.4, 660.7, 376.7, 661.9, 377.7, 663.3, 370.4, 646.5,
-368.6, 647.3, 359.5, 631.2, 359.8, 632.0, 361.1, 631.4, 362.7, 631.5,
-373.8, 632.5, 378.5, 627.5, 385.0, 633.5, 400.7, 531.7, 402.1, 534.9,
-401.5, 535.4, 403.6, 538.0, 403.4, 537.8, 403.4, 537.8, 403.2, 537.7,
-357.2, 510.5, 356.8, 511.0, 310.5, 484.3, 343.2, 510.4, 348.2, 504.2,
-386.0, 524.0, 393.3, 527.9, 394.3, 526.7, 400.7, 531.7, 356.4, 303.0,
-350.0, 293.2, 344.7, 282.9, 343.5, 283.5, 344.3, 276.1, 338.5, 275.2,
-332.8, 267.4, 335.2, 259.1, 340.4, 253.4, 337.6, 250.9, 339.1, 248.9,
-340.9, 248.6, 340.6, 246.9, 340.1, 246.3, 343.2, 243.5, 345.7, 240.1,
-353.6, 266.3, 350.3, 267.3, 355.0, 294.4, 355.7, 298.7, 353.9, 300.6,
-356.4, 303.0, 384.0, 325.9, 390.1, 329.9, 392.4, 326.4, 400.9, 326.8,
-403.1, 330.3, 415.1, 326.1, 415.3, 327.6, 419.6, 334.6, 419.6, 334.6,
-423.8, 341.6, 403.5, 340.5, 401.6, 337.3, 384.0, 325.9, 354.1, 435.3,
-341.6, 425.3, 342.3, 424.3, 329.1, 415.3, 326.5, 412.4, 326.5, 412.4,
-324.0, 409.5, 332.6, 410.0, 335.1, 405.5, 342.0, 397.7, 367.3, 394.6,
-370.0, 392.8, 393.7, 400.8, 390.0, 399.5, 387.8, 405.9, 381.9, 411.1,
-368.0, 423.2, 368.9, 434.1, 354.1, 435.3, 272.8, 437.6, 273.4, 436.3,
-273.4, 436.3, 274.1, 435.0, 268.9, 461.0, 268.4, 460.9, 262.9, 486.8,
-261.9, 491.5, 261.0, 496.3, 261.0, 496.3, 261.0, 496.3, 261.9, 491.5,
-262.9, 486.8, 267.9, 462.2, 267.5, 462.1, 272.8, 437.6, 67.4, 175.0,
-67.4, 174.8, 67.4, 174.8, 67.4, 174.6, 69.5, 163.5, 68.3, 163.3,
-69.2, 152.0, 70.3, 157.7, 73.0, 157.2, 76.7, 162.3, 87.0, 209.4,
-89.9, 208.8, 103.2, 255.3, 115.4, 232.0, 85.9, 216.5, 68.6, 177.8,
-68.0, 176.4, 67.9, 176.4, 67.4, 175.0, 60.2, 159.3, 61.6, 171.9,
-66.0, 173.1, 63.0, 184.6, 63.0, 185.0, 63.2, 185.1, 63.0, 185.5,
-63.0, 185.5, 63.0, 185.5, 63.0, 185.6, 65.5, 192.5, 53.0, 194.9,
-48.4, 206.4, 44.4, 195.3, 38.1, 193.9, 40.3, 184.2, 41.9, 137.6,
-41.9, 137.6, 43.5, 91.0, 30.1, 107.8, 53.0, 124.9, 60.2, 159.3,
-43.5, 91.0, 43.7, 85.4, 43.7, 85.4, 43.9, 79.8, 46.9, 72.5,
-46.3, 72.1, 47.6, 64.1, 49.1, 68.4, 49.1, 68.4, 50.5, 72.6,
-53.3, 116.1, 55.4, 116.0, 60.2, 159.3, 53.0, 124.9, 30.1, 107.8,
-43.5, 91.0, 681.0, 569.7, 678.1, 569.9, 678.1, 569.9, 675.1, 570.2,
-666.1, 555.9, 665.9, 556.0, 656.7, 541.9, 658.6, 545.0, 659.2, 544.7,
-661.6, 547.5, 671.3, 558.6, 673.6, 557.2, 681.0, 569.7, 641.5, 479.0,
-641.5, 479.0, 641.5, 479.0, 641.6, 478.9, 639.0, 466.5, 650.4, 464.2,
-659.2, 449.5, 665.3, 457.3, 683.8, 457.8, 686.6, 453.1, 689.2, 456.4,
-689.2, 456.4, 691.8, 459.8, 668.7, 472.9, 666.6, 469.3, 641.6, 478.9,
-641.5, 479.0, 641.5, 479.0, 641.5, 479.0, 791.8, 137.2, 766.4, 118.0,
-768.4, 102.3, 740.9, 98.7, 740.1, 98.2, 740.1, 98.2, 739.3, 97.6,
-735.9, 98.2, 735.2, 94.5, 731.1, 91.4, 744.5, 94.7, 745.7, 89.9,
-760.4, 88.4, 777.7, 99.6, 772.6, 107.4, 784.9, 126.3, 788.4, 131.7,
-786.9, 134.1, 791.8, 137.2, 796.7, 204.0, 801.9, 215.2, 799.9, 216.7,
-807.2, 226.4, 792.9, 218.3, 792.9, 218.3, 778.7, 210.2, 772.5, 209.7,
-774.3, 201.8, 767.4, 197.3, 758.0, 193.0, 759.9, 188.8, 752.5, 180.3,
-776.1, 185.6, 777.9, 188.2, 796.7, 204.0, 752.5, 180.3, 747.3, 174.3,
-748.6, 172.2, 742.1, 168.4, 741.1, 167.9, 741.3, 167.5, 740.5, 166.5,
-752.1, 153.2, 750.4, 148.0, 765.4, 141.4, 766.1, 141.1, 768.7, 147.1,
-772.0, 152.8, 773.5, 155.3, 773.6, 155.2, 774.9, 157.7, 789.9, 177.8,
-785.8, 180.8, 796.7, 204.0, 777.9, 188.2, 776.1, 185.6, 752.5, 180.3,
-700.8, 121.1, 692.8, 111.8, 692.8, 111.8, 684.7, 102.6, 687.4, 102.5,
-689.7, 98.8, 689.9, 99.1, 714.6, 98.4, 715.3, 102.1, 739.3, 97.6,
-740.1, 98.2, 740.1, 98.2, 740.9, 98.7, 752.8, 100.3, 746.8, 120.3,
-760.7, 133.2, 761.0, 133.7, 760.9, 134.2, 761.4, 134.3, 731.0, 128.2,
-729.0, 132.7, 700.8, 121.1, 761.4, 134.3, 764.2, 135.2, 766.5, 139.8,
-765.4, 141.4, 750.4, 148.0, 752.1, 153.2, 740.5, 166.5, 723.1, 146.6,
-727.5, 138.7, 705.7, 126.7, 702.9, 126.2, 703.3, 123.9, 700.8, 121.1,
-729.0, 132.7, 731.0, 128.2, 761.4, 134.3, 583.1, 158.4, 580.9, 157.7,
-580.9, 157.7, 578.7, 157.1, 592.9, 148.5, 603.3, 151.5, 606.8, 139.6,
-632.0, 152.8, 632.0, 152.8, 657.2, 166.0, 636.3, 182.6, 620.1, 162.6,
-583.1, 158.4, 657.2, 166.0, 673.1, 174.3, 673.1, 174.3, 689.0, 182.7,
-693.0, 183.9, 691.0, 188.6, 695.0, 192.2, 690.8, 194.8, 687.8, 190.0,
-680.7, 187.9, 666.8, 183.7, 666.8, 183.7, 653.0, 179.5, 623.6, 160.4,
-618.0, 168.9, 583.1, 158.4, 620.1, 162.6, 636.3, 182.6, 657.2, 166.0,
-733.6, 362.1, 732.7, 362.5, 732.7, 362.5, 731.8, 362.9, 690.2, 300.2,
-690.1, 300.2, 645.8, 239.4, 637.4, 227.1, 637.8, 226.9, 629.3, 214.7,
-628.1, 213.3, 628.0, 213.3, 626.8, 212.0, 626.8, 212.0, 626.8, 212.0,
-626.8, 212.0, 632.4, 218.1, 632.4, 218.1, 638.0, 224.2, 638.4, 224.6,
-638.4, 224.6, 638.7, 224.9, 645.6, 232.5, 645.6, 232.5, 652.5, 240.0,
-665.2, 253.8, 665.2, 253.8, 677.8, 267.5, 681.5, 271.6, 681.5, 271.6,
-685.2, 275.6, 685.8, 276.2, 685.8, 276.2, 686.3, 276.8, 688.5, 279.2,
-688.5, 279.2, 690.7, 281.6, 707.9, 306.5, 708.9, 305.7, 727.2, 329.8,
-734.6, 343.7, 731.3, 345.8, 733.6, 362.1, 727.2, 329.8, 737.0, 342.8,
-734.4, 346.0, 746.8, 355.7, 740.2, 358.9, 740.2, 358.9, 733.6, 362.1,
-731.3, 345.8, 734.6, 343.7, 727.2, 329.8, 706.4, 330.7, 717.6, 347.6,
-716.2, 348.6, 728.7, 364.4, 725.4, 366.0, 725.4, 366.0, 722.0, 367.6,
-721.7, 367.9, 720.8, 365.9, 719.2, 365.0, 705.9, 360.5, 707.9, 354.5,
-696.7, 344.0, 687.0, 328.8, 685.1, 330.0, 673.6, 315.9, 675.5, 321.6,
-681.7, 319.5, 689.7, 323.2, 698.1, 326.9, 700.6, 324.6, 706.4, 330.7,
-668.8, 149.5, 679.7, 163.4, 677.9, 165.3, 690.7, 177.3, 674.4, 168.6,
-674.4, 168.6, 658.2, 159.9, 637.3, 162.6, 635.2, 146.2, 612.2, 132.4,
-622.3, 122.5, 643.8, 135.2, 668.8, 149.5, 540.0, 203.6, 544.8, 209.8,
-544.8, 209.8, 549.5, 216.0, 545.7, 212.3, 544.0, 214.0, 538.5, 212.0,
-524.1, 208.3, 524.8, 205.7, 511.1, 199.4, 515.0, 201.9, 516.3, 200.1,
-521.4, 200.9, 530.7, 202.2, 532.3, 199.4, 540.0, 203.6, 493.2, 21.2,
-499.3, 14.5, 500.4, 15.2, 505.4, 7.7, 510.5, 23.9, 510.5, 23.9,
-515.6, 40.0, 515.2, 40.4, 496.9, 33.0, 493.2, 21.2, 515.6, 40.0,
-516.0, 41.4, 516.9, 42.3, 516.5, 42.7, 506.3, 53.8, 506.3, 53.8,
-496.1, 64.9, 491.4, 73.5, 480.3, 65.3, 470.6, 73.3, 465.3, 82.3,
-453.8, 73.5, 444.3, 82.0, 462.3, 58.7, 462.3, 58.7, 480.4, 35.4,
-485.7, 27.5, 486.8, 28.3, 493.2, 21.2, 496.9, 33.0, 515.2, 40.4,
-515.6, 40.0, 587.3, -74.6, 589.1, -80.4, 589.5, -86.3, 590.9, -86.2,
-592.6, -88.4, 597.0, -86.2, 597.6, -88.0, 595.3, -80.4, 593.8, -76.3,
-587.3, -74.6, 279.7, 73.4, 281.6, 75.0, 283.3, 74.8, 283.5, 76.5,
-283.8, 77.5, 283.8, 77.5, 284.2, 78.5, 274.2, 128.6, 273.3, 128.7,
-268.0, 179.5, 266.6, 180.8, 266.6, 180.8, 265.1, 182.1, 265.5, 181.5,
-261.8, 178.5, 258.5, 175.0, 257.9, 162.7, 261.1, 162.6, 263.7, 150.1,
-265.7, 140.4, 265.7, 140.4, 267.7, 130.7, 273.7, 102.0, 271.5, 101.4,
-279.7, 73.4, 353.9, 96.6, 354.4, 104.1, 352.6, 104.8, 354.9, 111.6,
-355.4, 111.8, 354.4, 113.6, 355.1, 114.2, 353.0, 126.2, 350.2, 134.3,
-356.7, 139.2, 357.2, 139.2, 356.9, 141.9, 357.1, 144.7, 353.2, 170.7,
-350.9, 171.1, 352.1, 197.2, 352.7, 194.0, 350.3, 193.8, 349.5, 190.1,
-349.1, 188.4, 349.6, 188.2, 349.7, 186.4, 350.0, 180.1, 350.0, 180.1,
-350.3, 173.8, 352.1, 135.2, 351.1, 135.1, 353.9, 96.6, 336.8, 156.0,
-346.6, 170.8, 343.1, 173.1, 349.5, 190.1, 350.3, 193.8, 352.7, 194.0,
-352.1, 197.2, 352.7, 208.9, 355.7, 209.1, 360.7, 220.3, 357.9, 224.1,
-354.1, 225.8, 355.0, 227.9, 354.5, 228.5, 354.5, 229.1, 354.1, 229.1,
-349.0, 223.4, 336.9, 222.5, 333.8, 226.6, 331.8, 220.7, 331.8, 220.7,
-329.9, 214.9, 330.5, 191.8, 332.6, 191.9, 335.3, 168.8, 336.0, 162.4,
-339.5, 160.1, 336.8, 156.0, 197.4, 398.0, 197.4, 397.9, 195.8, 399.4,
-194.2, 400.8, 190.4, 408.1, 186.9, 405.9, 181.0, 412.4, 185.5, 404.4,
-185.5, 404.4, 190.1, 396.4, 191.7, 394.9, 195.3, 395.7, 197.4, 398.0,
-267.3, 336.5, 274.9, 329.8, 275.2, 330.1, 282.5, 323.1, 243.4, 371.5,
-243.4, 371.5, 204.3, 420.0, 173.8, 423.9, 175.8, 445.4, 149.2, 472.6,
-150.9, 467.6, 150.9, 467.6, 152.7, 462.6, 152.8, 462.2, 153.0, 462.3,
-153.1, 461.8, 156.4, 455.6, 157.1, 456.0, 161.0, 450.1, 211.6, 394.2,
-212.2, 394.7, 263.7, 339.6, 265.4, 339.8, 265.5, 338.1, 267.3, 336.5,
-161.0, 450.1, 177.6, 425.5, 180.4, 426.9, 194.2, 400.8, 195.8, 399.4,
-197.4, 397.9, 197.4, 398.0, 230.6, 368.8, 230.6, 368.8, 263.7, 339.6,
-265.4, 339.8, 265.5, 338.1, 267.3, 336.5, 214.3, 393.5, 219.1, 399.0,
-161.0, 450.1, 182.0, 340.9, 181.9, 342.0, 182.1, 342.0, 181.8, 343.0,
-179.0, 352.7, 179.1, 352.8, 176.4, 362.5, 177.8, 378.3, 163.4, 379.5,
-150.4, 396.6, 158.1, 366.7, 165.8, 368.5, 182.0, 340.9, 606.6, 614.7,
-613.0, 605.6, 611.2, 604.3, 615.8, 594.0, 621.3, 581.5, 619.6, 580.4,
-626.8, 569.1, 625.3, 571.4, 628.0, 572.7, 627.2, 575.8, 626.3, 579.7,
-625.3, 579.5, 623.3, 583.1, 615.0, 598.9, 616.8, 600.2, 606.6, 614.7,
-755.2, 696.0, 759.7, 703.1, 759.7, 703.1, 764.3, 710.3, 750.1, 721.0,
-751.8, 723.2, 739.3, 736.1, 743.2, 733.3, 741.4, 730.8, 743.5, 725.6,
-749.3, 710.8, 744.3, 704.0, 755.2, 696.0, 615.8, 594.0, 611.2, 604.3,
-613.0, 605.6, 606.6, 614.7, 598.3, 633.5, 603.5, 638.6, 590.1, 652.2,
-590.7, 651.6, 585.5, 646.4, 580.9, 640.6, 579.6, 639.0, 579.6, 639.0,
-578.3, 637.3, 577.2, 636.0, 576.0, 635.8, 576.1, 634.6, 576.4, 631.8,
-577.6, 632.0, 579.1, 629.3, 579.9, 628.0, 579.9, 628.0, 580.6, 626.7,
-586.2, 616.8, 583.9, 614.2, 591.8, 606.9, 601.4, 597.9, 609.1, 590.4,
-615.8, 594.0, 591.8, 606.9, 587.9, 600.6, 599.4, 593.4, 607.0, 580.0,
-621.3, 554.7, 618.1, 552.2, 635.6, 529.4, 635.9, 529.0, 641.7, 530.6,
-642.5, 533.4, 643.4, 536.7, 640.7, 537.4, 639.0, 541.4, 632.9, 555.2,
-632.9, 555.2, 626.8, 569.1, 619.6, 580.4, 621.3, 581.5, 615.8, 594.0,
-609.1, 590.4, 601.4, 597.9, 591.8, 606.9, 576.4, 460.9, 575.7, 454.1,
-572.0, 449.9, 574.9, 447.3, 576.1, 442.9, 576.8, 438.4, 577.4, 438.4,
-578.4, 438.1, 577.9, 436.5, 578.5, 434.6, 598.0, 464.0, 628.7, 470.0,
-623.1, 489.8, 630.0, 500.6, 631.2, 500.0, 636.9, 511.4, 637.2, 511.8,
-637.6, 512.1, 637.5, 512.3, 637.5, 512.3, 637.5, 512.3, 637.5, 512.3,
-607.0, 486.6, 604.0, 489.4, 576.4, 460.9, 637.5, 512.3, 639.7, 515.7,
-639.7, 515.7, 641.9, 519.1, 649.1, 530.3, 655.8, 530.1, 656.3, 541.6,
-656.1, 537.2, 649.4, 537.5, 642.5, 533.4, 641.7, 530.6, 635.9, 529.0,
-635.6, 529.4, 620.6, 520.5, 620.6, 520.5, 605.6, 511.6, 602.6, 509.9,
-602.6, 509.9, 599.7, 508.2, 590.1, 502.5, 584.7, 505.2, 580.6, 496.9,
-583.0, 479.5, 578.5, 478.9, 576.4, 460.9, 610.9, 469.7, 606.8, 486.0,
-636.9, 511.4, 637.2, 511.8, 637.6, 512.1, 637.5, 512.3, 637.5, 512.3,
-637.5, 512.3, 637.5, 512.3, 573.7, 767.7, 573.8, 767.6, 575.8, 769.6,
-575.5, 770.6, 574.2, 774.0, 573.6, 774.5, 570.5, 776.6, 557.9, 782.0,
-558.4, 783.3, 546.4, 789.9, 553.7, 788.1, 552.8, 784.7, 559.2, 779.4,
-566.5, 773.6, 565.6, 772.1, 573.7, 767.7, 595.9, 745.9, 603.8, 735.1,
-604.5, 735.6, 613.0, 725.3, 621.9, 714.5, 620.4, 712.7, 630.9, 703.8,
-630.8, 703.8, 632.3, 705.6, 633.8, 707.5, 634.9, 708.8, 636.2, 709.4,
-635.9, 710.2, 634.5, 713.3, 633.1, 712.6, 630.4, 715.1, 623.2, 721.6,
-623.2, 721.6, 616.0, 728.0, 609.7, 733.6, 609.7, 733.6, 603.4, 739.3,
-602.5, 740.0, 602.5, 740.0, 601.6, 740.8, 598.8, 743.4, 598.1, 742.9,
-595.9, 745.9, 545.8, 831.4, 545.8, 831.4, 550.9, 851.6, 556.0, 871.7,
-556.0, 871.9, 556.0, 871.9, 556.1, 872.2, 556.7, 874.7, 556.7, 874.7,
-557.4, 877.2, 557.6, 878.3, 557.7, 879.4, 557.9, 879.4, 539.7, 881.0,
-522.2, 884.3, 521.2, 880.5, 516.2, 860.4, 528.4, 835.8, 545.8, 831.4,
-521.2, 880.5, 518.2, 884.3, 506.9, 883.2, 506.1, 880.9, 511.1, 866.3,
-508.0, 865.3, 510.0, 849.6, 521.3, 851.8, 525.4, 830.9, 540.9, 812.3,
-538.9, 813.6, 542.7, 819.2, 544.4, 826.1, 544.5, 826.3, 544.5, 826.3,
-544.5, 826.6, 545.2, 829.0, 546.6, 829.6, 545.8, 831.4, 528.4, 835.8,
-516.2, 860.4, 521.2, 880.5, 501.0, 479.8, 509.2, 464.3, 517.2, 464.4,
-517.4, 448.8, 528.2, 446.9, 528.2, 446.9, 539.0, 445.1, 538.5, 445.1,
-538.5, 445.4, 538.1, 445.8, 529.7, 453.6, 529.7, 453.6, 521.2, 461.3,
-511.1, 470.5, 499.2, 474.1, 501.0, 479.8, 513.3, 575.9, 493.5, 628.7,
-492.4, 628.3, 473.7, 681.5, 473.3, 677.4, 473.3, 677.4, 472.9, 673.2,
-478.0, 656.7, 479.6, 657.2, 486.2, 641.2, 499.8, 608.6, 502.9, 609.6,
-513.3, 575.9, 495.3, 627.2, 497.7, 601.0, 504.3, 601.6, 513.3, 575.9,
-514.3, 573.4, 514.3, 573.5, 515.2, 571.0, 516.1, 568.5, 516.1, 568.5,
-517.0, 566.1, 517.1, 566.1, 517.6, 565.4, 517.5, 564.7, 519.4, 590.9,
-515.0, 592.1, 521.3, 617.1, 514.9, 633.7, 506.3, 648.9, 508.5, 650.2,
-506.8, 653.2, 507.2, 653.4, 506.0, 656.7, 498.3, 643.3, 494.0, 641.4,
-495.3, 627.2, 506.0, 656.7, 495.0, 685.1, 490.1, 684.0, 484.0, 713.4,
-484.7, 720.8, 478.3, 721.1, 478.0, 728.9, 471.0, 709.9, 470.8, 707.1,
-474.2, 687.1, 485.9, 657.6, 484.8, 657.2, 495.3, 627.2, 494.0, 641.4,
-498.3, 643.3, 506.0, 656.7, 445.1, 359.6, 446.0, 352.4, 448.3, 351.9,
-446.9, 345.2, 449.8, 331.0, 448.7, 330.7, 450.6, 316.3, 452.2, 318.3,
-453.6, 317.2, 456.6, 318.0, 457.2, 318.6, 456.1, 319.7, 455.6, 321.4,
-451.7, 335.6, 451.7, 335.6, 447.8, 349.9, 446.4, 354.8, 444.3, 355.2,
-445.1, 359.6, 158.8, 562.8, 158.5, 560.6, 157.7, 560.5, 158.2, 558.4,
-158.5, 556.2, 157.8, 556.1, 157.5, 553.7, 156.4, 553.2, 158.4, 549.0,
-159.2, 544.2, 160.5, 553.3, 159.4, 553.5, 158.8, 562.8, 418.2, 496.4,
-418.2, 496.3, 418.2, 496.3, 418.3, 496.3, 418.3, 496.3, 418.3, 496.3,
-418.3, 496.4, 418.3, 496.4, 418.2, 496.4, 418.2, 496.4, 379.0, 658.0,
-380.1, 653.4, 380.1, 653.4, 381.3, 648.8, 391.3, 646.7, 392.2, 650.9,
-403.1, 653.0, 407.3, 653.8, 411.0, 652.7, 411.6, 654.6, 410.7, 664.7,
-410.7, 664.7, 409.9, 674.8, 395.5, 676.3, 391.6, 669.5, 379.0, 658.0,
-409.9, 674.8, 408.8, 688.1, 411.8, 689.1, 407.6, 701.4, 407.5, 703.4,
-407.5, 703.4, 407.3, 705.4, 406.9, 710.5, 406.9, 710.5, 406.5, 715.6,
-406.4, 715.7, 406.4, 715.7, 406.4, 715.8, 406.3, 717.1, 406.0, 718.3,
-406.2, 718.4, 395.6, 705.4, 385.7, 702.3, 369.0, 705.6, 368.3, 705.3,
-367.7, 704.7, 367.8, 704.1, 372.0, 686.8, 377.1, 669.7, 376.3, 669.4,
-378.0, 667.1, 378.7, 665.6, 377.7, 663.3, 376.7, 661.9, 378.4, 660.7,
-379.0, 658.0, 391.6, 669.5, 395.5, 676.3, 409.9, 674.8, 442.5, 452.2,
-443.4, 445.8, 444.3, 445.8, 444.3, 439.3, 445.1, 452.6, 444.2, 452.7,
-445.8, 465.9, 448.0, 480.4, 446.7, 480.6, 447.6, 495.3, 448.0, 501.2,
-447.9, 501.2, 448.3, 507.2, 450.3, 533.5, 449.9, 533.5, 451.5, 559.9,
-451.9, 567.7, 451.9, 567.7, 452.4, 575.5, 452.6, 578.7, 452.6, 578.7,
-452.8, 581.9, 452.2, 585.4, 451.5, 585.3, 450.2, 588.8, 447.3, 596.8,
-443.2, 597.4, 444.3, 604.8, 439.9, 575.1, 444.0, 574.5, 443.6, 544.2,
-443.0, 498.2, 442.2, 498.2, 442.5, 452.2, 363.4, 734.1, 364.4, 724.0,
-361.6, 722.8, 365.4, 714.0, 365.5, 713.7, 365.5, 713.7, 365.5, 713.5,
-366.7, 708.8, 366.7, 708.8, 367.8, 704.1, 367.7, 704.7, 368.3, 705.3,
-369.0, 705.6, 374.3, 704.6, 376.1, 714.2, 383.3, 722.9, 381.6, 737.4,
-393.1, 738.7, 403.0, 754.5, 402.3, 755.6, 388.1, 746.8, 373.2, 739.2,
-368.3, 736.6, 364.5, 737.8, 363.4, 734.1, 382.3, 243.1, 380.0, 227.2,
-380.0, 227.2, 377.8, 211.3, 383.6, 206.3, 383.0, 205.7, 388.3, 200.2,
-392.4, 214.6, 386.1, 216.4, 383.8, 232.7, 383.0, 237.9, 381.0, 238.5,
-382.3, 243.1, 262.2, 528.4, 258.2, 543.6, 259.6, 544.0, 257.0, 559.6,
-255.0, 571.8, 255.0, 571.8, 252.9, 584.1, 247.6, 616.0, 247.6, 616.0,
-242.3, 647.9, 241.0, 655.3, 243.6, 657.0, 239.8, 662.8, 239.7, 665.9,
-234.0, 665.8, 228.3, 668.9, 240.2, 597.8, 243.9, 598.3, 262.2, 528.4,
-228.3, 668.9, 225.1, 670.6, 221.9, 670.5, 221.9, 672.3, 221.3, 662.2,
-223.9, 661.3, 220.8, 652.1, 226.3, 633.0, 226.4, 633.0, 231.9, 614.0,
-250.7, 549.3, 247.1, 548.0, 269.5, 484.6, 262.2, 505.2, 267.1, 506.8,
-262.2, 528.4, 243.9, 598.3, 240.2, 597.8, 228.3, 668.9, 212.2, 827.7,
-217.9, 793.6, 217.9, 793.6, 223.6, 759.5, 229.3, 760.1, 229.9, 753.5,
-236.2, 747.4, 233.8, 748.3, 235.0, 751.5, 233.8, 755.6, 232.7, 759.2,
-232.7, 759.2, 231.7, 762.7, 221.9, 795.2, 209.5, 826.6, 212.2, 827.7,
-252.9, 584.1, 255.0, 571.8, 255.0, 571.8, 257.0, 559.6, 255.6, 564.2,
-257.2, 564.7, 257.4, 569.9, 257.5, 573.8, 257.5, 573.8, 257.6, 577.7,
-258.6, 606.4, 272.9, 617.1, 259.5, 635.1, 270.6, 620.2, 253.8, 609.7,
-252.9, 584.1, 354.7, 534.6, 362.3, 542.1, 362.3, 542.1, 370.0, 549.5,
-371.9, 552.9, 369.4, 554.3, 368.8, 559.1, 364.9, 589.4, 368.6, 590.3,
-361.0, 619.6, 363.8, 608.6, 360.1, 607.6, 359.2, 595.6, 358.0, 579.6,
-358.0, 579.6, 356.8, 563.5, 356.1, 553.6, 356.1, 553.6, 355.4, 543.6,
-355.0, 539.1, 356.5, 535.4, 354.7, 534.6, 368.8, 559.1, 369.4, 554.3,
-371.9, 552.9, 370.0, 549.5, 373.2, 552.6, 376.3, 552.5, 376.5, 555.8,
-376.5, 556.1, 376.7, 556.1, 377.0, 556.3, 373.0, 558.1, 370.2, 560.5,
-368.8, 559.1, 386.0, 524.0, 348.2, 504.2, 343.2, 510.4, 310.5, 484.3,
-301.3, 479.0, 302.0, 476.9, 292.1, 473.7, 287.7, 470.6, 288.2, 469.9,
-284.3, 466.1, 282.0, 463.9, 282.5, 463.1, 279.8, 461.8, 294.6, 469.4,
-294.1, 470.2, 308.5, 478.6, 314.9, 482.3, 314.9, 482.3, 321.3, 486.1,
-353.7, 505.1, 351.5, 518.3, 386.0, 524.0, 355.0, 294.4, 350.3, 267.3,
-353.6, 266.3, 345.7, 240.1, 349.9, 234.6, 355.0, 230.2, 354.1, 229.1,
-354.5, 229.1, 354.5, 228.5, 355.0, 227.9, 367.7, 256.8, 363.9, 266.8,
-387.9, 282.3, 389.9, 289.5, 392.0, 289.0, 396.0, 295.6, 396.2, 296.0,
-396.1, 296.0, 396.1, 296.5, 375.5, 295.8, 364.6, 305.2, 355.0, 294.4,
-396.1, 296.5, 398.5, 311.6, 393.5, 314.7, 400.9, 326.8, 392.4, 326.4,
-390.1, 329.9, 384.0, 325.9, 377.6, 325.6, 375.1, 328.5, 371.2, 325.2,
-363.8, 314.1, 363.8, 314.1, 356.4, 303.0, 353.9, 300.6, 355.7, 298.7,
-355.0, 294.4, 364.6, 305.2, 375.5, 295.8, 396.1, 296.5, 437.6, 403.3,
-437.5, 403.4, 432.1, 404.9, 429.5, 402.8, 423.1, 391.0, 420.4, 392.5,
-411.3, 382.1, 410.7, 388.7, 420.7, 389.6, 430.0, 397.2, 433.8, 400.3,
-437.8, 400.6, 437.6, 403.3, 325.6, 322.0, 326.6, 319.9, 326.6, 319.9,
-327.5, 317.9, 341.1, 338.4, 353.4, 336.2, 381.6, 341.0, 386.2, 343.5,
-389.5, 348.0, 388.2, 350.8, 383.4, 361.2, 378.8, 359.0, 369.4, 367.2,
-365.1, 371.0, 364.9, 374.9, 360.7, 374.8, 357.9, 374.7, 358.1, 370.8,
-355.4, 366.8, 346.5, 353.4, 346.5, 353.4, 337.7, 340.1, 331.6, 331.0,
-330.1, 331.7, 325.6, 322.0, 420.5, 402.3, 415.5, 395.5, 407.1, 401.5,
-393.7, 400.8, 370.0, 392.8, 367.3, 394.6, 342.0, 397.7, 340.5, 399.4,
-338.5, 397.5, 334.9, 397.3, 334.6, 396.8, 337.2, 395.3, 339.5, 393.3,
-341.5, 391.6, 341.5, 391.6, 343.5, 389.8, 352.1, 382.3, 352.1, 382.3,
-360.7, 374.8, 364.9, 374.9, 365.1, 371.0, 369.4, 367.2, 397.1, 380.0,
-403.3, 378.7, 420.5, 402.3, 369.4, 367.2, 378.8, 359.0, 383.4, 361.2,
-388.2, 350.8, 388.6, 350.6, 390.1, 353.7, 392.0, 356.6, 396.6, 363.6,
-396.6, 363.6, 401.3, 370.6, 410.4, 387.3, 409.9, 388.2, 422.4, 402.4,
-422.1, 402.0, 421.2, 402.8, 420.5, 402.3, 403.3, 378.7, 397.1, 380.0,
-369.4, 367.2, 381.9, 411.1, 387.8, 405.9, 390.0, 399.5, 393.7, 400.8,
-407.1, 401.5, 415.5, 395.5, 420.5, 402.3, 421.2, 402.8, 422.1, 402.0,
-422.4, 402.4, 424.0, 404.3, 428.6, 401.2, 429.5, 402.8, 432.1, 404.9,
-437.5, 403.4, 437.6, 403.3, 439.2, 403.4, 440.7, 403.7, 440.8, 403.5,
-436.2, 422.4, 436.2, 422.4, 431.6, 441.3, 431.6, 441.2, 431.5, 441.2,
-431.3, 441.1, 421.1, 434.9, 421.1, 434.9, 410.9, 428.7, 396.4, 419.9,
-389.8, 423.9, 381.9, 411.1, 226.5, 544.9, 227.1, 537.3, 227.1, 537.3,
-227.6, 529.8, 242.2, 506.7, 239.7, 505.1, 251.8, 480.4, 251.0, 482.0,
-251.2, 482.0, 250.5, 483.7, 242.6, 503.9, 242.6, 503.9, 234.6, 524.2,
-230.6, 534.6, 234.1, 539.0, 226.5, 544.9, 68.6, 177.8, 85.9, 216.5,
-115.4, 232.0, 103.2, 255.3, 104.5, 259.8, 104.5, 259.8, 105.7, 264.3,
-105.7, 264.1, 105.7, 264.1, 105.6, 264.0, 103.7, 259.7, 103.7, 259.7,
-101.9, 255.4, 85.3, 216.6, 82.1, 176.7, 68.6, 177.8, 685.5, 569.3,
-683.3, 569.5, 683.3, 569.5, 681.0, 569.7, 673.6, 557.2, 671.3, 558.6,
-661.6, 547.5, 672.6, 546.6, 674.9, 557.2, 685.5, 569.3, 702.7, 480.0,
-702.5, 483.1, 702.5, 483.1, 702.3, 486.2, 700.5, 484.1, 694.7, 489.0,
-687.0, 491.8, 687.5, 485.4, 693.9, 483.3, 702.7, 480.0, 857.0, 143.8,
-836.9, 149.9, 832.1, 143.9, 816.9, 156.1, 811.6, 152.0, 811.6, 152.0,
-806.2, 148.0, 830.0, 140.7, 841.8, 132.4, 857.0, 143.8, 792.8, 174.5,
-792.8, 174.5, 795.0, 176.8, 797.2, 179.1, 799.7, 181.7, 799.7, 181.7,
-802.1, 184.2, 802.4, 184.5, 802.4, 184.5, 802.7, 184.8, 809.4, 191.8,
-809.4, 191.8, 816.1, 198.8, 816.8, 199.5, 816.8, 199.5, 817.5, 200.3,
-850.9, 235.1, 853.6, 232.9, 884.2, 269.9, 875.7, 265.1, 875.7, 265.1,
-867.2, 260.3, 832.9, 224.5, 835.0, 222.5, 802.7, 184.8, 802.4, 184.5,
-802.4, 184.5, 802.1, 184.2, 799.7, 181.7, 799.7, 181.7, 797.2, 179.1,
-795.0, 176.8, 792.8, 174.5, 792.8, 174.5, 867.2, 260.3, 842.6, 246.4,
-842.6, 246.4, 817.9, 232.4, 799.6, 193.6, 800.5, 192.0, 774.9, 157.7,
-773.6, 155.2, 773.5, 155.3, 772.0, 152.8, 783.0, 163.0, 782.9, 163.3,
-792.8, 174.5, 830.4, 217.0, 845.6, 210.6, 867.2, 260.3, 797.2, 179.1,
-795.0, 176.8, 792.8, 174.5, 792.8, 174.5, 782.9, 163.3, 783.0, 163.0,
-772.0, 152.8, 768.7, 147.1, 766.1, 141.1, 765.4, 141.4, 766.5, 139.8,
-764.2, 135.2, 761.4, 134.3, 760.9, 134.2, 761.0, 133.7, 760.7, 133.2,
-767.4, 139.3, 771.4, 135.0, 782.2, 136.8, 798.9, 152.6, 801.2, 150.2,
-820.2, 163.7, 821.3, 166.9, 809.8, 174.1, 797.2, 179.1, 701.9, 194.3,
-712.7, 197.5, 715.9, 194.0, 723.5, 200.8, 762.4, 221.2, 762.4, 221.2,
-801.3, 241.7, 802.0, 241.9, 799.9, 248.5, 798.5, 255.3, 795.0, 256.8,
-792.7, 251.7, 787.0, 248.0, 786.8, 247.9, 786.8, 247.9, 786.5, 247.7,
-784.3, 246.3, 784.3, 246.3, 782.1, 244.9, 769.7, 237.1, 769.7, 237.1,
-757.4, 229.3, 757.4, 229.3, 757.4, 229.3, 757.4, 229.3, 729.6, 211.8,
-726.8, 215.2, 701.9, 194.3, 626.8, 212.0, 636.0, 225.9, 636.5, 225.5,
-645.8, 239.4, 667.0, 268.4, 665.7, 269.4, 685.6, 299.3, 655.5, 256.1,
-655.9, 255.9, 626.8, 212.0, 635.9, 116.5, 646.2, 125.1, 646.2, 125.1,
-656.5, 133.7, 657.2, 142.1, 662.6, 141.6, 668.8, 149.5, 643.8, 135.2,
-622.3, 122.5, 612.2, 132.4, 593.2, 121.1, 593.2, 121.1, 574.2, 109.7,
-572.8, 107.4, 572.2, 107.5, 569.8, 106.0, 580.0, 103.8, 580.0, 103.8,
-590.2, 101.6, 613.7, 105.4, 614.5, 106.1, 635.9, 116.5, 590.2, 101.6,
-600.3, 99.5, 600.3, 99.5, 610.4, 97.3, 613.6, 104.6, 618.0, 102.6,
-625.6, 107.8, 631.3, 111.2, 630.8, 112.2, 635.9, 116.5, 614.5, 106.1,
-613.7, 105.4, 590.2, 101.6, 499.3, 193.9, 476.5, 183.3, 477.3, 175.2,
-453.6, 172.7, 441.0, 164.6, 441.0, 164.6, 428.4, 156.5, 457.3, 169.0,
-456.3, 171.2, 484.2, 186.0, 491.8, 189.9, 491.5, 190.5, 499.3, 193.9,
-601.4, 22.8, 597.4, 24.3, 593.3, 25.3, 593.4, 25.8, 591.9, 23.2,
-590.0, 21.0, 590.4, 20.7, 590.7, 20.3, 589.6, 19.4, 588.8, 18.1,
-595.3, 19.3, 598.7, 18.3, 601.4, 22.8, 276.3, 70.7, 278.0, 72.0,
-278.0, 72.0, 279.7, 73.4, 271.5, 101.4, 273.7, 102.0, 267.7, 130.7,
-255.6, 120.9, 270.1, 100.3, 276.3, 70.7, 349.7, 186.4, 349.6, 188.2,
-349.1, 188.4, 349.5, 190.1, 343.1, 173.1, 346.6, 170.8, 336.8, 156.0,
-330.5, 139.2, 331.3, 138.9, 324.3, 122.5, 337.7, 154.1, 337.7, 154.2,
-349.7, 186.4, 335.3, 168.8, 332.6, 191.9, 330.5, 191.8, 329.9, 214.9,
-320.4, 186.5, 320.4, 186.5, 310.9, 158.1, 305.7, 151.6, 309.6, 148.5,
-308.3, 138.9, 325.1, 146.3, 330.3, 151.4, 335.3, 168.8, 308.3, 138.9,
-306.7, 127.1, 310.9, 124.6, 305.2, 115.3, 310.1, 106.4, 310.1, 106.4,
-315.0, 97.6, 323.2, 100.7, 319.7, 110.0, 324.3, 122.5, 331.3, 138.9,
-330.5, 139.2, 336.8, 156.0, 339.5, 160.1, 336.0, 162.4, 335.3, 168.8,
-330.3, 151.4, 325.1, 146.3, 308.3, 138.9, 263.7, 336.2, 263.7, 337.9,
-263.6, 339.6, 263.7, 339.6, 230.6, 368.8, 230.6, 368.8, 197.4, 398.0,
-195.3, 395.7, 191.7, 394.9, 190.1, 396.4, 202.0, 375.3, 211.2, 376.4,
-213.9, 354.1, 213.9, 354.1, 214.0, 354.0, 214.0, 353.9, 238.8, 344.9,
-238.4, 343.4, 263.7, 336.2, 214.0, 353.9, 226.4, 331.9, 237.8, 332.4,
-238.9, 309.9, 240.5, 309.0, 240.7, 308.1, 241.0, 306.0, 252.2, 300.0,
-252.2, 300.0, 263.4, 293.9, 259.6, 314.3, 263.6, 315.1, 263.7, 336.2,
-238.4, 343.4, 238.8, 344.9, 214.0, 353.9, 150.0, 380.7, 152.0, 345.3,
-158.2, 344.5, 154.0, 309.9, 154.8, 305.8, 154.8, 305.8, 155.7, 301.6,
-155.8, 301.9, 157.5, 301.0, 159.2, 300.4, 157.2, 333.4, 155.5, 333.2,
-151.7, 366.1, 150.8, 373.4, 150.3, 373.4, 150.0, 380.7, 591.4, 653.9,
-591.6, 653.5, 589.9, 652.7, 590.1, 652.2, 603.5, 638.6, 598.3, 633.5,
-606.6, 614.7, 616.8, 600.2, 615.0, 598.9, 623.3, 583.1, 612.9, 586.0,
-616.4, 598.5, 609.4, 614.0, 600.4, 633.9, 601.3, 634.3, 591.4, 653.9,
-607.0, 580.0, 599.4, 593.4, 587.9, 600.6, 591.8, 606.9, 583.9, 614.2,
-586.2, 616.8, 580.6, 626.7, 575.6, 621.5, 580.0, 612.0, 586.2, 601.1,
-593.2, 588.6, 607.2, 580.2, 607.0, 580.0, 586.2, 601.1, 582.8, 599.4,
-589.3, 586.8, 592.4, 572.5, 593.4, 567.5, 593.4, 567.5, 594.5, 562.6,
-599.8, 538.4, 599.8, 538.4, 605.0, 514.1, 605.3, 512.9, 605.8, 511.8,
-605.6, 511.6, 620.6, 520.5, 620.6, 520.5, 635.6, 529.4, 618.1, 552.2,
-621.3, 554.7, 607.0, 580.0, 607.2, 580.2, 593.2, 588.6, 586.2, 601.1,
-523.8, 737.3, 526.4, 716.5, 526.4, 716.5, 529.0, 695.8, 528.6, 697.6,
-530.3, 697.9, 531.6, 700.1, 538.0, 710.4, 538.1, 710.3, 544.4, 720.7,
-544.4, 720.7, 544.4, 720.7, 544.4, 720.7, 534.1, 729.0, 523.0, 735.9,
-523.8, 737.3, 573.1, 676.7, 567.3, 670.3, 574.9, 663.4, 576.6, 650.0,
-576.6, 649.8, 576.6, 649.8, 576.7, 649.6, 577.5, 643.4, 575.7, 642.6,
-578.3, 637.3, 579.6, 639.0, 579.6, 639.0, 580.9, 640.6, 581.0, 646.3,
-579.7, 646.3, 578.4, 652.1, 575.8, 664.4, 568.2, 671.3, 573.1, 676.7,
-536.3, 636.7, 537.3, 627.8, 537.3, 627.8, 538.4, 619.0, 537.6, 618.0,
-551.4, 612.5, 552.4, 604.6, 552.6, 604.5, 553.8, 606.4, 555.2, 608.1,
-563.2, 618.2, 573.3, 624.9, 571.1, 628.3, 563.9, 639.2, 551.3, 641.0,
-536.3, 636.7, 549.3, 443.5, 552.8, 465.2, 544.2, 472.5, 556.3, 486.9,
-555.7, 487.9, 555.3, 487.8, 555.0, 488.9, 553.7, 495.1, 551.2, 494.6,
-547.5, 500.3, 547.7, 500.0, 547.5, 499.8, 547.5, 499.4, 547.6, 497.4,
-547.6, 497.4, 547.6, 495.4, 547.8, 490.8, 547.8, 490.8, 547.9, 486.2,
-548.0, 483.4, 548.0, 483.4, 548.1, 480.6, 548.7, 462.0, 557.9, 450.1,
-549.3, 443.5, 517.0, 564.6, 517.0, 565.3, 516.8, 566.1, 517.0, 566.1,
-516.1, 568.5, 516.1, 568.5, 515.2, 571.0, 514.3, 573.5, 514.3, 573.4,
-513.3, 575.9, 502.9, 609.6, 499.8, 608.6, 486.2, 641.2, 493.4, 624.6,
-492.9, 624.4, 499.7, 607.6, 508.3, 586.1, 508.0, 586.0, 517.0, 564.6,
-469.6, 385.7, 466.8, 389.5, 464.2, 393.4, 463.9, 393.2, 459.0, 391.3,
-455.0, 392.5, 454.1, 389.4, 452.7, 386.4, 452.7, 386.4, 451.3, 383.3,
-452.5, 381.9, 454.8, 383.8, 458.3, 384.2, 463.9, 385.0, 467.7, 382.6,
-469.6, 385.7, 396.3, 586.8, 397.2, 582.8, 397.3, 582.8, 398.2, 578.9,
-398.4, 578.1, 398.4, 578.1, 398.6, 577.3, 409.8, 571.4, 405.2, 559.0,
-407.6, 540.2, 413.0, 527.4, 419.1, 522.3, 414.3, 512.8, 411.6, 510.8,
-416.2, 504.6, 418.2, 496.4, 418.2, 496.4, 418.3, 496.4, 418.3, 496.4,
-419.0, 502.7, 419.0, 502.7, 419.7, 509.1, 410.4, 547.4, 408.3, 546.9,
-396.9, 584.7, 396.6, 585.7, 396.5, 585.7, 396.3, 586.8, 406.5, 715.6,
-406.9, 710.5, 406.9, 710.5, 407.3, 705.4, 414.6, 682.2, 422.2, 683.1,
-424.1, 659.7, 421.7, 688.2, 416.6, 688.1, 406.5, 715.6, 425.5, 707.4,
-429.7, 691.9, 428.8, 691.6, 432.1, 675.9, 441.2, 632.3, 440.7, 632.2,
-450.2, 588.8, 451.5, 585.3, 452.2, 585.4, 452.8, 581.9, 453.1, 588.3,
-453.1, 588.3, 453.5, 594.6, 451.7, 607.4, 450.4, 607.2, 447.3, 619.8,
-436.4, 663.6, 437.3, 663.9, 425.5, 707.4, 421.8, 600.0, 432.1, 526.1,
-432.1, 526.1, 442.5, 452.2, 442.2, 498.2, 443.0, 498.2, 443.6, 544.2,
-443.5, 549.1, 441.7, 549.1, 439.7, 554.0, 430.8, 577.0, 422.4, 576.8,
-421.8, 600.0, 450.1, 848.6, 452.0, 854.6, 455.4, 855.6, 453.9, 860.5,
-453.3, 865.0, 453.3, 865.0, 452.6, 869.4, 442.1, 862.3, 444.4, 858.9,
-436.1, 848.5, 428.4, 838.7, 428.5, 829.0, 420.7, 828.9, 435.5, 829.1,
-437.5, 836.6, 450.1, 848.6, 365.7, 852.2, 362.7, 811.2, 363.7, 811.1,
-359.7, 770.2, 360.0, 767.1, 360.0, 767.1, 360.3, 764.1, 361.6, 774.6,
-361.0, 774.7, 361.6, 785.4, 363.7, 818.8, 361.5, 819.0, 365.7, 852.2,
-444.9, 882.7, 427.4, 888.3, 425.7, 884.8, 406.6, 883.8, 405.1, 880.8,
-402.4, 882.1, 398.3, 880.4, 394.0, 872.0, 396.6, 870.7, 395.0, 861.0,
-392.2, 844.6, 396.7, 830.6, 389.3, 828.2, 417.3, 837.2, 412.8, 851.2,
-436.3, 874.3, 440.6, 878.5, 442.2, 883.6, 444.9, 882.7, 416.0, 171.3,
-416.1, 171.1, 416.3, 171.1, 416.3, 171.0, 417.8, 183.6, 417.8, 183.6,
-419.4, 196.3, 421.3, 210.6, 421.0, 210.6, 422.5, 225.0, 417.7, 260.8,
-417.2, 261.1, 417.5, 297.2, 417.2, 296.7, 417.2, 296.7, 416.8, 296.1,
-416.0, 242.1, 416.4, 242.1, 416.1, 188.1, 416.0, 179.7, 415.9, 179.7,
-416.0, 171.3, 346.4, 641.2, 353.1, 634.7, 353.5, 635.0, 359.8, 628.3,
-359.0, 628.9, 359.6, 629.7, 359.5, 631.2, 359.1, 633.6, 359.1, 633.6,
-358.8, 636.1, 358.4, 641.9, 355.7, 641.6, 355.0, 647.4, 355.3, 654.7,
-350.7, 654.7, 349.9, 662.3, 349.7, 664.6, 349.1, 664.5, 348.4, 666.8,
-346.5, 658.6, 347.7, 658.4, 347.1, 650.0, 346.8, 645.6, 344.6, 644.3,
-346.4, 641.2, 261.3, 688.3, 264.5, 698.4, 267.0, 702.9, 262.0, 710.4,
-244.4, 725.4, 243.2, 724.1, 226.8, 740.4, 233.3, 701.6, 239.0, 701.7,
-239.8, 662.8, 243.6, 657.0, 241.0, 655.3, 242.3, 647.9, 256.2, 664.4,
-254.6, 667.2, 261.3, 688.3, 242.3, 647.9, 247.6, 616.0, 247.6, 616.0,
-252.9, 584.1, 253.8, 609.7, 270.6, 620.2, 259.5, 635.1, 259.7, 636.7,
-259.6, 636.7, 259.6, 638.3, 260.0, 649.2, 260.0, 649.2, 260.4, 660.1,
-260.4, 662.7, 260.4, 662.7, 260.5, 665.3, 260.8, 672.8, 260.8, 672.8,
-261.0, 680.4, 261.2, 684.4, 259.5, 685.3, 261.3, 688.3, 254.6, 667.2,
-256.2, 664.4, 242.3, 647.9, 306.5, 803.3, 314.5, 784.8, 318.0, 785.6,
-322.6, 766.3, 330.7, 778.5, 327.5, 784.7, 338.9, 790.7, 338.4, 794.6,
-338.4, 794.6, 337.9, 798.5, 323.4, 804.1, 308.4, 807.4, 306.5, 803.3,
-337.9, 798.5, 337.2, 803.9, 337.2, 803.9, 336.5, 809.4, 321.1, 829.8,
-319.0, 828.2, 301.5, 847.1, 290.0, 859.4, 292.5, 867.4, 278.5, 871.8,
-284.4, 870.0, 281.3, 861.8, 285.2, 852.2, 291.3, 826.7, 295.8, 827.8,
-306.5, 803.3, 308.4, 807.4, 323.4, 804.1, 337.9, 798.5, 301.5, 847.1,
-319.0, 828.2, 321.1, 829.8, 336.5, 809.4, 333.6, 832.1, 337.9, 833.6,
-330.6, 854.9, 330.0, 857.6, 330.6, 857.7, 329.9, 860.4, 329.5, 862.2,
-329.5, 862.2, 329.0, 864.1, 314.4, 857.3, 300.6, 853.6, 301.5, 847.1,
-329.0, 864.1, 326.7, 873.5, 320.9, 879.5, 324.4, 882.9, 302.3, 890.3,
-299.7, 883.1, 275.0, 882.2, 275.2, 882.2, 275.2, 881.7, 275.3, 881.2,
-276.9, 876.5, 275.7, 875.5, 278.5, 871.8, 292.5, 867.4, 290.0, 859.4,
-301.5, 847.1, 300.6, 853.6, 314.4, 857.3, 329.0, 864.1, 398.2, 578.9,
-397.3, 582.8, 397.2, 582.8, 396.3, 586.8, 394.8, 593.0, 394.8, 593.0,
-393.3, 599.3, 389.1, 616.4, 395.5, 622.4, 385.0, 633.5, 378.5, 627.5,
-373.8, 632.5, 362.7, 631.5, 369.7, 602.6, 379.2, 604.2, 398.2, 578.9,
-362.7, 631.5, 361.1, 631.4, 359.8, 632.0, 359.5, 631.2, 359.5, 631.2,
-359.5, 631.2, 359.5, 631.2, 359.6, 629.7, 359.0, 628.9, 359.8, 628.3,
-360.2, 627.9, 359.6, 627.2, 360.0, 626.8, 360.5, 623.2, 360.5, 623.2,
-361.0, 619.6, 368.6, 590.3, 364.9, 589.4, 368.8, 559.1, 370.2, 560.5,
-373.0, 558.1, 377.0, 556.3, 387.8, 566.8, 394.5, 579.5, 398.6, 577.3,
-398.4, 578.1, 398.4, 578.1, 398.2, 578.9, 379.2, 604.2, 369.7, 602.6,
-362.7, 631.5, 374.9, 477.0, 387.8, 504.4, 387.8, 504.4, 400.7, 531.7,
-394.3, 526.7, 393.3, 527.9, 386.0, 524.0, 351.5, 518.3, 353.7, 505.1,
-321.3, 486.1, 322.1, 486.6, 322.6, 485.9, 323.8, 485.7, 332.3, 484.2,
-332.3, 484.2, 340.7, 482.8, 347.2, 481.7, 347.2, 481.7, 353.6, 480.6,
-364.3, 478.8, 371.0, 472.7, 374.9, 477.0, 430.0, 397.2, 420.7, 389.6,
-410.7, 388.7, 411.3, 382.1, 406.3, 376.3, 404.8, 377.1, 401.3, 370.6,
-396.6, 363.6, 396.6, 363.6, 392.0, 356.6, 406.4, 368.4, 404.9, 370.3,
-417.7, 384.1, 423.9, 390.6, 422.5, 394.9, 430.0, 397.2, 312.7, 349.7,
-319.1, 335.8, 319.1, 335.8, 325.6, 322.0, 330.1, 331.7, 331.6, 331.0,
-337.7, 340.1, 333.6, 348.9, 314.3, 352.2, 312.7, 349.7, 426.6, 461.9,
-423.9, 473.2, 422.3, 473.1, 421.1, 484.6, 421.1, 486.1, 420.7, 486.1,
-420.4, 487.6, 419.3, 484.4, 417.0, 485.2, 413.7, 482.7, 388.8, 467.8,
-390.8, 464.5, 367.9, 446.3, 367.7, 447.2, 393.4, 453.0, 418.9, 459.8,
-422.7, 460.9, 426.5, 460.5, 426.6, 461.9, 236.0, 594.4, 228.0, 614.6,
-225.6, 614.0, 220.0, 634.9, 220.3, 631.4, 219.5, 628.1, 220.5, 627.8,
-225.4, 586.6, 223.5, 586.4, 226.5, 544.9, 234.1, 539.0, 230.6, 534.6,
-234.6, 524.2, 241.1, 558.2, 240.5, 560.0, 236.0, 594.4, 77.2, 274.3,
-70.8, 259.9, 70.8, 259.9, 64.3, 245.5, 66.4, 226.4, 65.1, 226.2,
-65.9, 206.9, 64.9, 213.5, 67.1, 213.8, 68.2, 220.7, 71.9, 242.5,
-71.9, 242.5, 75.5, 264.2, 76.4, 269.2, 74.8, 270.2, 77.2, 274.3,
-689.5, 513.1, 695.2, 510.7, 698.8, 512.4, 700.8, 508.2, 700.3, 515.6,
-700.3, 515.6, 699.8, 523.1, 697.3, 524.2, 689.2, 517.7, 689.5, 513.1,
-699.8, 523.1, 698.6, 542.0, 694.3, 542.7, 697.3, 560.8, 695.3, 564.7,
-692.5, 565.5, 693.3, 568.6, 689.4, 569.0, 689.4, 569.0, 685.5, 569.3,
-674.9, 557.2, 672.6, 546.6, 661.6, 547.5, 659.2, 544.7, 658.6, 545.0,
-656.7, 541.9, 653.1, 536.2, 653.0, 536.3, 649.4, 530.7, 670.2, 528.0,
-669.4, 521.9, 689.5, 513.1, 689.2, 517.7, 697.3, 524.2, 699.8, 523.1,
-640.6, 486.8, 641.1, 482.9, 641.1, 482.9, 641.5, 479.0, 665.1, 466.5,
-665.8, 463.1, 691.8, 459.8, 696.3, 465.5, 696.3, 465.5, 700.8, 471.3,
-700.6, 474.2, 701.0, 474.9, 702.9, 477.3, 702.8, 478.7, 702.8, 478.7,
-702.7, 480.0, 693.9, 483.3, 687.5, 485.4, 687.0, 491.8, 677.4, 495.4,
-677.4, 495.4, 667.8, 498.9, 653.7, 497.4, 652.1, 495.6, 640.6, 486.8,
-667.8, 498.9, 652.8, 504.4, 652.4, 503.5, 637.8, 510.0, 638.1, 507.7,
-638.4, 507.7, 638.3, 505.4, 635.1, 498.0, 639.5, 496.1, 640.6, 486.8,
-652.1, 495.6, 653.7, 497.4, 667.8, 498.9, 784.9, 126.3, 772.6, 107.4,
-777.7, 99.6, 760.4, 88.4, 767.7, 87.7, 771.2, 83.6, 775.0, 86.9,
-813.2, 104.8, 813.2, 104.8, 851.4, 122.6, 849.9, 116.6, 813.4, 137.1,
-784.9, 126.3, 851.4, 122.6, 854.5, 124.1, 854.9, 123.5, 857.5, 125.5,
-863.1, 129.5, 863.2, 129.3, 868.7, 133.4, 872.0, 135.8, 872.0, 135.8,
-875.3, 138.2, 868.0, 135.7, 866.1, 141.0, 857.0, 143.8, 841.8, 132.4,
-830.0, 140.7, 806.2, 148.0, 800.0, 143.3, 800.7, 141.9, 793.9, 138.7,
-792.8, 138.7, 792.9, 137.9, 791.8, 137.2, 786.9, 134.1, 788.4, 131.7,
-784.9, 126.3, 813.4, 137.1, 849.9, 116.6, 851.4, 122.6, 921.4, 271.7,
-918.0, 273.4, 914.5, 273.9, 914.7, 275.0, 914.9, 275.8, 907.1, 277.0,
-907.2, 278.6, 907.3, 278.8, 905.1, 279.6, 903.1, 280.6, 902.5, 281.0,
-901.6, 279.7, 900.1, 278.9, 910.2, 274.1, 910.6, 274.7, 921.4, 271.7,
-773.0, 328.8, 748.5, 323.3, 748.1, 316.3, 724.0, 317.9, 720.6, 314.2,
-720.6, 314.2, 717.1, 310.4, 741.1, 315.2, 740.5, 318.1, 763.9, 325.8,
-768.5, 327.3, 768.4, 327.9, 773.0, 328.8, 787.0, 248.0, 792.7, 251.7,
-795.0, 256.8, 798.5, 255.3, 796.8, 263.4, 794.1, 271.2, 795.1, 271.6,
-793.4, 271.7, 791.4, 277.9, 792.6, 283.1, 788.8, 283.1, 789.0, 300.4,
-785.4, 317.7, 785.5, 317.1, 784.0, 316.8, 784.0, 315.9, 783.8, 302.9,
-784.5, 302.9, 785.1, 289.9, 786.1, 269.0, 779.8, 266.6, 787.0, 248.0,
-673.5, 315.8, 659.5, 298.6, 659.5, 298.6, 645.4, 281.4, 632.5, 255.7,
-631.1, 256.4, 615.8, 231.9, 605.0, 210.3, 611.0, 203.2, 594.1, 188.7,
-592.9, 180.0, 592.1, 178.0, 585.7, 172.0, 581.2, 168.9, 582.9, 166.5,
-580.1, 161.0, 591.5, 174.3, 591.9, 173.9, 603.8, 186.8, 616.0, 204.4,
-614.0, 205.7, 624.2, 224.7, 638.5, 251.0, 638.5, 251.0, 652.8, 277.4,
-663.2, 296.6, 673.6, 315.7, 673.5, 315.8, 478.7, 141.4, 501.3, 162.4,
-497.6, 169.5, 523.9, 183.4, 524.4, 183.1, 525.3, 184.7, 526.7, 186.0,
-533.2, 191.2, 531.9, 192.8, 537.0, 199.6, 526.3, 193.5, 528.0, 190.6,
-519.0, 181.6, 498.8, 161.5, 503.0, 150.3, 478.7, 141.4, 620.1, -35.4,
-624.7, -11.6, 619.7, -9.4, 629.3, 12.3, 624.8, 14.0, 624.8, 14.0,
-620.2, 15.7, 617.8, 13.9, 620.2, 10.6, 620.2, 5.5, 620.1, -14.9,
-629.9, -28.1, 620.1, -35.4, 250.6, 110.4, 253.5, 96.5, 253.0, 96.4,
-256.4, 82.5, 257.2, 79.3, 257.0, 79.3, 257.9, 76.1, 260.2, 67.8,
-260.2, 67.8, 262.6, 59.6, 263.8, 66.2, 269.4, 65.1, 276.3, 70.7,
-270.1, 100.3, 255.6, 120.9, 267.7, 130.7, 265.7, 140.4, 265.7, 140.4,
-263.7, 150.1, 251.1, 135.4, 252.7, 130.8, 250.6, 110.4, 263.7, 150.1,
-261.1, 162.6, 257.9, 162.7, 258.5, 175.0, 249.7, 165.6, 249.7, 165.6,
-240.9, 156.3, 246.6, 133.6, 245.7, 133.4, 250.6, 110.4, 252.7, 130.8,
-251.1, 135.4, 263.7, 150.1, 326.0, 83.2, 339.5, 82.3, 343.1, 87.8,
-353.0, 81.4, 353.5, 89.0, 353.5, 89.0, 353.9, 96.6, 351.1, 135.1,
-352.1, 135.2, 350.3, 173.8, 322.8, 160.6, 324.7, 128.1, 326.0, 83.2,
-350.3, 173.8, 350.0, 180.1, 350.0, 180.1, 349.7, 186.4, 337.7, 154.2,
-337.7, 154.1, 324.3, 122.5, 319.7, 110.0, 323.2, 100.7, 315.0, 97.6,
-319.0, 90.5, 325.0, 87.7, 323.0, 83.4, 324.5, 83.3, 324.5, 83.3,
-326.0, 83.2, 324.7, 128.1, 322.8, 160.6, 350.3, 173.8, 172.0, 295.9,
-179.3, 293.3, 179.3, 293.3, 186.7, 290.7, 183.3, 295.7, 186.1, 297.6,
-185.4, 304.5, 180.8, 306.1, 171.6, 299.5, 172.0, 295.9, 602.3, 667.7,
-604.0, 664.1, 590.6, 659.9, 591.4, 653.9, 601.3, 634.3, 600.4, 633.9,
-609.4, 614.0, 609.2, 614.5, 609.3, 614.5, 609.3, 615.1, 609.3, 615.2,
-609.3, 615.2, 609.2, 615.2, 605.8, 641.4, 612.9, 644.7, 602.3, 667.7,
-662.7, 698.1, 662.6, 699.1, 661.9, 699.0, 661.0, 700.0, 658.8, 702.5,
-658.8, 702.5, 656.6, 705.1, 654.4, 707.5, 654.4, 707.5, 652.3, 710.0,
-647.9, 714.9, 648.2, 719.6, 643.6, 719.9, 640.3, 720.1, 637.3, 715.8,
-636.4, 710.8, 632.1, 687.1, 631.2, 686.3, 633.1, 662.4, 632.8, 666.0,
-636.4, 666.3, 639.6, 670.2, 647.5, 679.7, 647.5, 679.7, 655.4, 689.2,
-658.3, 692.8, 658.3, 692.8, 661.2, 696.3, 661.9, 697.2, 662.7, 697.2,
-662.7, 698.1, 555.2, 608.1, 553.8, 606.4, 552.6, 604.5, 552.4, 604.6,
-553.2, 598.7, 541.1, 592.1, 541.9, 591.3, 542.6, 585.6, 542.6, 585.6,
-543.2, 580.0, 552.4, 591.6, 549.9, 593.8, 555.2, 608.1, 561.8, 494.2,
-562.8, 490.6, 562.8, 490.6, 563.8, 487.0, 564.1, 489.9, 568.0, 489.5,
-572.1, 491.9, 572.1, 492.7, 568.0, 492.8, 564.0, 493.7, 562.9, 493.9,
-561.8, 493.9, 561.8, 494.2, 544.4, 720.7, 544.4, 720.7, 544.4, 720.7,
-544.4, 720.7, 549.1, 728.1, 549.1, 728.1, 553.7, 735.5, 558.5, 743.3,
-558.5, 743.3, 563.4, 751.1, 568.5, 759.4, 574.8, 760.3, 573.7, 767.7,
-565.6, 772.1, 566.5, 773.6, 559.2, 779.4, 548.5, 769.2, 554.9, 762.5,
-550.7, 745.6, 547.5, 733.2, 547.5, 733.2, 544.4, 720.7, 589.1, 754.2,
-588.6, 757.8, 586.3, 757.5, 583.5, 760.9, 579.5, 765.7, 580.5, 767.1,
-575.5, 770.6, 575.8, 769.6, 573.8, 767.6, 573.7, 767.7, 574.8, 760.3,
-568.5, 759.4, 563.4, 751.1, 563.1, 714.0, 567.5, 713.8, 573.1, 676.7,
-568.2, 671.3, 575.8, 664.4, 578.4, 652.1, 575.3, 653.6, 579.5, 662.6,
-580.6, 673.2, 583.7, 702.7, 583.7, 702.7, 586.8, 732.3, 587.9, 743.2,
-590.3, 743.5, 589.1, 754.2, 531.4, 675.9, 533.8, 656.3, 533.8, 656.3,
-536.3, 636.7, 551.3, 641.0, 563.9, 639.2, 571.1, 628.3, 572.8, 628.1,
-573.1, 630.7, 575.0, 633.2, 575.6, 633.9, 575.6, 633.9, 576.1, 634.6,
-576.0, 635.8, 577.2, 636.0, 578.3, 637.3, 575.7, 642.6, 577.5, 643.4,
-576.7, 649.6, 571.0, 656.4, 568.5, 654.3, 560.3, 659.1, 545.9, 667.5,
-535.0, 679.2, 531.4, 675.9, 630.3, 847.0, 629.2, 849.3, 629.8, 849.8,
-628.1, 851.5, 623.9, 855.9, 624.5, 856.6, 619.8, 860.2, 609.4, 869.5,
-610.7, 874.4, 598.4, 878.2, 579.8, 884.0, 578.1, 879.9, 557.9, 879.4,
-557.7, 879.4, 557.6, 878.3, 557.4, 877.2, 591.6, 861.8, 592.0, 862.9,
-626.7, 848.5, 628.5, 847.7, 630.3, 846.9, 630.3, 847.0, 538.1, 445.8,
-538.5, 445.4, 538.5, 445.1, 539.0, 445.1, 540.4, 444.8, 541.1, 445.4,
-541.9, 444.6, 543.5, 442.4, 545.6, 443.9, 549.3, 443.3, 549.3, 443.3,
-549.3, 443.4, 549.3, 443.5, 557.9, 450.1, 548.7, 462.0, 548.1, 480.6,
-548.3, 478.7, 547.6, 478.7, 547.0, 476.8, 544.5, 467.9, 544.5, 467.9,
-541.9, 459.0, 540.7, 454.7, 540.7, 454.7, 539.5, 450.4, 538.8, 448.1,
-538.4, 448.1, 538.1, 445.8, 499.7, 607.6, 492.9, 624.4, 493.4, 624.6,
-486.2, 641.2, 479.6, 657.2, 478.0, 656.7, 472.9, 673.2, 459.6, 660.6,
-460.3, 644.6, 468.4, 624.5, 473.6, 611.8, 495.6, 603.8, 499.7, 607.6,
-468.4, 624.5, 468.3, 623.1, 468.3, 623.1, 468.2, 621.6, 468.1, 621.0,
-468.2, 621.0, 468.3, 620.3, 466.7, 616.9, 475.7, 614.6, 476.1, 608.4,
-497.1, 588.7, 503.3, 585.9, 508.7, 559.0, 509.0, 559.2, 512.5, 553.3,
-516.3, 547.5, 515.7, 548.6, 516.4, 549.0, 516.5, 550.4, 518.6, 551.0,
-516.7, 557.5, 517.0, 564.6, 508.0, 586.0, 508.3, 586.1, 499.7, 607.6,
-495.6, 603.8, 473.6, 611.8, 468.4, 624.5, 446.4, 372.4, 445.7, 370.9,
-445.1, 370.9, 445.0, 369.4, 444.8, 366.7, 444.8, 366.7, 444.5, 364.1,
-444.1, 362.0, 444.8, 361.9, 445.1, 359.6, 444.3, 355.2, 446.4, 354.8,
-447.8, 349.9, 448.9, 361.0, 448.0, 361.3, 446.4, 372.4, 191.5, 616.5,
-188.4, 624.7, 188.4, 624.7, 185.3, 632.9, 179.2, 628.3, 179.6, 619.8,
-183.2, 610.3, 182.7, 611.6, 191.2, 613.0, 191.5, 616.5, 183.2, 610.3,
-174.4, 552.3, 178.0, 551.8, 172.8, 493.4, 172.9, 493.2, 172.9, 493.2,
-172.9, 493.1, 178.5, 505.2, 179.3, 504.9, 185.8, 516.6, 190.9, 543.6,
-189.3, 545.5, 202.3, 569.3, 197.7, 591.0, 197.7, 591.0, 193.0, 612.6,
-192.7, 614.6, 192.3, 614.5, 191.5, 616.5, 191.2, 613.0, 182.7, 611.6,
-183.2, 610.3, 168.3, 506.7, 170.6, 500.0, 170.6, 500.0, 172.8, 493.4,
-178.0, 551.8, 174.4, 552.3, 183.2, 610.3, 179.6, 619.8, 179.2, 628.3,
-185.3, 632.9, 183.7, 636.8, 182.7, 636.7, 182.2, 640.8, 174.0, 627.6,
-163.2, 624.8, 165.9, 614.5, 165.1, 609.2, 165.1, 609.2, 164.4, 603.8,
-165.5, 555.2, 164.6, 555.1, 168.3, 506.7, 164.4, 603.8, 161.6, 583.3,
-161.6, 583.3, 158.8, 562.8, 159.4, 553.5, 160.5, 553.3, 159.2, 544.2,
-161.2, 532.8, 165.9, 522.6, 163.3, 521.4, 165.8, 514.0, 165.8, 514.0,
-168.3, 506.7, 164.6, 555.1, 165.5, 555.2, 164.4, 603.8, 403.1, 653.0,
-392.2, 650.9, 391.3, 646.7, 381.3, 648.8, 383.1, 641.1, 387.8, 636.1,
-385.0, 633.5, 395.5, 622.4, 389.1, 616.4, 393.3, 599.3, 408.9, 616.2,
-408.9, 628.7, 403.1, 653.0, 406.4, 715.8, 406.4, 715.7, 406.4, 715.7,
-406.5, 715.6, 416.6, 688.1, 421.7, 688.2, 424.1, 659.7, 430.8, 639.9,
-431.3, 640.1, 438.6, 620.5, 441.4, 612.6, 441.4, 612.6, 444.3, 604.8,
-443.2, 597.4, 447.3, 596.8, 450.2, 588.8, 440.7, 632.2, 441.2, 632.3,
-432.1, 675.9, 424.6, 697.5, 419.2, 695.7, 406.5, 715.6, 406.4, 715.7,
-406.4, 715.7, 406.4, 715.8, 432.1, 675.9, 428.8, 691.6, 429.7, 691.9,
-425.5, 707.4, 421.8, 725.3, 421.8, 725.3, 418.1, 743.1, 416.7, 749.7,
-416.7, 749.7, 415.4, 756.3, 414.9, 758.5, 413.6, 760.2, 414.4, 760.8,
-409.1, 754.3, 409.1, 754.3, 403.8, 747.8, 407.7, 747.1, 412.9, 726.6,
-406.2, 718.4, 406.0, 718.3, 406.3, 717.1, 406.4, 715.8, 418.8, 695.5,
-414.0, 683.8, 432.1, 675.9, 458.7, 682.6, 460.2, 708.3, 460.1, 708.3,
-461.7, 734.0, 463.1, 739.0, 458.0, 740.4, 454.2, 746.8, 450.4, 731.2,
-455.4, 730.0, 456.6, 713.1, 457.6, 697.9, 462.2, 696.8, 458.7, 682.6,
-439.7, 554.0, 441.7, 549.1, 443.5, 549.1, 443.6, 544.2, 444.0, 574.5,
-439.9, 575.1, 444.3, 604.8, 441.4, 612.6, 441.4, 612.6, 438.6, 620.5,
-435.6, 587.6, 437.6, 587.1, 439.7, 554.0, 438.6, 620.5, 431.3, 640.1,
-430.8, 639.9, 424.1, 659.7, 422.2, 683.1, 414.6, 682.2, 407.3, 705.4,
-407.5, 703.4, 407.5, 703.4, 407.6, 701.4, 413.1, 685.3, 410.4, 684.4,
-412.4, 667.3, 417.8, 633.8, 417.1, 633.6, 421.8, 600.0, 422.4, 576.8,
-430.8, 577.0, 439.7, 554.0, 437.6, 587.1, 435.6, 587.6, 438.6, 620.5,
-392.3, 792.8, 390.7, 784.7, 386.5, 785.5, 380.8, 778.2, 371.1, 765.9,
-366.9, 767.5, 361.4, 753.6, 362.4, 743.8, 362.4, 743.8, 363.4, 734.1,
-364.5, 737.8, 368.3, 736.6, 373.2, 739.2, 385.7, 764.5, 386.9, 765.2,
-392.3, 792.8, 395.0, 861.0, 396.6, 870.7, 394.0, 872.0, 398.3, 880.4,
-382.6, 873.9, 382.6, 873.9, 366.8, 867.4, 369.6, 865.9, 366.3, 859.8,
-365.7, 852.2, 361.5, 819.0, 363.7, 818.8, 361.6, 785.4, 387.3, 793.1,
-380.1, 822.5, 395.0, 861.0, 361.6, 785.4, 361.0, 774.7, 361.6, 774.6,
-360.3, 764.1, 360.9, 758.8, 360.9, 758.8, 361.4, 753.6, 366.9, 767.5,
-371.1, 765.9, 380.8, 778.2, 389.5, 801.5, 385.1, 803.2, 389.3, 828.2,
-396.7, 830.6, 392.2, 844.6, 395.0, 861.0, 380.1, 822.5, 387.3, 793.1,
-361.6, 785.4, 436.3, 874.3, 412.8, 851.2, 417.3, 837.2, 389.3, 828.2,
-385.1, 803.2, 389.5, 801.5, 380.8, 778.2, 386.5, 785.5, 390.7, 784.7,
-392.3, 792.8, 393.5, 794.3, 393.5, 794.3, 394.7, 795.9, 407.7, 812.4,
-407.7, 812.4, 420.7, 828.9, 428.5, 829.0, 428.4, 838.7, 436.1, 848.5,
-440.1, 860.0, 431.5, 872.2, 436.3, 874.3, 436.1, 848.5, 444.4, 858.9,
-442.1, 862.3, 452.6, 869.4, 451.9, 874.1, 452.4, 874.2, 451.3, 878.7,
-450.8, 880.6, 450.5, 882.6, 450.3, 882.5, 448.4, 883.8, 446.9, 883.9,
-444.9, 882.7, 442.2, 883.6, 440.6, 878.5, 436.3, 874.3, 431.5, 872.2,
-440.1, 860.0, 436.1, 848.5, 383.8, 232.7, 386.1, 216.4, 392.4, 214.6,
-388.3, 200.2, 389.4, 199.1, 389.4, 199.1, 390.4, 198.0, 388.0, 215.4,
-394.0, 221.9, 383.8, 232.7, 284.3, 466.1, 288.2, 469.9, 287.7, 470.6,
-292.1, 473.7, 296.3, 475.1, 295.0, 478.2, 299.2, 480.6, 316.5, 484.7,
-314.1, 495.1, 329.0, 509.6, 330.1, 511.2, 327.3, 513.3, 325.6, 516.9,
-320.7, 527.7, 323.9, 534.9, 315.8, 538.5, 315.8, 538.5, 312.6, 531.3,
-309.5, 524.1, 301.1, 504.9, 301.1, 504.9, 292.8, 485.6, 288.5, 475.9,
-284.9, 476.1, 284.3, 466.1, 358.5, 448.9, 362.0, 453.0, 362.0, 453.0,
-365.6, 457.1, 373.1, 463.9, 370.3, 467.0, 374.9, 477.0, 371.0, 472.7,
-364.3, 478.8, 353.6, 480.6, 349.6, 477.1, 355.1, 470.8, 356.6, 461.0,
-357.2, 457.1, 357.2, 457.1, 357.8, 453.2, 358.1, 451.1, 359.1, 449.2,
-358.5, 448.9, 417.7, 384.1, 404.9, 370.3, 406.4, 368.4, 392.0, 356.6,
-390.1, 353.7, 388.6, 350.6, 388.2, 350.8, 389.5, 348.0, 386.2, 343.5,
-381.6, 341.0, 375.3, 339.9, 376.4, 333.1, 371.2, 325.2, 375.1, 328.5,
-377.6, 325.6, 384.0, 325.9, 401.6, 337.3, 403.5, 340.5, 423.8, 341.6,
-424.2, 342.3, 424.2, 342.3, 424.7, 343.1, 421.8, 363.6, 427.9, 379.8,
-417.7, 384.1, 424.7, 343.1, 432.4, 355.7, 432.0, 356.0, 440.0, 368.4,
-440.9, 383.7, 440.9, 383.7, 441.8, 399.1, 442.4, 401.0, 441.3, 401.3,
-440.8, 403.5, 440.7, 403.7, 439.2, 403.4, 437.6, 403.3, 437.8, 400.6,
-433.8, 400.3, 430.0, 397.2, 422.5, 394.9, 423.9, 390.6, 417.7, 384.1,
-427.9, 379.8, 421.8, 363.6, 424.7, 343.1, 355.4, 366.8, 358.1, 370.8,
-357.9, 374.7, 360.7, 374.8, 352.1, 382.3, 352.1, 382.3, 343.5, 389.8,
-340.0, 384.6, 346.3, 374.7, 355.4, 366.8, 418.9, 459.8, 393.4, 453.0,
-367.7, 447.2, 367.9, 446.3, 366.7, 445.3, 366.7, 445.3, 365.4, 444.3,
-365.4, 444.7, 366.6, 444.6, 367.8, 445.0, 393.3, 452.4, 417.7, 449.6,
-418.9, 459.8, 262.9, 486.8, 261.9, 491.5, 261.0, 496.3, 261.0, 496.3,
-259.6, 503.2, 259.6, 503.2, 258.1, 510.1, 259.7, 503.9, 259.4, 503.9,
-260.7, 497.6, 261.8, 492.2, 261.5, 492.1, 262.9, 486.8, 118.7, 318.3,
-119.2, 321.0, 119.2, 321.0, 119.8, 323.7, 122.1, 325.8, 107.3, 335.3,
-108.8, 344.5, 106.6, 339.6, 106.6, 339.6, 104.4, 334.7, 106.1, 328.2,
-109.4, 329.0, 114.3, 323.3, 116.5, 320.8, 116.7, 318.2, 118.7, 318.3,
-925.0, 270.0, 923.2, 270.9, 923.2, 270.9, 921.4, 271.7, 910.6, 274.7,
-910.2, 274.1, 900.1, 278.9, 892.2, 274.4, 892.2, 274.4, 884.2, 269.9,
-853.6, 232.9, 850.9, 235.1, 817.5, 200.3, 861.1, 193.4, 867.2, 232.5,
-916.9, 264.8, 921.0, 267.4, 922.6, 266.3, 925.0, 270.0, 704.8, 239.4,
-704.8, 239.2, 714.5, 236.3, 722.0, 239.1, 727.1, 241.1, 726.0, 244.0,
-729.9, 248.9, 747.4, 270.5, 766.2, 271.9, 764.8, 292.2, 765.0, 289.6,
-744.5, 291.9, 727.4, 284.4, 723.0, 282.4, 724.6, 278.8, 721.8, 273.1,
-713.3, 256.2, 704.7, 256.2, 704.8, 239.4, 666.3, 239.8, 663.2, 236.4,
-657.8, 242.9, 652.5, 240.0, 645.6, 232.5, 645.6, 232.5, 638.7, 224.9,
-652.4, 224.8, 656.3, 228.9, 666.3, 239.8, 773.6, 303.1, 775.2, 302.3,
-778.8, 309.5, 784.0, 315.9, 784.0, 316.8, 785.5, 317.1, 785.4, 317.7,
-785.1, 318.9, 784.8, 320.1, 784.9, 320.1, 781.7, 321.8, 783.7, 325.5,
-782.6, 330.9, 778.5, 328.6, 777.8, 329.9, 773.0, 328.8, 768.4, 327.9,
-768.5, 327.3, 763.9, 325.8, 764.2, 314.4, 765.2, 307.2, 773.6, 303.1,
-697.2, 208.4, 686.5, 202.6, 682.2, 199.0, 680.7, 187.9, 687.8, 190.0,
-690.8, 194.8, 695.0, 192.2, 697.4, 194.4, 698.4, 193.2, 701.9, 194.3,
-726.8, 215.2, 729.6, 211.8, 757.4, 229.3, 757.5, 228.9, 724.9, 223.3,
-697.2, 208.4, 624.2, 224.7, 614.0, 205.7, 616.0, 204.4, 603.8, 186.8,
-608.6, 192.1, 608.6, 192.1, 613.4, 197.3, 620.3, 210.2, 614.9, 214.5,
-624.2, 224.7, 484.2, 186.0, 456.3, 171.2, 457.3, 169.0, 428.4, 156.5,
-427.8, 156.2, 427.8, 156.2, 427.2, 155.8, 455.7, 170.8, 457.2, 168.6,
-484.2, 186.0, 620.2, 5.5, 620.2, 10.6, 617.8, 13.9, 620.2, 15.7,
-610.8, 19.2, 610.8, 19.2, 601.4, 22.8, 598.7, 18.3, 595.3, 19.3,
-588.8, 18.1, 583.6, 9.6, 583.6, 9.6, 578.5, 1.0, 584.0, -3.9,
-578.1, -10.7, 577.7, -22.4, 577.6, -21.7, 578.8, -21.6, 580.0, -20.8,
-600.1, -7.7, 602.6, -10.4, 620.2, 5.5, 151.7, 366.1, 155.5, 333.2,
-157.2, 333.4, 159.2, 300.4, 164.9, 298.4, 164.9, 298.4, 170.5, 296.4,
-166.4, 331.9, 170.9, 359.3, 151.7, 366.1, 170.5, 296.4, 171.2, 296.2,
-171.2, 296.2, 172.0, 295.9, 171.6, 299.5, 180.8, 306.1, 185.4, 304.5,
-183.7, 322.7, 183.7, 322.7, 182.0, 340.9, 165.8, 368.5, 158.1, 366.7,
-150.4, 396.6, 150.3, 396.6, 150.3, 396.6, 150.3, 396.7, 149.9, 392.5,
-149.9, 392.5, 149.5, 388.3, 149.1, 384.6, 149.8, 384.5, 150.0, 380.7,
-150.3, 373.4, 150.8, 373.4, 151.7, 366.1, 170.9, 359.3, 166.4, 331.9,
-170.5, 296.4, 618.3, 687.8, 619.4, 679.0, 603.6, 678.6, 602.3, 667.7,
-612.9, 644.7, 605.8, 641.4, 609.2, 615.2, 628.7, 639.7, 622.9, 652.7,
-618.3, 687.8, 705.5, 618.5, 711.2, 627.4, 711.2, 627.4, 716.9, 636.3,
-710.2, 655.5, 702.4, 652.8, 687.9, 669.3, 675.3, 683.7, 676.1, 684.5,
-662.7, 698.1, 662.7, 697.2, 661.9, 697.2, 661.2, 696.3, 664.7, 687.9,
-665.7, 688.3, 670.2, 680.4, 674.1, 673.6, 674.1, 673.6, 678.0, 666.8,
-691.7, 642.6, 685.3, 634.3, 705.5, 618.5, 743.5, 725.6, 741.4, 730.8,
-743.2, 733.3, 739.3, 736.1, 735.2, 740.4, 735.2, 740.4, 731.1, 744.7,
-721.4, 738.3, 724.7, 733.4, 718.2, 722.2, 717.3, 720.6, 717.3, 720.6,
-716.3, 718.9, 710.1, 708.1, 710.1, 708.1, 703.9, 697.2, 703.3, 696.1,
-703.6, 695.6, 702.6, 694.9, 712.2, 701.4, 711.9, 701.9, 721.2, 708.8,
-730.6, 715.9, 730.6, 715.9, 739.9, 722.9, 741.7, 724.2, 743.6, 724.3,
-743.5, 725.6, 685.5, 772.8, 679.5, 765.3, 672.3, 759.2, 673.6, 757.7,
-672.1, 756.0, 672.1, 756.0, 670.7, 754.2, 667.7, 750.4, 667.7, 750.4,
-664.7, 746.6, 664.1, 745.8, 664.1, 745.8, 663.5, 745.0, 653.5, 732.4,
-648.2, 734.2, 643.6, 719.9, 648.2, 719.6, 647.9, 714.9, 652.3, 710.0,
-670.8, 731.5, 665.9, 735.7, 679.5, 761.5, 682.5, 767.1, 680.8, 769.9,
-685.5, 772.8, 575.0, 633.2, 573.1, 630.7, 572.8, 628.1, 571.1, 628.3,
-573.3, 624.9, 563.2, 618.2, 555.2, 608.1, 549.9, 593.8, 552.4, 591.6,
-543.2, 580.0, 545.2, 564.5, 545.2, 564.5, 547.1, 549.0, 544.2, 551.1,
-550.9, 560.4, 554.6, 571.8, 564.8, 602.5, 566.0, 602.2, 575.0, 633.2,
-552.2, 531.6, 552.3, 531.5, 551.5, 531.2, 551.5, 531.1, 556.7, 512.6,
-556.7, 512.6, 561.8, 494.2, 561.8, 493.9, 562.9, 493.9, 564.0, 493.7,
-563.0, 500.5, 561.9, 500.3, 559.9, 507.0, 556.0, 519.3, 556.4, 519.4,
-552.2, 531.6, 550.7, 745.6, 554.9, 762.5, 548.5, 769.2, 559.2, 779.4,
-552.8, 784.7, 553.7, 788.1, 546.4, 789.9, 533.1, 797.2, 533.1, 797.2,
-519.9, 804.5, 522.8, 773.9, 526.4, 761.1, 550.7, 745.6, 519.9, 804.5,
-517.5, 805.8, 515.6, 805.4, 515.2, 807.1, 519.5, 772.2, 519.5, 772.2,
-523.8, 737.3, 523.0, 735.9, 534.1, 729.0, 544.4, 720.7, 547.5, 733.2,
-547.5, 733.2, 550.7, 745.6, 526.4, 761.1, 522.8, 773.9, 519.9, 804.5,
-580.6, 673.2, 579.5, 662.6, 575.3, 653.6, 578.4, 652.1, 579.7, 646.3,
-581.0, 646.3, 580.9, 640.6, 585.5, 646.4, 590.7, 651.6, 590.1, 652.2,
-589.9, 652.7, 591.6, 653.5, 591.4, 653.9, 590.6, 659.9, 604.0, 664.1,
-602.3, 667.7, 603.6, 678.6, 619.4, 679.0, 618.3, 687.8, 618.4, 688.0,
-618.4, 688.2, 618.6, 688.3, 602.2, 681.9, 602.3, 681.8, 586.0, 675.3,
-583.3, 674.2, 581.2, 674.9, 580.6, 673.2, 531.6, 700.1, 530.3, 697.9,
-528.6, 697.6, 529.0, 695.8, 529.9, 688.2, 529.6, 688.2, 530.8, 680.6,
-531.2, 678.3, 531.1, 678.3, 531.4, 675.9, 535.0, 679.2, 545.9, 667.5,
-560.3, 659.1, 560.5, 679.5, 547.8, 681.1, 531.6, 700.1, 611.2, 757.1,
-629.3, 783.0, 624.2, 786.6, 637.1, 816.1, 639.1, 820.5, 640.9, 820.5,
-641.0, 824.9, 639.3, 828.4, 639.3, 828.4, 637.6, 831.9, 624.6, 834.2,
-616.6, 837.5, 610.6, 830.4, 603.2, 821.6, 610.7, 815.3, 610.8, 800.2,
-610.9, 794.7, 610.9, 794.7, 610.9, 789.2, 611.0, 784.0, 611.0, 784.0,
-611.0, 778.7, 611.1, 767.9, 616.2, 764.3, 611.2, 757.1, 670.7, 754.2,
-672.1, 756.0, 672.1, 756.0, 673.6, 757.7, 650.1, 785.2, 657.3, 791.3,
-641.0, 824.9, 640.9, 820.5, 639.1, 820.5, 637.1, 816.1, 641.6, 801.5,
-644.6, 802.4, 652.0, 788.7, 661.4, 771.4, 659.6, 770.2, 670.7, 754.2,
-626.7, 848.5, 592.0, 862.9, 591.6, 861.8, 557.4, 877.2, 556.7, 874.7,
-556.7, 874.7, 556.1, 872.2, 590.4, 857.9, 627.4, 851.2, 626.7, 848.5,
-547.0, 476.8, 547.6, 478.7, 548.3, 478.7, 548.1, 480.6, 548.0, 483.4,
-548.0, 483.4, 547.9, 486.2, 546.7, 481.7, 546.9, 481.5, 547.0, 476.8,
-492.2, 356.2, 480.9, 370.9, 480.9, 370.9, 469.6, 385.7, 467.7, 382.6,
-463.9, 385.0, 458.3, 384.2, 462.7, 374.2, 467.7, 376.4, 477.2, 368.6,
-484.7, 362.4, 488.7, 364.1, 492.2, 356.2, 396.9, 584.7, 408.3, 546.9,
-410.4, 547.4, 419.7, 509.1, 420.3, 514.1, 421.1, 514.2, 420.8, 519.2,
-420.7, 532.8, 420.4, 532.8, 420.6, 546.5, 419.9, 555.0, 419.9, 555.0,
-419.2, 563.4, 411.4, 576.1, 397.0, 574.0, 396.9, 584.7, 419.2, 563.4,
-415.4, 609.0, 415.4, 609.0, 411.6, 654.6, 411.0, 652.7, 407.3, 653.8,
-403.1, 653.0, 408.9, 628.7, 408.9, 616.2, 393.3, 599.3, 394.8, 593.0,
-394.8, 593.0, 396.3, 586.8, 396.5, 585.7, 396.6, 585.7, 396.9, 584.7,
-397.0, 574.0, 411.4, 576.1, 419.2, 563.4, 418.1, 743.1, 421.8, 725.3,
-421.8, 725.3, 425.5, 707.4, 433.4, 674.3, 434.0, 674.4, 442.2, 641.3,
-444.8, 630.6, 447.3, 619.8, 447.3, 619.8, 447.3, 619.8, 444.8, 630.6,
-442.2, 641.3, 435.7, 668.8, 435.7, 668.8, 429.2, 696.3, 423.6, 719.7,
-425.6, 720.3, 418.1, 743.1, 394.7, 795.9, 393.5, 794.3, 393.5, 794.3,
-392.3, 792.8, 386.9, 765.2, 385.7, 764.5, 373.2, 739.2, 388.1, 746.8,
-402.3, 755.6, 403.0, 754.5, 420.6, 782.9, 420.6, 782.9, 438.3, 811.2,
-438.9, 808.0, 416.1, 804.5, 394.7, 795.9, 438.3, 811.2, 438.3, 811.3,
-438.3, 811.3, 438.3, 811.3, 444.2, 830.0, 444.2, 830.0, 450.1, 848.6,
-437.5, 836.6, 435.5, 829.1, 420.7, 828.9, 407.7, 812.4, 407.7, 812.4,
-394.7, 795.9, 416.1, 804.5, 438.9, 808.0, 438.3, 811.2, 416.1, 188.1,
-416.4, 242.1, 416.0, 242.1, 416.8, 296.1, 407.0, 281.7, 407.0, 281.7,
-397.3, 267.3, 397.0, 227.8, 431.5, 210.9, 416.1, 188.1, 397.3, 267.3,
-390.0, 256.5, 379.9, 250.3, 382.7, 245.8, 382.5, 244.4, 382.5, 244.4,
-382.3, 243.1, 381.0, 238.5, 383.0, 237.9, 383.8, 232.7, 394.0, 221.9,
-388.0, 215.4, 390.4, 198.0, 401.1, 186.7, 400.3, 185.7, 411.9, 175.4,
-413.9, 173.3, 413.9, 173.3, 416.0, 171.3, 415.9, 179.7, 416.0, 179.7,
-416.1, 188.1, 431.5, 210.9, 397.0, 227.8, 397.3, 267.3, 275.3, 881.2,
-275.2, 881.7, 275.2, 882.2, 275.0, 882.2, 263.9, 882.6, 255.8, 887.0,
-252.7, 881.9, 240.2, 861.3, 244.8, 856.5, 243.7, 830.9, 244.0, 836.8,
-247.3, 836.7, 251.0, 842.4, 255.4, 849.5, 255.4, 849.5, 259.8, 856.5,
-264.9, 864.6, 264.9, 864.6, 270.1, 872.8, 272.7, 877.0, 273.1, 876.8,
-275.3, 881.2, 239.4, 806.4, 234.4, 814.0, 241.5, 818.6, 243.7, 830.9,
-244.8, 856.5, 240.2, 861.3, 252.7, 881.9, 246.6, 891.2, 211.6, 885.1,
-210.9, 881.3, 205.0, 847.4, 218.0, 839.2, 239.4, 806.4, 210.9, 881.3,
-210.8, 881.6, 209.1, 881.3, 209.1, 881.3, 212.1, 865.4, 209.0, 864.8,
-208.8, 848.4, 207.5, 838.4, 210.5, 838.1, 212.2, 827.7, 209.5, 826.6,
-221.9, 795.2, 231.7, 762.7, 223.7, 770.7, 235.1, 782.2, 238.5, 801.7,
-239.0, 804.0, 240.0, 804.4, 239.4, 806.4, 218.0, 839.2, 205.0, 847.4,
-210.9, 881.3, 359.2, 595.6, 360.1, 607.6, 363.8, 608.6, 361.0, 619.6,
-360.5, 623.2, 360.5, 623.2, 360.0, 626.8, 311.7, 667.4, 312.0, 667.8,
-264.0, 708.7, 275.7, 699.7, 273.7, 697.1, 283.5, 685.5, 292.3, 675.0,
-292.3, 675.0, 301.1, 664.5, 313.0, 650.4, 313.0, 650.4, 324.9, 636.3,
-342.0, 615.9, 337.3, 605.7, 359.2, 595.6, 355.4, 543.6, 356.1, 553.6,
-356.1, 553.6, 356.8, 563.5, 339.0, 591.0, 311.6, 612.4, 311.1, 611.9,
-307.1, 608.3, 329.4, 583.6, 347.8, 555.3, 351.6, 549.5, 356.2, 544.4,
-355.4, 543.6, 257.4, 569.9, 257.2, 564.7, 255.6, 564.2, 257.0, 559.6,
-259.6, 544.0, 258.2, 543.6, 262.2, 528.4, 267.1, 506.8, 262.2, 505.2,
-269.5, 484.6, 270.8, 480.4, 270.8, 480.4, 272.0, 476.1, 273.8, 480.1,
-271.2, 481.3, 270.4, 486.5, 263.9, 528.2, 265.0, 528.4, 257.4, 569.9,
-279.0, 460.9, 279.1, 460.5, 278.2, 460.2, 277.5, 459.5, 277.2, 459.3,
-277.0, 459.2, 277.0, 459.0, 283.9, 435.5, 283.9, 435.5, 290.7, 411.9,
-300.0, 420.9, 285.7, 436.7, 279.0, 460.9, 308.0, 359.7, 310.3, 354.7,
-310.3, 354.7, 312.7, 349.7, 314.3, 352.2, 333.6, 348.9, 337.7, 340.1,
-346.5, 353.4, 346.5, 353.4, 355.4, 366.8, 346.3, 374.7, 340.0, 384.6,
-343.5, 389.8, 341.5, 391.6, 341.5, 391.6, 339.5, 393.3, 322.1, 378.5,
-319.9, 378.9, 308.0, 359.7, 339.5, 393.3, 337.2, 395.3, 334.6, 396.8,
-334.9, 397.3, 323.6, 396.7, 316.9, 390.7, 312.2, 396.0, 305.9, 388.8,
-301.7, 380.5, 299.6, 381.6, 301.0, 376.6, 301.0, 376.6, 302.4, 371.7,
-303.9, 365.4, 305.2, 365.7, 308.0, 359.7, 319.9, 378.9, 322.1, 378.5,
-339.5, 393.3, 431.3, 441.1, 431.5, 441.2, 431.6, 441.2, 431.6, 441.3,
-431.6, 441.3, 431.6, 441.3, 431.6, 441.3, 431.5, 441.2, 431.3, 441.1,
-431.3, 441.1, 260.7, 497.6, 259.4, 503.9, 259.7, 503.9, 258.1, 510.1,
-256.8, 515.4, 255.8, 520.7, 255.8, 520.7, 249.4, 547.7, 250.8, 548.1,
-242.9, 574.7, 241.7, 578.5, 241.8, 578.5, 240.7, 582.4, 239.4, 588.6,
-238.4, 588.4, 236.0, 594.4, 240.5, 560.0, 241.1, 558.2, 234.6, 524.2,
-242.6, 503.9, 242.6, 503.9, 250.5, 483.7, 249.5, 484.7, 258.5, 489.8,
-260.7, 497.6, 250.5, 483.7, 251.2, 482.0, 251.0, 482.0, 251.8, 480.4,
-262.3, 459.0, 262.3, 459.0, 272.8, 437.6, 267.5, 462.1, 267.9, 462.2,
-262.9, 486.8, 261.5, 492.1, 261.8, 492.2, 260.7, 497.6, 258.5, 489.8,
-249.5, 484.7, 250.5, 483.7, 114.3, 323.3, 109.4, 329.0, 106.1, 328.2,
-104.4, 334.7, 90.8, 304.5, 90.8, 304.5, 77.2, 274.3, 74.8, 270.2,
-76.4, 269.2, 75.5, 264.2, 92.4, 285.4, 90.4, 286.9, 105.3, 309.6,
-109.8, 316.5, 114.5, 316.6, 114.3, 323.3, 721.8, 273.1, 724.6, 278.8,
-723.0, 282.4, 727.4, 284.4, 727.4, 284.5, 723.5, 283.6, 719.5, 282.8,
-717.0, 282.2, 717.0, 282.2, 714.4, 281.7, 699.8, 278.7, 698.9, 280.9,
-685.2, 275.6, 681.5, 271.6, 681.5, 271.6, 677.8, 267.5, 699.5, 266.0,
-701.2, 266.2, 721.8, 273.1, 677.8, 267.5, 665.2, 253.8, 665.2, 253.8,
-652.5, 240.0, 657.8, 242.9, 663.2, 236.4, 666.3, 239.8, 685.6, 239.6,
-690.8, 230.9, 704.8, 239.4, 704.7, 256.2, 713.3, 256.2, 721.8, 273.1,
-701.2, 266.2, 699.5, 266.0, 677.8, 267.5, 641.5, 196.5, 647.2, 188.0,
-652.8, 179.4, 653.0, 179.5, 666.8, 183.7, 666.8, 183.7, 680.7, 187.9,
-682.2, 199.0, 686.5, 202.6, 697.2, 208.4, 705.9, 219.2, 705.9, 219.2,
-714.6, 230.0, 715.2, 230.7, 715.9, 231.3, 715.8, 231.4, 715.7, 231.6,
-715.0, 231.0, 714.1, 230.6, 677.8, 213.5, 671.3, 221.4, 641.5, 196.5,
-686.3, 276.8, 685.8, 276.2, 685.8, 276.2, 685.2, 275.6, 698.9, 280.9,
-699.8, 278.7, 714.4, 281.7, 706.7, 273.4, 700.2, 279.7, 686.3, 276.8,
-714.6, 230.0, 705.9, 219.2, 705.9, 219.2, 697.2, 208.4, 724.9, 223.3,
-757.5, 228.9, 757.4, 229.3, 757.4, 229.3, 757.4, 229.3, 757.4, 229.3,
-741.4, 229.6, 741.4, 229.6, 725.3, 229.8, 720.0, 229.9, 718.0, 232.5,
-714.6, 230.0, 652.8, 277.4, 638.5, 251.0, 638.5, 251.0, 624.2, 224.7,
-614.9, 214.5, 620.3, 210.2, 613.4, 197.3, 620.0, 204.5, 620.0, 204.5,
-626.6, 211.7, 626.7, 211.8, 626.7, 211.8, 626.8, 212.0, 626.8, 212.0,
-626.8, 212.0, 626.8, 212.0, 655.9, 255.9, 655.5, 256.1, 685.6, 299.3,
-696.0, 315.0, 696.0, 315.0, 706.4, 330.7, 700.6, 324.6, 698.1, 326.9,
-689.7, 323.2, 669.0, 302.6, 669.0, 301.8, 652.8, 277.4, 689.7, 323.2,
-681.7, 319.5, 675.5, 321.6, 673.6, 315.9, 673.6, 315.8, 673.6, 315.8,
-673.5, 315.8, 673.6, 315.7, 663.2, 296.6, 652.8, 277.4, 669.0, 301.8,
-669.0, 302.6, 689.7, 323.2, 521.4, 200.9, 516.3, 200.1, 515.0, 201.9,
-511.1, 199.4, 505.2, 196.6, 505.2, 196.6, 499.3, 193.9, 491.5, 190.5,
-491.8, 189.9, 484.2, 186.0, 456.3, 171.2, 457.3, 169.0, 428.4, 156.5,
-427.8, 156.2, 427.8, 156.2, 427.2, 155.8, 423.8, 153.6, 423.0, 154.3,
-420.4, 151.4, 414.8, 145.9, 415.1, 145.5, 409.3, 140.3, 413.9, 139.4,
-413.9, 139.4, 418.6, 138.4, 425.7, 140.2, 425.1, 142.3, 431.7, 146.3,
-476.5, 173.6, 477.8, 171.7, 521.4, 200.9, 616.4, -54.1, 618.2, -44.7,
-618.2, -44.7, 620.1, -35.4, 629.9, -28.1, 620.1, -14.9, 620.2, 5.5,
-602.6, -10.4, 600.1, -7.7, 580.0, -20.8, 579.0, -36.3, 595.0, -46.3,
-616.4, -54.1, 580.0, -20.8, 578.8, -21.6, 577.6, -21.7, 577.7, -22.4,
-577.3, -31.7, 574.6, -40.2, 577.0, -41.0, 582.2, -57.8, 582.2, -57.8,
-587.3, -74.6, 593.8, -76.3, 595.3, -80.4, 597.6, -88.0, 597.7, -88.2,
-598.1, -88.3, 598.2, -88.1, 605.5, -82.0, 608.1, -83.2, 612.3, -75.3,
-615.4, -75.0, 614.4, -64.7, 616.4, -54.1, 595.0, -46.3, 579.0, -36.3,
-580.0, -20.8, 609.3, 615.1, 609.3, 614.5, 609.2, 614.5, 609.4, 614.0,
-616.4, 598.5, 612.9, 586.0, 623.3, 583.1, 625.3, 579.5, 626.3, 579.7,
-627.2, 575.8, 627.0, 576.2, 627.3, 576.4, 627.3, 576.9, 628.7, 597.0,
-628.7, 597.0, 630.0, 617.0, 631.0, 631.0, 631.0, 631.0, 631.9, 644.9,
-632.5, 653.6, 632.6, 653.6, 633.1, 662.4, 634.6, 686.3, 634.3, 686.3,
-635.9, 710.2, 635.9, 710.5, 636.4, 710.8, 636.4, 710.8, 636.4, 710.8,
-635.9, 710.5, 635.9, 710.2, 636.2, 709.4, 634.9, 708.8, 633.8, 707.5,
-620.9, 661.5, 621.3, 661.4, 609.3, 615.1, 633.8, 707.5, 632.3, 705.6,
-630.8, 703.8, 630.9, 703.8, 624.7, 696.0, 624.7, 696.0, 618.6, 688.3,
-618.4, 688.2, 618.4, 688.0, 618.3, 687.8, 622.9, 652.7, 628.7, 639.7,
-609.2, 615.2, 609.3, 615.2, 609.3, 615.2, 609.3, 615.1, 621.3, 661.4,
-620.9, 661.5, 633.8, 707.5, 696.0, 603.6, 696.3, 604.1, 696.3, 604.2,
-696.7, 604.7, 695.6, 610.5, 701.1, 611.6, 705.5, 618.5, 685.3, 634.3,
-691.7, 642.6, 678.0, 666.8, 683.9, 659.1, 680.8, 656.7, 683.7, 646.7,
-686.2, 637.8, 686.2, 637.8, 688.7, 629.0, 692.4, 616.3, 691.9, 616.1,
-696.0, 603.6, 727.2, 652.4, 737.6, 668.6, 733.2, 676.6, 747.9, 684.8,
-750.0, 690.9, 751.5, 690.4, 755.2, 696.0, 744.3, 704.0, 749.3, 710.8,
-743.5, 725.6, 743.6, 724.3, 741.7, 724.2, 739.9, 722.9, 734.8, 702.4,
-736.2, 702.0, 732.4, 681.1, 729.8, 666.8, 732.9, 653.7, 727.2, 652.4,
-679.5, 761.5, 665.9, 735.7, 670.8, 731.5, 652.3, 710.0, 654.4, 707.5,
-654.4, 707.5, 656.6, 705.1, 664.6, 716.4, 661.9, 718.3, 667.3, 731.5,
-671.8, 742.5, 671.8, 742.5, 676.3, 753.6, 677.2, 755.8, 677.2, 755.8,
-678.1, 758.1, 678.8, 759.8, 678.6, 759.8, 679.5, 761.5, 579.1, 629.3,
-577.6, 632.0, 576.4, 631.8, 576.1, 634.6, 575.6, 633.9, 575.6, 633.9,
-575.0, 633.2, 566.0, 602.2, 564.8, 602.5, 554.6, 571.8, 558.1, 584.8,
-560.0, 584.3, 565.3, 596.8, 572.2, 613.1, 574.3, 612.5, 579.1, 629.3,
-559.9, 507.0, 561.9, 500.3, 563.0, 500.5, 564.0, 493.7, 568.0, 492.8,
-572.1, 492.7, 572.1, 491.9, 576.3, 494.4, 580.8, 495.0, 580.6, 496.9,
-584.7, 505.2, 590.1, 502.5, 599.7, 508.2, 583.8, 515.9, 577.2, 514.0,
-559.9, 507.0, 613.0, 725.3, 604.5, 735.6, 603.8, 735.1, 595.9, 745.9,
-592.5, 750.0, 588.2, 752.9, 589.1, 754.2, 590.3, 743.5, 587.9, 743.2,
-586.8, 732.3, 588.7, 728.1, 593.8, 730.4, 600.8, 728.6, 606.9, 726.9,
-612.1, 728.4, 613.0, 725.3, 576.6, 650.0, 574.9, 663.4, 567.3, 670.3,
-573.1, 676.7, 567.5, 713.8, 563.1, 714.0, 563.4, 751.1, 558.5, 743.3,
-558.5, 743.3, 553.7, 735.5, 559.4, 692.0, 562.7, 692.0, 576.6, 650.0,
-553.7, 735.5, 549.1, 728.1, 549.1, 728.1, 544.4, 720.7, 538.1, 710.3,
-538.0, 710.4, 531.6, 700.1, 547.8, 681.1, 560.5, 679.5, 560.3, 659.1,
-568.5, 654.3, 571.0, 656.4, 576.7, 649.6, 576.6, 649.8, 576.6, 649.8,
-576.6, 650.0, 562.7, 692.0, 559.4, 692.0, 553.7, 735.5, 601.6, 740.8,
-602.5, 740.0, 602.5, 740.0, 603.4, 739.3, 608.2, 747.5, 607.2, 748.1,
-611.1, 756.9, 611.2, 757.0, 611.2, 757.0, 611.2, 757.1, 616.2, 764.3,
-611.1, 767.9, 611.0, 778.7, 611.9, 774.5, 609.9, 774.1, 608.7, 769.4,
-605.2, 755.1, 604.2, 755.3, 601.6, 740.8, 630.4, 715.1, 633.1, 712.6,
-634.5, 713.3, 635.9, 710.2, 635.9, 710.5, 636.4, 710.8, 636.4, 710.8,
-637.3, 715.8, 640.3, 720.1, 643.6, 719.9, 648.2, 734.2, 653.5, 732.4,
-663.5, 745.0, 660.2, 736.0, 655.5, 737.8, 647.5, 730.5, 638.9, 722.8,
-635.8, 724.6, 630.4, 715.1, 556.0, 871.7, 550.9, 851.6, 545.8, 831.4,
-545.8, 831.4, 546.6, 829.6, 545.2, 829.0, 544.5, 826.6, 554.0, 824.7,
-563.2, 824.2, 564.4, 827.7, 569.6, 842.9, 560.9, 845.9, 557.4, 864.1,
-556.7, 867.9, 554.8, 868.6, 556.0, 871.7, 514.8, 533.6, 503.1, 533.1,
-491.9, 530.4, 491.4, 532.6, 486.1, 528.4, 475.4, 529.7, 474.6, 531.9,
-474.7, 530.5, 474.7, 530.5, 474.8, 529.0, 469.2, 522.9, 486.6, 506.8,
-498.4, 484.5, 495.6, 487.0, 501.4, 493.6, 504.5, 502.6, 508.3, 514.0,
-508.3, 514.0, 512.1, 525.5, 513.5, 529.6, 514.9, 533.6, 514.8, 533.6,
-448.4, 376.8, 447.4, 374.6, 447.4, 374.6, 446.4, 372.4, 448.0, 361.3,
-448.9, 361.0, 447.8, 349.9, 451.7, 335.6, 451.7, 335.6, 455.6, 321.4,
-462.3, 334.2, 453.4, 338.8, 451.1, 356.2, 449.7, 366.5, 451.2, 367.0,
-448.4, 376.8, 442.2, 641.3, 444.8, 630.6, 447.3, 619.8, 447.3, 619.8,
-450.4, 607.2, 451.7, 607.4, 453.5, 594.6, 455.3, 625.3, 455.3, 625.3,
-457.1, 655.9, 458.4, 650.7, 444.6, 650.0, 442.2, 641.3, 305.5, 617.8,
-304.9, 615.7, 308.3, 614.8, 311.1, 611.9, 311.6, 612.4, 339.0, 591.0,
-356.8, 563.5, 358.0, 579.6, 358.0, 579.6, 359.2, 595.6, 337.3, 605.7,
-342.0, 615.9, 324.9, 636.3, 323.8, 637.1, 319.9, 631.5, 314.9, 626.8,
-310.2, 622.3, 306.8, 623.1, 305.5, 617.8, 273.1, 632.1, 273.6, 645.9,
-270.9, 655.3, 260.4, 660.1, 260.0, 649.2, 260.0, 649.2, 259.6, 638.3,
-262.0, 633.2, 273.2, 635.0, 273.1, 632.1, 356.6, 461.0, 355.1, 470.8,
-349.6, 477.1, 353.6, 480.6, 347.2, 481.7, 347.2, 481.7, 340.7, 482.8,
-342.5, 471.0, 347.1, 462.7, 356.6, 461.0, 410.9, 428.7, 421.1, 434.9,
-421.1, 434.9, 431.3, 441.1, 431.3, 441.1, 431.5, 441.2, 431.6, 441.3,
-429.9, 448.1, 429.0, 448.0, 428.3, 454.9, 428.0, 458.4, 427.4, 458.4,
-426.6, 461.9, 426.5, 460.5, 422.7, 460.9, 418.9, 459.8, 417.7, 449.6,
-393.3, 452.4, 367.8, 445.0, 367.1, 442.5, 388.9, 430.0, 410.9, 428.7,
-367.8, 445.0, 366.6, 444.6, 365.4, 444.7, 365.4, 444.3, 359.8, 439.8,
-359.8, 439.8, 354.1, 435.3, 368.9, 434.1, 368.0, 423.2, 381.9, 411.1,
-389.8, 423.9, 396.4, 419.9, 410.9, 428.7, 388.9, 430.0, 367.1, 442.5,
-367.8, 445.0, 68.2, 220.7, 67.1, 213.8, 64.9, 213.5, 65.9, 206.9,
-66.4, 193.9, 65.6, 193.9, 66.9, 181.0, 67.2, 178.0, 67.2, 178.0,
-67.4, 175.0, 67.9, 176.4, 68.0, 176.4, 68.6, 177.8, 82.1, 176.7,
-85.3, 216.6, 101.9, 255.4, 102.1, 238.2, 82.5, 239.9, 68.2, 220.7,
-819.3, 199.5, 818.6, 198.6, 817.2, 199.7, 816.1, 198.8, 809.4, 191.8,
-809.4, 191.8, 802.7, 184.8, 805.2, 187.7, 805.6, 187.3, 808.4, 189.9,
-810.7, 191.9, 810.7, 191.9, 813.0, 194.0, 816.1, 196.8, 817.1, 196.1,
-819.3, 199.5, 916.9, 264.8, 867.2, 232.5, 861.1, 193.4, 817.5, 200.3,
-816.8, 199.5, 816.8, 199.5, 816.1, 198.8, 817.2, 199.7, 818.6, 198.6,
-819.3, 199.5, 857.7, 208.5, 857.7, 208.3, 896.1, 217.4, 896.2, 217.4,
-896.3, 217.5, 896.3, 217.7, 906.7, 241.2, 902.2, 261.5, 916.9, 264.8,
-896.3, 217.7, 896.4, 217.7, 896.5, 217.6, 896.6, 217.7, 912.8, 229.1,
-912.7, 229.3, 929.0, 240.6, 934.5, 244.9, 934.5, 244.9, 940.1, 249.1,
-943.0, 254.3, 941.7, 255.7, 941.3, 262.2, 941.3, 262.5, 939.2, 262.7,
-939.3, 263.2, 939.6, 265.2, 925.6, 266.1, 925.5, 269.8, 925.5, 269.9,
-925.2, 269.9, 925.0, 270.0, 922.6, 266.3, 921.0, 267.4, 916.9, 264.8,
-904.8, 242.3, 906.9, 241.2, 896.6, 217.7, 896.5, 217.6, 896.4, 217.7,
-896.3, 217.7, 638.0, 224.2, 633.7, 219.4, 633.7, 219.4, 629.3, 214.7,
-636.9, 207.0, 635.4, 205.6, 641.5, 196.5, 671.3, 221.4, 677.8, 213.5,
-714.1, 230.6, 713.9, 232.2, 675.4, 231.2, 638.0, 224.2, 714.1, 230.6,
-715.0, 231.0, 715.7, 231.6, 715.8, 231.4, 719.2, 235.0, 721.8, 239.3,
-722.0, 239.1, 714.5, 236.3, 704.8, 239.2, 704.8, 239.4, 690.8, 230.9,
-685.6, 239.6, 666.3, 239.8, 656.3, 228.9, 652.4, 224.8, 638.7, 224.9,
-638.4, 224.6, 638.4, 224.6, 638.0, 224.2, 675.4, 231.2, 713.9, 232.2,
-714.1, 230.6, 719.5, 282.8, 723.5, 283.6, 727.4, 284.5, 727.4, 284.4,
-744.5, 291.9, 765.0, 289.6, 764.8, 292.2, 770.3, 294.4, 771.1, 303.5,
-773.3, 302.8, 766.0, 305.3, 763.9, 299.3, 754.4, 295.7, 737.0, 289.2,
-736.7, 290.0, 719.5, 282.8, 725.3, 229.8, 741.4, 229.6, 741.4, 229.6,
-757.4, 229.3, 769.7, 237.1, 769.7, 237.1, 782.1, 244.9, 778.4, 241.6,
-776.7, 243.5, 771.3, 242.0, 748.3, 235.9, 740.9, 244.0, 725.3, 229.8,
-519.0, 181.6, 528.0, 190.6, 526.3, 193.5, 537.0, 199.6, 538.5, 201.6,
-538.5, 201.6, 540.0, 203.6, 532.3, 199.4, 530.7, 202.2, 521.4, 200.9,
-477.8, 171.7, 476.5, 173.6, 431.7, 146.3, 434.6, 169.1, 477.1, 160.4,
-519.0, 181.6, 431.7, 146.3, 425.1, 142.3, 425.7, 140.2, 418.6, 138.4,
-432.6, 135.3, 433.1, 136.8, 446.7, 132.3, 455.3, 131.1, 458.1, 133.7,
-463.7, 128.7, 464.0, 128.4, 464.3, 128.6, 464.8, 128.5, 471.2, 135.4,
-471.8, 134.9, 478.7, 141.4, 503.0, 150.3, 498.8, 161.5, 519.0, 181.6,
-477.1, 160.4, 434.6, 169.1, 431.7, 146.3, 662.2, 550.8, 669.9, 559.1,
-668.4, 560.5, 674.6, 570.2, 678.1, 576.1, 676.7, 578.5, 682.0, 581.7,
-681.3, 582.6, 684.2, 587.1, 685.3, 586.9, 687.4, 596.0, 690.6, 595.2,
-696.0, 603.6, 691.9, 616.1, 692.4, 616.3, 688.7, 629.0, 673.2, 615.5,
-681.1, 606.5, 673.4, 583.9, 669.5, 572.2, 669.5, 572.2, 665.5, 560.5,
-663.8, 555.6, 665.4, 554.2, 662.2, 550.8, 721.2, 708.8, 711.9, 701.9,
-712.2, 701.4, 702.6, 694.9, 693.5, 684.1, 688.8, 682.7, 688.3, 669.9,
-688.6, 678.5, 695.3, 678.2, 702.3, 686.5, 711.7, 697.7, 720.7, 697.3,
-721.2, 708.8, 661.0, 700.0, 661.9, 699.0, 662.6, 699.1, 662.7, 698.1,
-676.1, 684.5, 675.3, 683.7, 687.9, 669.3, 687.9, 669.4, 688.1, 669.6,
-688.3, 669.9, 688.8, 682.7, 693.5, 684.1, 702.6, 694.9, 703.6, 695.6,
-703.3, 696.1, 703.9, 697.2, 692.5, 699.2, 692.3, 698.0, 680.6, 698.7,
-675.1, 699.1, 675.1, 699.1, 669.6, 699.4, 665.3, 699.7, 665.1, 700.8,
-661.0, 700.0, 592.4, 572.5, 589.3, 586.8, 582.8, 599.4, 586.2, 601.1,
-580.0, 612.0, 575.6, 621.5, 580.6, 626.7, 579.9, 628.0, 579.9, 628.0,
-579.1, 629.3, 574.3, 612.5, 572.2, 613.1, 565.3, 596.8, 568.7, 582.3,
-581.8, 570.3, 592.4, 572.5, 565.3, 596.8, 560.0, 584.3, 558.1, 584.8,
-554.6, 571.8, 550.9, 560.4, 544.2, 551.1, 547.1, 549.0, 547.3, 547.2,
-546.7, 546.9, 547.5, 545.3, 549.5, 538.2, 549.5, 538.2, 551.5, 531.1,
-551.5, 531.2, 552.3, 531.5, 552.2, 531.6, 554.8, 533.5, 554.8, 533.5,
-557.4, 535.4, 576.0, 549.0, 579.0, 546.1, 594.5, 562.6, 593.4, 567.5,
-593.4, 567.5, 592.4, 572.5, 581.8, 570.3, 568.7, 582.3, 565.3, 596.8,
-605.0, 514.1, 599.8, 538.4, 599.8, 538.4, 594.5, 562.6, 579.0, 546.1,
-576.0, 549.0, 557.4, 535.4, 560.7, 520.3, 594.6, 506.5, 605.0, 514.1,
-557.4, 535.4, 554.8, 533.5, 554.8, 533.5, 552.2, 531.6, 556.4, 519.4,
-556.0, 519.3, 559.9, 507.0, 577.2, 514.0, 583.8, 515.9, 599.7, 508.2,
-602.6, 509.9, 602.6, 509.9, 605.6, 511.6, 605.8, 511.8, 605.3, 512.9,
-605.0, 514.1, 594.6, 506.5, 560.7, 520.3, 557.4, 535.4, 600.8, 728.6,
-593.8, 730.4, 588.7, 728.1, 586.8, 732.3, 583.7, 702.7, 583.7, 702.7,
-580.6, 673.2, 581.2, 674.9, 583.3, 674.2, 586.0, 675.3, 595.4, 701.2,
-600.4, 701.8, 600.8, 728.6, 586.0, 675.3, 602.3, 681.8, 602.2, 681.9,
-618.6, 688.3, 624.7, 696.0, 624.7, 696.0, 630.9, 703.8, 620.4, 712.7,
-621.9, 714.5, 613.0, 725.3, 612.1, 728.4, 606.9, 726.9, 600.8, 728.6,
-600.4, 701.8, 595.4, 701.2, 586.0, 675.3, 610.8, 800.2, 610.7, 815.3,
-603.2, 821.6, 610.6, 830.4, 610.6, 830.5, 608.9, 830.3, 607.3, 830.2,
-585.8, 828.9, 585.8, 828.9, 564.4, 827.7, 563.2, 824.2, 554.0, 824.7,
-544.5, 826.6, 544.5, 826.3, 544.5, 826.3, 544.4, 826.1, 577.5, 812.9,
-578.6, 798.2, 610.8, 800.2, 611.1, 756.9, 607.2, 748.1, 608.2, 747.5,
-603.4, 739.3, 609.7, 733.6, 609.7, 733.6, 616.0, 728.0, 614.4, 728.3,
-615.2, 732.7, 614.4, 737.3, 614.3, 737.8, 614.3, 737.8, 614.2, 738.3,
-612.7, 747.6, 613.5, 756.7, 611.1, 756.9, 607.3, 830.2, 608.9, 830.3,
-610.6, 830.5, 610.6, 830.4, 616.6, 837.5, 624.6, 834.2, 637.6, 831.9,
-634.0, 839.4, 634.0, 839.4, 630.3, 847.0, 630.3, 846.9, 628.5, 847.7,
-626.7, 848.5, 627.4, 851.2, 590.4, 857.9, 556.1, 872.2, 556.0, 871.9,
-556.0, 871.9, 556.0, 871.7, 554.8, 868.6, 556.7, 867.9, 557.4, 864.1,
-580.8, 845.2, 581.8, 846.3, 607.3, 830.2, 557.4, 864.1, 560.9, 845.9,
-569.6, 842.9, 564.4, 827.7, 585.8, 828.9, 585.8, 828.9, 607.3, 830.2,
-581.8, 846.3, 580.8, 845.2, 557.4, 864.1, 547.5, 499.4, 547.5, 499.8,
-547.7, 500.0, 547.5, 500.3, 536.3, 517.1, 536.3, 517.1, 525.2, 534.0,
-525.1, 533.3, 520.0, 533.8, 514.8, 533.6, 514.9, 533.6, 513.5, 529.6,
-512.1, 525.5, 518.9, 516.3, 521.8, 518.4, 531.4, 511.3, 539.5, 505.4,
-539.3, 505.1, 547.5, 499.4, 451.1, 356.2, 453.4, 338.8, 462.3, 334.2,
-455.6, 321.4, 456.1, 319.7, 457.2, 318.6, 456.6, 318.0, 458.1, 318.4,
-458.1, 318.4, 459.7, 318.9, 457.0, 337.8, 462.6, 349.1, 451.1, 356.2,
-429.2, 696.3, 435.7, 668.8, 435.7, 668.8, 442.2, 641.3, 444.6, 650.0,
-458.4, 650.7, 457.1, 655.9, 457.9, 669.3, 457.9, 669.3, 458.7, 682.6,
-462.2, 696.8, 457.6, 697.9, 456.6, 713.1, 453.4, 715.7, 446.3, 706.8,
-436.1, 700.5, 432.6, 698.4, 429.0, 698.0, 429.2, 696.3, 347.1, 650.0,
-347.7, 658.4, 346.5, 658.6, 348.4, 666.8, 338.4, 696.1, 338.4, 696.1,
-328.4, 725.4, 328.1, 726.3, 328.0, 726.3, 327.5, 727.1, 325.7, 730.5,
-324.9, 730.3, 324.0, 733.9, 334.6, 692.0, 335.4, 692.2, 346.9, 650.6,
-347.0, 650.3, 347.1, 650.3, 347.1, 650.0, 270.1, 872.8, 264.9, 864.6,
-264.9, 864.6, 259.8, 856.5, 259.4, 855.5, 260.7, 854.9, 261.5, 853.3,
-292.7, 793.6, 292.7, 793.6, 324.0, 733.9, 324.9, 730.3, 325.7, 730.5,
-327.5, 727.1, 299.2, 800.1, 306.2, 803.8, 270.1, 872.8, 327.5, 727.1,
-328.0, 726.3, 328.1, 726.3, 328.4, 725.4, 322.8, 741.8, 319.6, 741.4,
-317.2, 758.2, 297.5, 803.6, 296.7, 804.1, 285.2, 852.2, 281.3, 861.8,
-284.4, 870.0, 278.5, 871.8, 275.7, 875.5, 276.9, 876.5, 275.3, 881.2,
-273.1, 876.8, 272.7, 877.0, 270.1, 872.8, 306.2, 803.8, 299.2, 800.1,
-327.5, 727.1, 314.9, 626.8, 319.9, 631.5, 323.8, 637.1, 324.9, 636.3,
-313.0, 650.4, 313.0, 650.4, 301.1, 664.5, 306.3, 660.7, 303.8, 657.3,
-306.4, 650.2, 310.6, 638.5, 306.5, 633.0, 314.9, 626.8, 347.1, 555.7,
-347.3, 561.2, 337.1, 561.5, 327.0, 567.2, 310.5, 576.7, 311.8, 580.6,
-294.0, 586.2, 297.6, 585.1, 296.3, 581.2, 298.6, 576.2, 300.9, 571.2,
-300.9, 571.2, 303.2, 566.1, 309.5, 552.3, 309.5, 552.3, 315.8, 538.5,
-323.9, 534.9, 320.7, 527.7, 325.6, 516.9, 342.1, 525.9, 346.6, 536.0,
-347.1, 555.7, 325.6, 516.9, 327.3, 513.3, 330.1, 511.2, 329.0, 509.6,
-341.8, 522.1, 341.8, 522.1, 354.7, 534.6, 356.5, 535.4, 355.0, 539.1,
-355.4, 543.6, 356.2, 544.4, 351.6, 549.5, 347.8, 555.3, 347.6, 555.6,
-347.1, 555.7, 347.1, 555.7, 346.6, 536.0, 342.1, 525.9, 325.6, 516.9,
-278.9, 619.5, 273.7, 609.2, 282.3, 599.0, 294.0, 586.2, 311.8, 580.6,
-310.5, 576.7, 327.0, 567.2, 330.2, 573.7, 313.3, 582.2, 299.5, 597.1,
-289.2, 608.3, 276.5, 614.7, 278.9, 619.5, 308.5, 478.6, 294.1, 470.2,
-294.6, 469.4, 279.8, 461.8, 279.3, 461.5, 278.9, 461.2, 279.0, 460.9,
-285.7, 436.7, 300.0, 420.9, 290.7, 411.9, 291.4, 409.5, 291.4, 409.5,
-292.1, 407.2, 292.0, 407.2, 292.6, 409.2, 293.0, 411.3, 300.8, 444.9,
-316.2, 449.0, 308.5, 478.6, 105.3, 309.6, 90.4, 286.9, 92.4, 285.4,
-75.5, 264.2, 71.9, 242.5, 71.9, 242.5, 68.2, 220.7, 82.5, 239.9,
-102.1, 238.2, 101.9, 255.4, 103.7, 259.7, 103.7, 259.7, 105.6, 264.0,
-107.0, 286.7, 105.6, 309.6, 105.3, 309.6, 105.6, 264.0, 105.7, 264.1,
-105.7, 264.1, 105.7, 264.3, 108.2, 272.8, 108.8, 272.7, 110.6, 281.3,
-114.6, 299.8, 114.6, 299.8, 118.7, 318.3, 116.7, 318.2, 116.5, 320.8,
-114.3, 323.3, 114.5, 316.6, 109.8, 316.5, 105.3, 309.6, 102.1, 287.5,
-105.6, 287.0, 105.7, 264.3, 105.7, 264.1, 105.7, 264.1, 105.6, 264.0,
-813.0, 194.0, 807.8, 189.4, 807.8, 189.4, 802.7, 184.8, 802.4, 184.5,
-802.4, 184.5, 802.1, 184.2, 805.3, 187.0, 805.3, 187.0, 808.4, 189.9,
-810.7, 191.9, 810.7, 191.9, 813.0, 194.0, 703.6, 295.6, 697.1, 288.6,
-697.1, 288.6, 690.7, 281.6, 688.5, 279.2, 688.5, 279.2, 686.3, 276.8,
-700.2, 279.7, 706.7, 273.4, 714.4, 281.7, 717.0, 282.2, 717.0, 282.2,
-719.5, 282.8, 736.7, 290.0, 737.0, 289.2, 754.4, 295.7, 739.0, 308.1,
-727.8, 301.0, 703.6, 295.6, 754.4, 295.7, 763.9, 299.3, 766.0, 305.3,
-773.3, 302.8, 773.5, 302.8, 773.7, 303.0, 773.6, 303.1, 765.2, 307.2,
-764.2, 314.4, 763.9, 325.8, 740.5, 318.1, 741.1, 315.2, 717.1, 310.4,
-710.4, 303.0, 710.4, 303.0, 703.6, 295.6, 727.8, 301.0, 739.0, 308.1,
-754.4, 295.7, 729.9, 248.9, 726.0, 244.0, 727.1, 241.1, 722.0, 239.1,
-721.8, 239.3, 719.2, 235.0, 715.8, 231.4, 715.9, 231.3, 715.2, 230.7,
-714.6, 230.0, 718.0, 232.5, 720.0, 229.9, 725.3, 229.8, 740.9, 244.0,
-748.3, 235.9, 771.3, 242.0, 765.5, 235.9, 756.5, 244.5, 741.7, 247.0,
-735.8, 247.9, 734.7, 250.8, 729.9, 248.9, 627.3, 576.9, 627.3, 576.4,
-627.0, 576.2, 627.2, 575.8, 628.0, 572.7, 625.3, 571.4, 626.8, 569.1,
-632.9, 555.2, 632.9, 555.2, 639.0, 541.4, 632.2, 549.5, 635.4, 552.2,
-631.9, 562.9, 629.6, 569.9, 629.8, 570.0, 627.3, 576.9, 732.4, 681.1,
-736.2, 702.0, 734.8, 702.4, 739.9, 722.9, 730.6, 715.9, 730.6, 715.9,
-721.2, 708.8, 720.7, 697.3, 711.7, 697.7, 702.3, 686.5, 705.4, 678.9,
-726.0, 674.9, 732.4, 681.1, 702.3, 686.5, 695.3, 678.2, 688.6, 678.5,
-688.3, 669.9, 688.1, 669.6, 687.9, 669.4, 687.9, 669.3, 702.4, 652.8,
-710.2, 655.5, 716.9, 636.3, 722.1, 644.3, 722.1, 644.3, 727.2, 652.4,
-732.9, 653.7, 729.8, 666.8, 732.4, 681.1, 726.0, 674.9, 705.4, 678.9,
-702.3, 686.5, 667.3, 731.5, 661.9, 718.3, 664.6, 716.4, 656.6, 705.1,
-658.8, 702.5, 658.8, 702.5, 661.0, 700.0, 665.1, 700.8, 665.3, 699.7,
-669.6, 699.4, 672.6, 714.6, 674.1, 728.5, 667.3, 731.5, 583.5, 760.9,
-586.3, 757.5, 588.6, 757.8, 589.1, 754.2, 588.2, 752.9, 592.5, 750.0,
-595.9, 745.9, 598.1, 742.9, 598.8, 743.4, 601.6, 740.8, 604.2, 755.3,
-605.2, 755.1, 608.7, 769.4, 605.2, 773.4, 593.4, 768.6, 583.5, 760.9,
-647.5, 730.5, 655.5, 737.8, 660.2, 736.0, 663.5, 745.0, 664.1, 745.8,
-664.1, 745.8, 664.7, 746.6, 662.4, 744.7, 662.5, 744.5, 660.3, 742.5,
-653.9, 736.5, 654.3, 736.0, 647.5, 730.5, 521.2, 461.3, 529.7, 453.6,
-529.7, 453.6, 538.1, 445.8, 538.4, 448.1, 538.8, 448.1, 539.5, 450.4,
-531.8, 457.4, 520.4, 458.7, 521.2, 461.3, 477.2, 368.6, 467.7, 376.4,
-462.7, 374.2, 458.3, 384.2, 454.8, 383.8, 452.5, 381.9, 451.3, 383.3,
-449.8, 380.1, 449.8, 380.1, 448.4, 376.8, 451.2, 367.0, 449.7, 366.5,
-451.1, 356.2, 462.6, 349.1, 457.0, 337.8, 459.7, 318.9, 461.5, 319.4,
-461.5, 319.4, 463.3, 319.9, 471.7, 343.7, 479.1, 344.9, 477.2, 368.6,
-463.3, 319.9, 471.0, 322.1, 478.7, 323.4, 478.6, 324.2, 486.4, 339.0,
-486.4, 339.0, 494.1, 353.7, 494.4, 354.1, 493.2, 355.0, 492.2, 356.2,
-488.7, 364.1, 484.7, 362.4, 477.2, 368.6, 479.1, 344.9, 471.7, 343.7,
-463.3, 319.9, 418.9, 766.3, 416.7, 763.5, 416.7, 763.5, 414.4, 760.8,
-413.6, 760.2, 414.9, 758.5, 415.4, 756.3, 418.5, 760.1, 419.8, 761.8,
-418.9, 766.3, 238.5, 801.7, 235.1, 782.2, 223.7, 770.7, 231.7, 762.7,
-232.7, 759.2, 232.7, 759.2, 233.8, 755.6, 236.8, 761.2, 234.5, 762.4,
-235.2, 769.2, 235.4, 771.3, 235.4, 771.3, 235.6, 773.3, 236.2, 779.1,
-236.2, 779.1, 236.8, 784.9, 237.4, 790.6, 237.4, 790.6, 238.0, 796.2,
-238.3, 799.0, 238.0, 799.0, 238.5, 801.7, 283.5, 685.5, 273.7, 697.1,
-275.7, 699.7, 264.0, 708.7, 263.0, 709.5, 263.0, 709.5, 262.0, 710.4,
-267.0, 702.9, 264.5, 698.4, 261.3, 688.3, 259.5, 685.3, 261.2, 684.4,
-261.0, 680.4, 271.8, 679.0, 283.1, 681.8, 283.5, 685.5, 297.7, 626.0,
-292.4, 638.3, 287.9, 636.3, 278.2, 646.7, 269.3, 656.0, 270.6, 657.7,
-260.5, 665.3, 260.4, 662.7, 260.4, 662.7, 260.4, 660.1, 270.9, 655.3,
-273.6, 645.9, 273.1, 632.1, 276.0, 625.8, 274.8, 624.9, 278.9, 619.5,
-276.5, 614.7, 289.2, 608.3, 299.5, 597.1, 303.2, 598.4, 303.1, 613.5,
-297.7, 626.0, 299.5, 597.1, 313.3, 582.2, 330.2, 573.7, 327.0, 567.2,
-337.1, 561.5, 347.3, 561.2, 347.1, 555.7, 347.1, 555.7, 347.6, 555.6,
-347.8, 555.3, 329.4, 583.6, 307.1, 608.3, 311.1, 611.9, 308.3, 614.8,
-304.9, 615.7, 305.5, 617.8, 301.6, 621.9, 296.9, 623.2, 297.7, 626.0,
-303.1, 613.5, 303.2, 598.4, 299.5, 597.1, 270.4, 486.5, 271.2, 481.3,
-273.8, 480.1, 272.0, 476.1, 274.5, 467.6, 274.5, 467.6, 277.0, 459.0,
-277.0, 459.2, 277.2, 459.3, 277.5, 459.5, 274.2, 473.1, 274.7, 473.3,
-270.4, 486.5, 273.8, 561.0, 276.9, 540.3, 287.9, 535.6, 309.5, 524.1,
-312.6, 531.3, 315.8, 538.5, 315.8, 538.5, 309.5, 552.3, 309.5, 552.3,
-303.2, 566.1, 292.8, 571.7, 273.8, 561.4, 273.8, 561.0, 293.0, 411.3,
-292.6, 409.2, 292.0, 407.2, 292.1, 407.2, 292.3, 406.5, 292.3, 406.5,
-292.5, 405.8, 306.0, 421.3, 313.3, 417.0, 335.5, 422.7, 339.3, 427.0,
-338.6, 427.9, 343.0, 431.2, 352.6, 437.1, 350.7, 440.1, 358.5, 448.9,
-359.1, 449.2, 358.1, 451.1, 357.8, 453.2, 346.9, 448.6, 347.8, 446.7,
-337.7, 440.2, 315.4, 425.7, 314.6, 426.8, 293.0, 411.3, 808.4, 189.9,
-805.3, 187.0, 805.3, 187.0, 802.1, 184.2, 799.7, 181.7, 799.7, 181.7,
-797.2, 179.1, 809.8, 174.1, 821.3, 166.9, 820.2, 163.7, 862.2, 179.9,
-899.8, 209.2, 896.1, 217.4, 893.9, 222.3, 851.7, 205.1, 808.4, 189.9,
-896.1, 217.4, 896.4, 217.5, 896.4, 217.5, 896.6, 217.7, 896.5, 217.6,
-896.4, 217.7, 896.3, 217.7, 857.8, 208.6, 857.3, 210.4, 819.3, 199.5,
-817.1, 196.1, 816.1, 196.8, 813.0, 194.0, 810.7, 191.9, 810.7, 191.9,
-808.4, 189.9, 851.7, 205.1, 893.9, 222.3, 896.1, 217.4, 786.5, 247.7,
-786.8, 247.9, 786.8, 247.9, 787.0, 248.0, 779.8, 266.6, 786.1, 269.0,
-785.1, 289.9, 785.8, 278.9, 785.5, 278.9, 785.9, 267.8, 786.2, 257.8,
-786.0, 257.7, 786.5, 247.7, 676.3, 753.6, 671.8, 742.5, 671.8, 742.5,
-667.3, 731.5, 674.1, 728.5, 672.6, 714.6, 669.6, 699.4, 675.1, 699.1,
-675.1, 699.1, 680.6, 698.7, 684.3, 705.4, 679.9, 707.8, 679.2, 716.9,
-679.2, 717.0, 679.2, 717.0, 679.2, 717.0, 677.7, 735.3, 685.8, 742.0,
-676.3, 753.6, 610.9, 789.2, 610.9, 794.7, 610.9, 794.7, 610.8, 800.2,
-578.6, 798.2, 577.5, 812.9, 544.4, 826.1, 542.7, 819.2, 538.9, 813.6,
-540.9, 812.3, 553.8, 796.7, 553.8, 796.7, 566.7, 781.1, 585.5, 775.0,
-590.8, 780.5, 610.9, 789.2, 566.7, 781.1, 568.6, 778.9, 568.1, 777.6,
-570.5, 776.6, 573.6, 774.5, 574.2, 774.0, 575.5, 770.6, 580.5, 767.1,
-579.5, 765.7, 583.5, 760.9, 593.4, 768.6, 605.2, 773.4, 608.7, 769.4,
-609.9, 774.1, 611.9, 774.5, 611.0, 778.7, 611.0, 784.0, 611.0, 784.0,
-610.9, 789.2, 590.8, 780.5, 585.5, 775.0, 566.7, 781.1, 614.4, 737.3,
-615.2, 732.7, 614.4, 728.3, 616.0, 728.0, 623.2, 721.6, 623.2, 721.6,
-630.4, 715.1, 635.8, 724.6, 638.9, 722.8, 647.5, 730.5, 654.3, 736.0,
-653.9, 736.5, 660.3, 742.5, 638.8, 746.9, 635.9, 744.3, 614.4, 737.3,
-547.6, 495.4, 547.6, 497.4, 547.6, 497.4, 547.5, 499.4, 539.3, 505.1,
-539.5, 505.4, 531.4, 511.3, 537.2, 509.1, 536.2, 506.6, 541.1, 501.8,
-544.4, 498.6, 543.7, 496.9, 547.6, 495.4, 446.0, 761.1, 439.5, 772.2,
-430.7, 774.5, 433.0, 783.4, 430.1, 779.9, 428.0, 780.3, 427.3, 776.5,
-424.8, 770.6, 423.1, 771.4, 418.9, 766.3, 419.8, 761.8, 418.5, 760.1,
-415.4, 756.3, 416.7, 749.7, 416.7, 749.7, 418.1, 743.1, 425.6, 720.3,
-423.6, 719.7, 429.2, 696.3, 429.0, 698.0, 432.6, 698.4, 436.1, 700.5,
-443.7, 730.1, 447.1, 731.0, 446.0, 761.1, 436.1, 700.5, 446.3, 706.8,
-453.4, 715.7, 456.6, 713.1, 455.4, 730.0, 450.4, 731.2, 454.2, 746.8,
-450.1, 753.9, 450.1, 753.9, 446.0, 761.1, 447.1, 731.0, 443.7, 730.1,
-436.1, 700.5, 278.2, 646.7, 287.9, 636.3, 292.4, 638.3, 297.7, 626.0,
-296.9, 623.2, 301.6, 621.9, 305.5, 617.8, 306.8, 623.1, 310.2, 622.3,
-314.9, 626.8, 306.5, 633.0, 310.6, 638.5, 306.4, 650.2, 296.2, 655.7,
-280.3, 652.7, 278.2, 646.7, 306.4, 650.2, 303.8, 657.3, 306.3, 660.7,
-301.1, 664.5, 292.3, 675.0, 292.3, 675.0, 283.5, 685.5, 283.1, 681.8,
-271.8, 679.0, 261.0, 680.4, 260.8, 672.8, 260.8, 672.8, 260.5, 665.3,
-270.6, 657.7, 269.3, 656.0, 278.2, 646.7, 280.3, 652.7, 296.2, 655.7,
-306.4, 650.2, 292.8, 485.6, 301.1, 504.9, 301.1, 504.9, 309.5, 524.1,
-287.9, 535.6, 276.9, 540.3, 273.8, 561.0, 268.3, 566.7, 268.3, 566.7,
-262.7, 572.5, 261.5, 573.7, 260.9, 573.4, 260.4, 574.9, 275.9, 530.0,
-262.6, 516.8, 292.8, 485.6, 260.4, 574.9, 259.7, 576.6, 257.4, 577.3,
-257.6, 577.7, 257.5, 573.8, 257.5, 573.8, 257.4, 569.9, 265.0, 528.4,
-263.9, 528.2, 270.4, 486.5, 274.7, 473.3, 274.2, 473.1, 277.5, 459.5,
-278.2, 460.2, 279.1, 460.5, 279.0, 460.9, 278.9, 461.2, 279.3, 461.5,
-279.8, 461.8, 282.5, 463.1, 282.0, 463.9, 284.3, 466.1, 284.9, 476.1,
-288.5, 475.9, 292.8, 485.6, 262.6, 516.8, 275.9, 530.0, 260.4, 574.9,
-298.6, 576.2, 296.3, 581.2, 297.6, 585.1, 294.0, 586.2, 282.3, 599.0,
-273.7, 609.2, 278.9, 619.5, 274.8, 624.9, 276.0, 625.8, 273.1, 632.1,
-273.2, 635.0, 262.0, 633.2, 259.6, 638.3, 259.6, 636.7, 259.7, 636.7,
-259.5, 635.1, 272.9, 617.1, 258.6, 606.4, 257.6, 577.7, 257.4, 577.3,
-259.7, 576.6, 260.4, 574.9, 260.9, 573.4, 261.5, 573.7, 262.7, 572.5,
-280.7, 573.1, 282.9, 569.3, 298.6, 576.2, 262.7, 572.5, 268.3, 566.7,
-268.3, 566.7, 273.8, 561.0, 273.8, 561.4, 292.8, 571.7, 303.2, 566.1,
-300.9, 571.2, 300.9, 571.2, 298.6, 576.2, 282.9, 569.3, 280.7, 573.1,
-262.7, 572.5, 337.7, 440.2, 347.8, 446.7, 346.9, 448.6, 357.8, 453.2,
-357.2, 457.1, 357.2, 457.1, 356.6, 461.0, 347.1, 462.7, 342.5, 471.0,
-340.7, 482.8, 332.3, 484.2, 332.3, 484.2, 323.8, 485.7, 322.2, 463.5,
-322.7, 454.5, 337.7, 440.2, 323.8, 485.7, 322.6, 485.9, 322.1, 486.6,
-321.3, 486.1, 314.9, 482.3, 314.9, 482.3, 308.5, 478.6, 316.2, 449.0,
-300.8, 444.9, 293.0, 411.3, 314.6, 426.8, 315.4, 425.7, 337.7, 440.2,
-322.7, 454.5, 322.2, 463.5, 323.8, 485.7, 785.9, 267.8, 785.5, 278.9,
-785.8, 278.9, 785.1, 289.9, 784.5, 302.9, 783.8, 302.9, 784.0, 315.9,
-778.8, 309.5, 775.2, 302.3, 773.6, 303.1, 773.7, 303.0, 773.5, 302.8,
-773.3, 302.8, 771.1, 303.5, 770.3, 294.4, 764.8, 292.2, 766.2, 271.9,
-747.4, 270.5, 729.9, 248.9, 734.7, 250.8, 735.8, 247.9, 741.7, 247.0,
-764.7, 254.7, 769.5, 251.6, 785.9, 267.8, 741.7, 247.0, 756.5, 244.5,
-765.5, 235.9, 771.3, 242.0, 776.7, 243.5, 778.4, 241.6, 782.1, 244.9,
-784.3, 246.3, 784.3, 246.3, 786.5, 247.7, 786.0, 257.7, 786.2, 257.8,
-785.9, 267.8, 769.5, 251.6, 764.7, 254.7, 741.7, 247.0, 630.0, 617.0,
-628.7, 597.0, 628.7, 597.0, 627.3, 576.9, 629.8, 570.0, 629.6, 569.9,
-631.9, 562.9, 633.7, 589.8, 638.1, 592.3, 630.0, 617.0, 673.4, 583.9,
-681.1, 606.5, 673.2, 615.5, 688.7, 629.0, 686.2, 637.8, 686.2, 637.8,
-683.7, 646.7, 673.6, 617.0, 665.6, 611.6, 673.4, 583.9, 678.1, 758.1,
-677.2, 755.8, 677.2, 755.8, 676.3, 753.6, 685.8, 742.0, 677.7, 735.3,
-679.2, 717.0, 670.4, 723.5, 678.7, 734.6, 678.3, 752.1, 678.2, 755.1,
-679.6, 757.0, 678.1, 758.1, 614.2, 738.3, 614.3, 737.8, 614.3, 737.8,
-614.4, 737.3, 635.9, 744.3, 638.8, 746.9, 660.3, 742.5, 662.5, 744.5,
-662.4, 744.7, 664.7, 746.6, 667.7, 750.4, 667.7, 750.4, 670.7, 754.2,
-659.6, 770.2, 661.4, 771.4, 652.0, 788.7, 627.9, 781.9, 632.9, 763.7,
-614.2, 738.3, 652.0, 788.7, 644.6, 802.4, 641.6, 801.5, 637.1, 816.1,
-624.2, 786.6, 629.3, 783.0, 611.2, 757.1, 611.2, 757.0, 611.2, 757.0,
-611.1, 756.9, 613.5, 756.7, 612.7, 747.6, 614.2, 738.3, 632.9, 763.7,
-627.9, 781.9, 652.0, 788.7, 541.1, 501.8, 536.2, 506.6, 537.2, 509.1,
-531.4, 511.3, 521.8, 518.4, 518.9, 516.3, 512.1, 525.5, 508.3, 514.0,
-508.3, 514.0, 504.5, 502.6, 509.2, 496.3, 517.1, 502.3, 529.8, 502.0,
-535.4, 501.9, 540.9, 501.0, 541.1, 501.8, 235.2, 769.2, 234.5, 762.4,
-236.8, 761.2, 233.8, 755.6, 235.0, 751.5, 233.8, 748.3, 236.2, 747.4,
-237.6, 746.0, 237.6, 746.0, 239.0, 744.7, 238.4, 757.0, 240.3, 758.5,
-235.2, 769.2, 238.0, 796.2, 237.4, 790.6, 237.4, 790.6, 236.8, 784.9,
-241.5, 774.8, 244.1, 776.0, 251.5, 767.1, 255.0, 762.8, 255.0, 762.8,
-258.5, 758.5, 296.1, 712.6, 296.1, 712.7, 333.7, 666.8, 334.2, 666.2,
-334.6, 665.6, 334.6, 665.6, 334.6, 665.6, 334.2, 666.2, 333.7, 666.8,
-306.0, 704.2, 306.0, 704.2, 278.3, 741.7, 270.2, 752.7, 270.2, 752.7,
-262.0, 763.8, 250.0, 780.0, 253.0, 783.6, 238.0, 796.2, 660.5, 548.2,
-660.2, 549.1, 661.6, 549.4, 662.2, 550.8, 665.4, 554.2, 663.8, 555.6,
-665.5, 560.5, 664.0, 575.9, 661.9, 575.7, 658.3, 591.0, 652.1, 617.1,
-652.1, 617.1, 646.0, 643.2, 642.8, 656.7, 646.9, 659.5, 639.6, 670.2,
-636.4, 666.3, 632.8, 666.0, 633.1, 662.4, 632.6, 653.6, 632.5, 653.6,
-631.9, 644.9, 643.7, 595.9, 645.0, 596.2, 660.5, 548.2, 631.9, 644.9,
-631.0, 631.0, 631.0, 631.0, 630.0, 617.0, 638.1, 592.3, 633.7, 589.8,
-631.9, 562.9, 635.4, 552.2, 632.2, 549.5, 639.0, 541.4, 640.7, 537.4,
-643.4, 536.7, 642.5, 533.4, 649.4, 537.5, 656.1, 537.2, 656.3, 541.6,
-659.1, 543.9, 661.1, 545.5, 660.5, 548.2, 645.0, 596.2, 643.7, 595.9,
-631.9, 644.9, 655.4, 689.2, 647.5, 679.7, 647.5, 679.7, 639.6, 670.2,
-646.9, 659.5, 642.8, 656.7, 646.0, 643.2, 659.2, 659.2, 660.3, 668.5,
-655.4, 689.2, 679.2, 716.9, 679.9, 707.8, 684.3, 705.4, 680.6, 698.7,
-692.3, 698.0, 692.5, 699.2, 703.9, 697.2, 710.1, 708.1, 710.1, 708.1,
-716.3, 718.9, 705.5, 727.6, 697.8, 717.9, 679.2, 716.9, 679.2, 717.0,
-679.2, 717.0, 679.2, 717.0, 679.2, 717.0, 679.2, 717.0, 679.2, 716.9,
-679.2, 717.0, 679.2, 717.0, 679.2, 717.0, 679.2, 717.0, 679.2, 717.0,
-679.2, 716.9, 541.9, 459.0, 544.5, 467.9, 544.5, 467.9, 547.0, 476.8,
-546.9, 481.5, 546.7, 481.7, 547.9, 486.2, 547.8, 490.8, 547.8, 490.8,
-547.6, 495.4, 543.7, 496.9, 544.4, 498.6, 541.1, 501.8, 540.9, 501.0,
-535.4, 501.9, 529.8, 502.0, 530.2, 480.4, 530.0, 476.5, 541.9, 459.0,
-529.8, 502.0, 517.1, 502.3, 509.2, 496.3, 504.5, 502.6, 501.4, 493.6,
-495.6, 487.0, 498.4, 484.5, 499.7, 482.2, 499.7, 482.2, 501.0, 479.8,
-499.2, 474.1, 511.1, 470.5, 521.2, 461.3, 520.4, 458.7, 531.8, 457.4,
-539.5, 450.4, 540.7, 454.7, 540.7, 454.7, 541.9, 459.0, 530.0, 476.5,
-530.2, 480.4, 529.8, 502.0, 251.5, 767.1, 244.1, 776.0, 241.5, 774.8,
-236.8, 784.9, 236.2, 779.1, 236.2, 779.1, 235.6, 773.3, 240.3, 767.5,
-251.7, 769.3, 251.5, 767.1, 658.3, 591.0, 661.9, 575.7, 664.0, 575.9,
-665.5, 560.5, 669.5, 572.2, 669.5, 572.2, 673.4, 583.9, 665.6, 611.6,
-673.6, 617.0, 683.7, 646.7, 680.8, 656.7, 683.9, 659.1, 678.0, 666.8,
-674.1, 673.6, 674.1, 673.6, 670.2, 680.4, 659.0, 637.1, 660.1, 635.9,
-658.3, 591.0, 670.2, 680.4, 665.7, 688.3, 664.7, 687.9, 661.2, 696.3,
-658.3, 692.8, 658.3, 692.8, 655.4, 689.2, 660.3, 668.5, 659.2, 659.2,
-646.0, 643.2, 652.1, 617.1, 652.1, 617.1, 658.3, 591.0, 660.1, 635.9,
-659.0, 637.1, 670.2, 680.4, 713.4, 763.0, 709.0, 767.6, 709.6, 768.3,
-704.6, 772.1, 704.0, 772.6, 704.1, 772.7, 703.6, 773.3, 698.9, 778.5,
-698.7, 778.3, 693.8, 783.4, 694.9, 781.9, 689.7, 778.1, 685.5, 772.8,
-680.8, 769.9, 682.5, 767.1, 679.5, 761.5, 678.6, 759.8, 678.8, 759.8,
-678.1, 758.1, 679.6, 757.0, 678.2, 755.1, 678.3, 752.1, 696.3, 754.7,
-699.7, 752.5, 713.4, 763.0, 284.9, 700.5, 315.7, 670.8, 315.7, 670.8,
-346.4, 641.2, 344.6, 644.3, 346.8, 645.6, 347.1, 650.0, 347.1, 650.3,
-347.0, 650.3, 346.9, 650.6, 345.3, 652.8, 345.2, 652.7, 343.5, 654.8,
-339.0, 660.2, 339.0, 660.2, 334.6, 665.6, 296.6, 712.0, 305.8, 725.3,
-258.5, 758.5, 281.0, 742.7, 266.3, 725.4, 284.9, 700.5, 258.5, 758.5,
-255.0, 762.8, 255.0, 762.8, 251.5, 767.1, 251.7, 769.3, 240.3, 767.5,
-235.6, 773.3, 235.4, 771.3, 235.4, 771.3, 235.2, 769.2, 240.3, 758.5,
-238.4, 757.0, 239.0, 744.7, 262.0, 722.6, 262.0, 722.6, 284.9, 700.5,
-266.3, 725.4, 281.0, 742.7, 258.5, 758.5, 262.0, 763.8, 270.2, 752.7,
-270.2, 752.7, 278.3, 741.7, 282.8, 773.8, 273.3, 775.1, 268.2, 808.5,
-264.9, 830.4, 264.9, 830.4, 261.6, 852.3, 261.6, 852.8, 261.7, 852.9,
-261.5, 853.3, 260.7, 854.9, 259.4, 855.5, 259.8, 856.5, 255.4, 849.5,
-255.4, 849.5, 251.0, 842.4, 251.9, 803.0, 251.7, 801.8, 262.0, 763.8,
-251.0, 842.4, 247.3, 836.7, 244.0, 836.8, 243.7, 830.9, 241.5, 818.6,
-234.4, 814.0, 239.4, 806.4, 240.0, 804.4, 239.0, 804.0, 238.5, 801.7,
-238.0, 799.0, 238.3, 799.0, 238.0, 796.2, 253.0, 783.6, 250.0, 780.0,
-262.0, 763.8, 251.7, 801.8, 251.9, 803.0, 251.0, 842.4, 719.8, 756.4,
-716.6, 759.7, 716.6, 759.7, 713.4, 763.0, 699.7, 752.5, 696.3, 754.7,
-678.3, 752.1, 678.7, 734.6, 670.4, 723.5, 679.2, 717.0, 679.2, 717.0,
-679.2, 717.0, 679.2, 716.9, 697.8, 717.9, 705.5, 727.6, 716.3, 718.9,
-717.3, 720.6, 717.3, 720.6, 718.2, 722.2, 719.8, 739.2, 721.7, 739.6,
-719.8, 756.4, 718.2, 722.2, 724.7, 733.4, 721.4, 738.3, 731.1, 744.7,
-725.4, 750.5, 725.4, 750.5, 719.8, 756.4, 721.7, 739.6, 719.8, 739.2,
-718.2, 722.2, 333.7, 666.8, 334.2, 666.2, 334.6, 665.6, 334.6, 665.6,
-339.0, 660.2, 339.0, 660.2, 343.5, 654.8, 342.0, 665.7, 338.4, 665.2,
-333.3, 675.6, 324.0, 694.6, 315.7, 694.2, 314.7, 713.7, 315.9, 689.8,
-324.0, 690.2, 333.7, 666.8, 314.7, 713.7, 292.5, 761.6, 305.7, 779.6,
-268.2, 808.5, 273.3, 775.1, 282.8, 773.8, 278.3, 741.7, 306.0, 704.2,
-306.0, 704.2, 333.7, 666.8, 324.0, 690.2, 315.9, 689.8, 314.7, 713.7,
-333.3, 675.6, 338.4, 665.2, 342.0, 665.7, 343.5, 654.8, 345.2, 652.7,
-345.3, 652.8, 346.9, 650.6, 335.4, 692.2, 334.6, 692.0, 324.0, 733.9,
-298.0, 795.3, 292.6, 793.0, 261.6, 852.3, 261.6, 852.8, 261.7, 852.9,
-261.5, 853.3, 261.7, 852.9, 261.6, 852.8, 261.6, 852.3, 297.4, 763.9,
-296.8, 763.7, 333.3, 675.6, 261.6, 852.3, 264.9, 830.4, 264.9, 830.4,
-268.2, 808.5, 305.7, 779.6, 292.5, 761.6, 314.7, 713.7, 315.7, 694.2,
-324.0, 694.6, 333.3, 675.6, 296.8, 763.7, 297.4, 763.9, 261.6, 852.3
-};
diff --git a/perf/micro/paint-with-alpha.c b/perf/micro/paint-with-alpha.c
deleted file mode 100644
index 047e35c43..000000000
--- a/perf/micro/paint-with-alpha.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_paint_with_alpha (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_paint_with_alpha (cr, 0.5);
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static double
-count_paint_with_alpha (cairo_t *cr, int width, int height)
-{
- return width * height / 1e6; /* Mpix/s */
-}
-
-cairo_bool_t
-paint_with_alpha_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "paint-with-alpha", NULL);
-}
-
-void
-paint_with_alpha (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "paint-with-alpha",
- do_paint_with_alpha,
- count_paint_with_alpha);
-}
diff --git a/perf/micro/paint.c b/perf/micro/paint.c
deleted file mode 100644
index 2a59a45e0..000000000
--- a/perf/micro/paint.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_paint (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_paint (cr);
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static double
-count_paint (cairo_t *cr, int width, int height)
-{
- return width * height / 1e6; /* Mpix/s */
-}
-
-cairo_bool_t
-paint_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "paint", NULL);
-}
-
-void
-paint (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "paint", do_paint, count_paint);
-}
diff --git a/perf/micro/pattern_create_radial.c b/perf/micro/pattern_create_radial.c
deleted file mode 100644
index 3915efb9a..000000000
--- a/perf/micro/pattern_create_radial.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright © 2006 Dan Amelang
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Dan Amelang <dan@amelang.net>
- *
- * This test was originally created to test _cairo_fixed_from_double.
- * cairo_pattern_create_radial was selected as the entry point into
- * cairo as it makes several calls to _cairo_fixed_from_double and
- * presents a somewhat realistic use-case (although the RADIALS_COUNT
- * isn't very realistic).
- */
-#include "cairo-perf.h"
-#include <time.h>
-
-#define RADIALS_COUNT (10000)
-
-static struct
-{
- double cx0;
- double cy0;
- double radius0;
- double cx1;
- double cy1;
- double radius1;
-} radials[RADIALS_COUNT];
-
-static double
-generate_double_in_range (double min, double max)
-{
- double d;
-
- d = rand () / (double) RAND_MAX;
- d *= max - min;
- d += min;
-
- return d;
-}
-
-static cairo_time_t
-do_pattern_create_radial (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_pattern_t *pattern;
- int i;
-
- for (i = 0; i < RADIALS_COUNT; i++) {
- pattern =
- cairo_pattern_create_radial (radials[i].cx0, radials[i].cy0,
- radials[i].radius0,
- radials[i].cx1, radials[i].cy1,
- radials[i].radius1);
- cairo_pattern_destroy (pattern);
- }
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-pattern_create_radial_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "pattern-create-radial", NULL);
-}
-
-void
-pattern_create_radial (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- int i;
-
- srand (time (0));
- for (i = 0; i < RADIALS_COUNT; i++)
- {
- radials[i].cx0 = generate_double_in_range (-50000.0, 50000.0);
- radials[i].cy0 = generate_double_in_range (-50000.0, 50000.0);
- radials[i].radius0 = generate_double_in_range (0.0, 1000.0);
- radials[i].cx1 = generate_double_in_range (-50000.0, 50000.0);
- radials[i].cy1 = generate_double_in_range (-50000.0, 50000.0);
- radials[i].radius1 = generate_double_in_range (0.0, 1000.0);
- }
-
- cairo_perf_run (perf, "pattern-create-radial",
- do_pattern_create_radial, NULL);
-}
diff --git a/perf/micro/pixel.c b/perf/micro/pixel.c
deleted file mode 100644
index b600b5170..000000000
--- a/perf/micro/pixel.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-/* Measure the overhead in setting a single pixel */
-
-#include "cairo-perf.h"
-
-#include <pixman.h>
-
-static cairo_time_t
-pixel_direct (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *surface, *image;
- uint32_t *data;
- int stride, bpp;
-
- surface = cairo_get_target (cr);
- image = cairo_surface_map_to_image (surface, NULL);
- data = (uint32_t *) cairo_image_surface_get_data (image);
- stride = cairo_image_surface_get_stride (image) / sizeof (uint32_t);
-
- switch (cairo_image_surface_get_format (image)) {
- default:
- case CAIRO_FORMAT_INVALID:
- case CAIRO_FORMAT_A1: bpp = 0; break;
- case CAIRO_FORMAT_A8: bpp = 8; break;
- case CAIRO_FORMAT_RGB16_565: bpp = 16; break;
- case CAIRO_FORMAT_RGB24:
- case CAIRO_FORMAT_RGB30:
- case CAIRO_FORMAT_ARGB32: bpp = 32; break;
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- pixman_fill (data, stride, bpp, 0, 0, 1, 1, -1);
-
- cairo_perf_timer_stop ();
-
- cairo_surface_unmap_image (surface, image);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_paint (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_paint (cr);
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_mask (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *mask;
- cairo_t *cr2;
-
- mask = cairo_surface_create_similar (cairo_get_target (cr),
- CAIRO_CONTENT_ALPHA,
- 1, 1);
- cr2 = cairo_create (mask);
- cairo_set_source_rgb (cr2, 1,1,1);
- cairo_paint (cr2);
- cairo_destroy (cr2);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_mask_surface (cr, mask, 0, 0);
-
- cairo_perf_timer_stop ();
-
- cairo_surface_destroy (mask);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_rectangle (cairo_t *cr, int width, int height, int loops)
-{
- cairo_new_path (cr);
- cairo_rectangle (cr, 0, 0, 1, 1);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_subrectangle (cairo_t *cr, int width, int height, int loops)
-{
- cairo_new_path (cr);
- cairo_rectangle (cr, 0.1, 0.1, .8, .8);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_triangle (cairo_t *cr, int width, int height, int loops)
-{
- cairo_new_path (cr);
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, 1, 1);
- cairo_line_to (cr, 0, 1);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_circle (cairo_t *cr, int width, int height, int loops)
-{
- cairo_new_path (cr);
- cairo_arc (cr, 0.5, 0.5, 0.5, 0, 2 * M_PI);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-pixel_stroke (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_line_width (cr, 1.);
- cairo_new_path (cr);
- cairo_move_to (cr, 0, 0.5);
- cairo_line_to (cr, 1, 0.5);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-pixel_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "pixel", NULL);
-}
-
-void
-pixel (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
-
- cairo_perf_run (perf, "pixel-direct", pixel_direct, NULL);
- cairo_perf_run (perf, "pixel-paint", pixel_paint, NULL);
- cairo_perf_run (perf, "pixel-mask", pixel_mask, NULL);
- cairo_perf_run (perf, "pixel-rectangle", pixel_rectangle, NULL);
- cairo_perf_run (perf, "pixel-subrectangle", pixel_subrectangle, NULL);
- cairo_perf_run (perf, "pixel-triangle", pixel_triangle, NULL);
- cairo_perf_run (perf, "pixel-circle", pixel_circle, NULL);
- cairo_perf_run (perf, "pixel-stroke", pixel_stroke, NULL);
-}
-
-cairo_bool_t
-a1_pixel_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "a1-pixel", NULL);
-}
-
-void
-a1_pixel (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
-
- cairo_perf_run (perf, "a1-pixel-direct", pixel_direct, NULL);
- cairo_perf_run (perf, "a1-pixel-paint", pixel_paint, NULL);
- cairo_perf_run (perf, "a1-pixel-mask", pixel_mask, NULL);
- cairo_perf_run (perf, "a1-pixel-rectangle", pixel_rectangle, NULL);
- cairo_perf_run (perf, "a1-pixel-subrectangle", pixel_subrectangle, NULL);
- cairo_perf_run (perf, "a1-pixel-triangle", pixel_triangle, NULL);
- cairo_perf_run (perf, "a1-pixel-circle", pixel_circle, NULL);
- cairo_perf_run (perf, "a1-pixel-stroke", pixel_stroke, NULL);
-}
diff --git a/perf/micro/pythagoras-tree.c b/perf/micro/pythagoras-tree.c
deleted file mode 100644
index 9d3ca1155..000000000
--- a/perf/micro/pythagoras-tree.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright © 2007 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Chris Wilson not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Chris Wilson makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * CHRIS WILSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL CHRIS WILSON BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-#define _USE_MATH_DEFINES /* for M_SQRT2 on win32 */
-#include <math.h>
-
-static void
-add_rectangle (cairo_t *cr, double size)
-{
- double x, y;
-
- if (size < 1)
- return;
-
- cairo_get_current_point (cr, &x, &y);
-
- cairo_rel_move_to (cr, -size/2., -size/2.);
- cairo_rel_line_to (cr, size, 0);
- cairo_rel_line_to (cr, 0, size);
- cairo_rel_line_to (cr, -size, 0);
- cairo_close_path (cr);
-
- cairo_save (cr);
- cairo_translate (cr, -size/2., size);
- cairo_move_to (cr, x, y);
- cairo_rotate (cr, M_PI/4);
- add_rectangle (cr, size / M_SQRT2);
- cairo_restore (cr);
-
- cairo_save (cr);
- cairo_translate (cr, size/2., size);
- cairo_move_to (cr, x, y);
- cairo_rotate (cr, -M_PI/4);
- add_rectangle (cr, size / M_SQRT2);
- cairo_restore (cr);
-}
-
-static cairo_time_t
-do_pythagoras_tree (cairo_t *cr, int width, int height, int loops)
-{
- double size = 128;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_save (cr);
- cairo_translate (cr, 0, height);
- cairo_scale (cr, 1, -1);
-
- cairo_move_to (cr, width/2, size/2);
- add_rectangle (cr, size);
- cairo_set_source_rgb (cr, 0., 0., 0.);
- cairo_fill (cr);
- cairo_restore (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-pythagoras_tree_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "pythagoras-tree", NULL);
-}
-
-void
-pythagoras_tree (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "pythagoras-tree", do_pythagoras_tree, NULL);
-}
diff --git a/perf/micro/rectangles.c b/perf/micro/rectangles.c
deleted file mode 100644
index 9228a4efa..000000000
--- a/perf/micro/rectangles.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright © 2006 Dan Amelang
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Dan Amelang <dan@amelang.net>
- */
-#include "cairo-perf.h"
-
-#if 0
-#define MODE cairo_perf_run
-#else
-#define MODE cairo_perf_cover_sources_and_operators
-#endif
-
-#define RECTANGLE_COUNT (1000)
-
-static struct {
- double x;
- double y;
- double width;
- double height;
-} rects[RECTANGLE_COUNT];
-
-static cairo_time_t
-do_rectangles (cairo_t *cr, int width, int height, int loops)
-{
- int i;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- for (i = 0; i < RECTANGLE_COUNT; i++) {
- cairo_rectangle (cr, rects[i].x, rects[i].y,
- rects[i].width, rects[i].height);
- cairo_fill (cr);
- }
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_rectangles_once (cairo_t *cr, int width, int height, int loops)
-{
- int i;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- for (i = 0; i < RECTANGLE_COUNT; i++) {
- cairo_rectangle (cr, rects[i].x, rects[i].y,
- rects[i].width, rects[i].height);
- }
-
- cairo_fill (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_rectangle (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_fill (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-rectangles_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "rectangles", NULL);
-}
-
-void
-rectangles (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- int i;
-
- srand (8478232);
- for (i = 0; i < RECTANGLE_COUNT; i++)
- {
- rects[i].x = rand () % width;
- rects[i].y = rand () % height;
- rects[i].width = (rand () % (width / 10)) + 1;
- rects[i].height = (rand () % (height / 10)) + 1;
- }
-
- MODE (perf, "one-rectangle", do_rectangle, NULL);
- MODE (perf, "rectangles", do_rectangles, NULL);
- MODE (perf, "rectangles-once", do_rectangles_once, NULL);
-}
diff --git a/perf/micro/rounded-rectangles.c b/perf/micro/rounded-rectangles.c
deleted file mode 100644
index 1e432dd1f..000000000
--- a/perf/micro/rounded-rectangles.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright © 2005 Owen Taylor
- * Copyright © 2007 Dan Amelang
- * Copyright © 2007 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * the authors not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. The authors make no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-/* This perf case is derived from the bug report
- * Gradient on 'rounded rectangle' MUCH slower than normal rectangle
- * https://bugs.freedesktop.org/show_bug.cgi?id=4263.
- */
-
-#include "cairo-perf.h"
-
-#define RECTANGLE_COUNT (1000)
-
-#if 0
-#define MODE cairo_perf_run
-#else
-#define MODE cairo_perf_cover_sources_and_operators
-#endif
-
-static struct
-{
- double x;
- double y;
- double width;
- double height;
-} rects[RECTANGLE_COUNT];
-
-static void
-rounded_rectangle (cairo_t *cr,
- double x, double y, double w, double h,
- double radius)
-{
- cairo_move_to (cr, x+radius, y);
- cairo_arc (cr, x+w-radius, y+radius, radius, M_PI + M_PI / 2, M_PI * 2 );
- cairo_arc (cr, x+w-radius, y+h-radius, radius, 0, M_PI / 2 );
- cairo_arc (cr, x+radius, y+h-radius, radius, M_PI/2, M_PI );
- cairo_arc (cr, x+radius, y+radius, radius, M_PI, 270 * M_PI / 180);
-}
-
-static cairo_time_t
-do_rectangle (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--) {
- rounded_rectangle (cr, 0, 0, width, height, 3.0);
- cairo_fill (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_rectangles (cairo_t *cr, int width, int height, int loops)
-{
- int i;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- for (i = 0; i < RECTANGLE_COUNT; i++) {
- rounded_rectangle (cr,
- rects[i].x, rects[i].y,
- rects[i].width, rects[i].height,
- 3.0);
- cairo_fill (cr);
- }
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_rectangles_once (cairo_t *cr, int width, int height, int loops)
-{
- int i;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- for (i = 0; i < RECTANGLE_COUNT; i++) {
- rounded_rectangle (cr,
- rects[i].x, rects[i].y,
- rects[i].width, rects[i].height,
- 3.0);
- }
- cairo_fill (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-rounded_rectangles_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "rounded-rectangles", NULL);
-}
-
-void
-rounded_rectangles (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- int i;
-
- srand (8478232);
- for (i = 0; i < RECTANGLE_COUNT; i++) {
- rects[i].x = rand () % width;
- rects[i].y = rand () % height;
- rects[i].width = (rand () % (width / 10)) + 1;
- rects[i].height = (rand () % (height / 10)) + 1;
- }
-
- MODE (perf, "one-rounded-rectangle", do_rectangle, NULL);
- MODE (perf, "rounded-rectangles", do_rectangles, NULL);
- MODE (perf, "rounded-rectangles-once", do_rectangles_once, NULL);
-}
diff --git a/perf/micro/sierpinski.c b/perf/micro/sierpinski.c
deleted file mode 100644
index c6f5fadc2..000000000
--- a/perf/micro/sierpinski.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static const double m_1_sqrt_3 = 0.577359269;
-
-static void
-T (cairo_t *cr, int size)
-{
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, size, 0);
- cairo_line_to (cr, size/2, size*m_1_sqrt_3);
-
- size /= 2;
- if (size >= 4) {
- T (cr, size);
- cairo_save (cr); {
- cairo_translate (cr, size, 0);
- T (cr, size);
- } cairo_restore (cr);
- cairo_save (cr); {
- cairo_translate (cr, size/2, size*m_1_sqrt_3);
- T (cr, size);
- } cairo_restore (cr);
- }
-}
-
-static cairo_time_t
-draw (cairo_t *cr, int width, int height, int loops)
-{
- int t_height = height/2;
- int t_width = t_height / m_1_sqrt_3;
-
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_paint (cr);
-
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_set_line_width (cr, 1.);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_save (cr);
- T (cr, t_width);
-
- cairo_translate (cr, 0, height);
- cairo_scale (cr, 1, -1);
-
- T (cr, t_width);
-
- cairo_stroke (cr);
- cairo_restore (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-sierpinski_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "sierpinski", NULL);
-}
-
-void
-sierpinski (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "sierpinski", draw, NULL);
-}
diff --git a/perf/micro/spiral.c b/perf/micro/spiral.c
deleted file mode 100644
index 5db62b0d7..000000000
--- a/perf/micro/spiral.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
-/* cairo - a vector graphics library with display and print output
- *
- * Copyright (c) 2008 M Joonas Pihlaja
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-#include "cairo-perf.h"
-#include <assert.h>
-
-#define MAX_SEGMENTS 2560
-
-typedef enum {
- PIXALIGN, /* pixel aligned path */
- NONALIGN /* unaligned path. */
-} align_t;
-
-typedef enum {
- RECTCLOSE, /* keeps the path rectilinear */
- DIAGCLOSE /* forces a diagonal */
-} close_t;
-
-static cairo_time_t
-draw_spiral (cairo_t *cr,
- cairo_fill_rule_t fill_rule,
- align_t align,
- close_t close,
- int width, int height, int loops)
-{
- int i;
- int n=0;
- double x[MAX_SEGMENTS];
- double y[MAX_SEGMENTS];
- int step = 3;
- int side = width < height ? width : height;
-
- assert(5*(side/step/2+1)+2 < MAX_SEGMENTS);
-
-#define L(x_,y_) (x[n] = (x_), y[n] = (y_), n++)
-#define M(x_,y_) L(x_,y_)
-#define v(t) L(x[n-1], y[n-1] + (t))
-#define h(t) L(x[n-1] + (t), y[n-1])
-
- switch (align) {
- case PIXALIGN: M(0,0); break;
- case NONALIGN: M(0.1415926, 0.7182818); break;
- }
-
- while (side >= step && side >= 0) {
- v(side);
- h(side);
- v(-side);
- h(-side+step);
- v(step);
- side -= 2*step;
- }
-
- switch (close) {
- case RECTCLOSE: L(x[n-1],y[0]); break;
- case DIAGCLOSE: L(x[0],y[0]); break;
- }
-
- assert(n < MAX_SEGMENTS);
-
- cairo_save (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_paint (cr);
-
- cairo_translate (cr, 1, 1);
- cairo_set_fill_rule (cr, fill_rule);
- cairo_set_source_rgb (cr, 1, 0, 0);
-
- cairo_new_path (cr);
- cairo_move_to (cr, x[0], y[0]);
- for (i = 1; i < n; i++) {
- cairo_line_to (cr, x[i], y[i]);
- }
- cairo_close_path (cr);
-
- cairo_perf_timer_start ();
- while (loops--)
- cairo_fill_preserve (cr);
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-draw_spiral_box (cairo_t *cr,
- cairo_fill_rule_t fill_rule,
- align_t align,
- int width, int height, int loops)
-{
- const int step = 3;
- int side = (width < height ? width : height) - 2;
-
- cairo_save (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_paint (cr);
-
- cairo_set_source_rgb (cr, 1, 0, 0);
- cairo_set_fill_rule (cr, fill_rule);
- cairo_translate (cr, 1, 1);
- if (align == NONALIGN)
- cairo_translate (cr, 0.1415926, 0.7182818);
-
- cairo_new_path (cr);
- while (side >= step) {
- cairo_rectangle (cr, 0, 0, side, side);
- cairo_translate (cr, step, step);
- side -= 2*step;
- }
-
- cairo_perf_timer_start ();
- while (loops--)
- cairo_fill_preserve (cr);
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-draw_spiral_stroke (cairo_t *cr,
- align_t align,
- int width, int height, int loops)
-{
- const int step = 3;
- int side = width < height ? width : height;
-
- cairo_save (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_paint (cr);
-
- cairo_translate (cr, 1, 1);
- cairo_set_source_rgb (cr, 1, 0, 0);
- cairo_set_line_width (cr, 4.);
- cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-
- cairo_new_path (cr);
- switch (align) {
- case PIXALIGN: cairo_move_to (cr, 0,0); break;
- case NONALIGN: cairo_move_to (cr, 0.1415926, 0.7182818); break;
- }
- while (side >= step) {
- cairo_rel_line_to (cr, 0, side);
- side -= step;
- if (side <= 0)
- break;
-
- cairo_rel_line_to (cr, side, 0);
- side -= step;
- if (side <= 0)
- break;
-
- cairo_rel_line_to (cr, 0, -side);
- side -= step;
- if (side <= 0)
- break;
-
- cairo_rel_line_to (cr, -side, 0);
- side -= step;
- if (side <= 0)
- break;
- }
-
- cairo_perf_timer_start ();
- while (loops--)
- cairo_stroke_preserve (cr);
- cairo_perf_timer_stop ();
-
- cairo_restore (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-draw_spiral_eo_pa_re (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_EVEN_ODD,
- PIXALIGN,
- RECTCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_nz_pa_re (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_WINDING,
- PIXALIGN,
- RECTCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_eo_na_re (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_EVEN_ODD,
- NONALIGN,
- RECTCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_nz_na_re (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_WINDING,
- NONALIGN,
- RECTCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_eo_pa_di (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_EVEN_ODD,
- PIXALIGN,
- DIAGCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_nz_pa_di (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_WINDING,
- PIXALIGN,
- DIAGCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_eo_na_di (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_EVEN_ODD,
- NONALIGN,
- DIAGCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_nz_na_di (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral (cr,
- CAIRO_FILL_RULE_WINDING,
- NONALIGN,
- DIAGCLOSE,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_nz_pa_box (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral_box (cr,
- CAIRO_FILL_RULE_WINDING, PIXALIGN,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_nz_na_box (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral_box (cr,
- CAIRO_FILL_RULE_WINDING, NONALIGN,
- width, height, loops);
-}
-
-
-static cairo_time_t
-draw_spiral_eo_pa_box (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral_box (cr,
- CAIRO_FILL_RULE_EVEN_ODD, PIXALIGN,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_eo_na_box (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral_box (cr,
- CAIRO_FILL_RULE_EVEN_ODD, NONALIGN,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_stroke_pa (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral_stroke (cr,
- PIXALIGN,
- width, height, loops);
-}
-
-static cairo_time_t
-draw_spiral_stroke_na (cairo_t *cr, int width, int height, int loops)
-{
- return draw_spiral_stroke (cr,
- NONALIGN,
- width, height, loops);
-}
-
-cairo_bool_t
-spiral_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "spiral", NULL);
-}
-
-void
-spiral (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "spiral-box-nonalign-evenodd-fill", draw_spiral_eo_na_box, NULL);
- cairo_perf_run (perf, "spiral-box-nonalign-nonzero-fill", draw_spiral_nz_na_box, NULL);
- cairo_perf_run (perf, "spiral-box-pixalign-evenodd-fill", draw_spiral_eo_pa_box, NULL);
- cairo_perf_run (perf, "spiral-box-pixalign-nonzero-fill", draw_spiral_nz_pa_box, NULL);
- cairo_perf_run (perf, "spiral-diag-nonalign-evenodd-fill", draw_spiral_eo_na_di, NULL);
- cairo_perf_run (perf, "spiral-diag-nonalign-nonzero-fill", draw_spiral_nz_na_di, NULL);
- cairo_perf_run (perf, "spiral-diag-pixalign-evenodd-fill", draw_spiral_eo_pa_di, NULL);
- cairo_perf_run (perf, "spiral-diag-pixalign-nonzero-fill", draw_spiral_nz_pa_di, NULL);
- cairo_perf_run (perf, "spiral-rect-nonalign-evenodd-fill", draw_spiral_eo_na_re, NULL);
- cairo_perf_run (perf, "spiral-rect-nonalign-nonzero-fill", draw_spiral_nz_na_re, NULL);
- cairo_perf_run (perf, "spiral-rect-pixalign-evenodd-fill", draw_spiral_eo_pa_re, NULL);
- cairo_perf_run (perf, "spiral-rect-pixalign-nonzero-fill", draw_spiral_nz_pa_re, NULL);
- cairo_perf_run (perf, "spiral-nonalign-stroke", draw_spiral_stroke_na, NULL);
- cairo_perf_run (perf, "spiral-pixalign-stroke", draw_spiral_stroke_pa, NULL);
-}
diff --git a/perf/micro/stroke.c b/perf/micro/stroke.c
deleted file mode 100644
index 4b2954770..000000000
--- a/perf/micro/stroke.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_stroke (cairo_t *cr, int width, int height, int loops)
-{
- cairo_arc (cr,
- width/2.0, height/2.0,
- width/3.0,
- 0, 2 * M_PI);
- cairo_close_path (cr);
-
- cairo_set_line_width (cr, width/5.0);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static void
-rounded_rectangle (cairo_t *cr,
- double x, double y, double w, double h,
- double radius)
-{
- cairo_move_to (cr, x+radius, y);
- cairo_arc (cr, x+w-radius, y+radius, radius, M_PI + M_PI / 2, M_PI * 2 );
- cairo_arc (cr, x+w-radius, y+h-radius, radius, 0, M_PI / 2 );
- cairo_arc (cr, x+radius, y+h-radius, radius, M_PI/2, M_PI );
- cairo_arc (cr, x+radius, y+radius, radius, M_PI, 270 * M_PI / 180);
-}
-
-static cairo_time_t
-do_strokes (cairo_t *cr, int width, int height, int loops)
-{
- /* a pair of overlapping rectangles */
- rounded_rectangle (cr,
- 2, 2, width/2. + 10, height/2. + 10,
- 10);
- rounded_rectangle (cr,
- width/2. - 10, height/2. - 10,
- width/2. - 2, height/2. - 2,
- 10);
-
- cairo_set_line_width (cr, 2.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-stroke_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "stroke", NULL);
-}
-
-void
-stroke (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "stroke", do_stroke, NULL);
- cairo_perf_cover_sources_and_operators (perf, "strokes", do_strokes, NULL);
-}
diff --git a/perf/micro/subimage_copy.c b/perf/micro/subimage_copy.c
deleted file mode 100644
index e749c062f..000000000
--- a/perf/micro/subimage_copy.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-/* This case exposes a performance bug found by Christopher "Monty"
- * Montgomery in that copying a tiny portion of an image surface to an
- * X surface causes the entire image surface to be copied to an
- * intermediate surface.
- *
- * If the performance bug is fixed, then the time this test takes
- * should be independent of the source and destination surface sizes.
- */
-
-static cairo_time_t
-do_subimage_copy (cairo_t *cr, int width, int height, int loops)
-{
- cairo_rectangle (cr, 2, 2, 4, 4);
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-subimage_copy_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "subimage-copy", NULL);
-}
-
-void
-subimage_copy (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_surface_t *image;
- cairo_t *cr2;
-
- cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
- cairo_paint (cr);
-
- image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
- cr2 = cairo_create (image);
- cairo_set_source_rgb (cr2, 1, 0, 0); /* red */
- cairo_paint (cr2);
- cairo_destroy (cr2);
-
- cairo_set_source_surface (cr, image, 0, 0);
- cairo_surface_destroy (image);
-
- cairo_perf_run (perf, "subimage-copy", do_subimage_copy, NULL);
-}
diff --git a/perf/micro/tessellate.c b/perf/micro/tessellate.c
deleted file mode 100644
index b6277fe63..000000000
--- a/perf/micro/tessellate.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-typedef struct {
- double x;
- double y;
-} point_t;
-
-point_t points[300] = {
- {39.4383,84.0188}, {79.844,78.3099}, {19.7551,91.1647}, {76.823,33.5223}, {55.397,27.7775},
- {62.8871,47.7397}, {51.3401,36.4784}, {91.6195,95.223}, {71.7297,63.5712}, {60.6969,14.1603},
- {24.2887,1.63006}, {80.4177,13.7232}, {40.0944,15.6679}, {10.8809,12.979}, {21.8257,99.8925},
- {83.9112,51.2932}, {29.6032,61.264}, {52.4287,63.7552}, {97.2775,49.3583}, {77.1358,29.2517},
- {76.9914,52.6745}, {89.1529,40.0229}, {35.2458,28.3315}, {91.9026,80.7725}, {94.9327,6.97553},
- {8.60558,52.5995}, {66.3227,19.2214}, {34.8893,89.0233}, {2.0023,6.41713}, {6.30958,45.7702},
- {97.0634,23.828}, {85.092,90.2208}, {53.976,26.6666}, {76.0249,37.5207}, {66.7724,51.2535},
- {3.92803,53.1606}, {93.1835,43.7638}, {72.0952,93.081}, {73.8534,28.4293}, {35.4049,63.9979},
- {16.5974,68.7861}, {88.0075,44.0105}, {33.0337,82.9201}, {89.3372,22.8968}, {68.667,35.036},
- {58.864,95.6468}, {85.8676,65.7304}, {92.397,43.956}, {81.4767,39.8437}, {91.0972,68.4219},
-
- {21.5825,48.2491}, {92.0128,95.0252}, {88.1062,14.766}, {43.1953,64.1081}, {28.1059,61.9596},
- {30.7458,78.6002}, {22.6107,44.7034}, {27.6235,18.7533}, {41.6501,55.6444}, {90.6804,16.9607},
- {12.6075,10.3171}, {76.0475,49.5444}, {93.5004,98.4752}, {38.3188,68.4445}, {36.8664,74.9771},
- {23.2262,29.416}, {24.4413,58.4489}, {73.2149,15.239}, {79.347,12.5475}, {74.5071,16.4102},
- {95.0104,7.45298}, {52.1563,5.25293}, {24.0062,17.6211}, {73.2654,79.7798}, {96.7405,65.6564},
- {75.9735,63.9458}, {13.4902,9.34805}, {7.82321,52.021}, {20.4655,6.99064}, {81.9677,46.142},
- {75.5581,57.3319}, {15.7807,5.19388}, {20.4329,99.9994}, {12.5468,88.9956}, {5.40576,99.7799},
- {7.23288,87.054}, {92.3069,0.416161}, {18.0372,59.3892}, {39.169,16.3131}, {81.9695,91.3027},
- {55.2485,35.9095}, {45.2576,57.943}, {9.96401,68.7387}, {75.7294,53.0808}, {99.2228,30.4295},
- {87.7614,57.6971}, {62.891,74.7809}, {74.7803,3.54209}, {92.5377,83.3239}, {83.1038,87.3271},
-
- {74.3811,97.9434}, {98.3596,90.3366}, {49.7259,66.688}, {83.0012,16.3968}, {7.69947,88.8949},
- {24.8044,64.9707}, {22.9137,62.948}, {31.6867,70.062}, {23.1428,32.8777}, {63.3072,7.4161},
- {65.1132,22.3656}, {97.1466,51.0686}, {54.6107,28.0042}, {11.3281,71.9269}, {59.254,47.1483},
- {45.0918,94.4318}, {84.7684,33.6351}, {0.323146,43.4513}, {59.8481,34.4943}, {23.3892,83.3243},
- {48.295,67.5476}, {30.4956,48.1936}, {18.2556,71.2087}, {4.08643,62.1823}, {69.5984,41.3984},
- {63.764,67.3936}, {18.4622,34.7116}, {62.7158,60.9106}, {32.8374,73.0729}, {20.2213,74.0438},
- {68.4757,92.0914}, {25.7265,65.313}, {8.76436,53.2441}, {87.7384,26.0497}, {9.37402,68.6125},
- {36.1601,11.1276}, {59.3211,57.6691}, {28.8778,66.6557}, {28.8379,77.5767}, {18.9751,32.9642},
- {0.357857,98.4363}, {33.1479,82.7391}, {43.6497,18.8201}, {91.893,95.8637}, {69.9075,76.4871},
- {68.5786,12.1143}, {77.4273,38.3832}, {91.6273,94.3051}, {20.3548,86.1917}, {54.8042,79.3657},
-
- {90.4932,29.7288}, {87.3979,90.9643}, {57.62,49.8144}, {27.3911,16.2757}, {49.2399,86.4579},
- {84.8942,46.3662}, {29.1053,49.5977}, {68.4178,18.0421}, {13.9058,72.755}, {49.2422,60.3109},
- {72.4252,83.8134}, {22.1966,17.8208}, {12.1259,49.8525}, {36.0443,13.8238}, {93.1895,32.4807},
- {62.2095,90.8485}, {81.8128,83.6828}, {33.4972,49.6074}, {65.8831,39.4327}, {25.8906,60.8883},
- {7.2545,15.123}, {64.7207,10.7848}, {28.827,36.3598}, {9.11486,33.1386}, {93.4495,42.7328},
- {26.5461,58.357}, {76.1778,65.8747}, {15.7272,48.7427}, {62.5665,88.3037}, {20.7844,51.7715},
- {42.6199,55.7561}, {39.4388,82.9939}, {32.6013,24.4327}, {63.8654,72.936}, {33.8243,98.4845},
- {13.6075,89.756}, {0.540855,41.0788}, {77.4386,78.3282}, {11.4668,29.3678}, {72.1006,86.5535},
- {44.9105,4.91625}, {70.7909,98.6467}, {47.3894,21.0883}, {9.39195,86.5181}, {38.2896,9.95593},
- {65.712,30.1763}, {13.1702,80.9095}, {5.34223,5.15083}, {78.0868,45.7716}, {44.256,69.2076},
-
- {58.9637,11.9111}, {52.9899,57.8635}, {36.1917,59.5045}, {88.8723,30.4285}, {16.982,47.6585},
- {52.5747,60.9729}, {59.6196,61.8925}, {82.9808,23.3656}, {9.88374,7.00902}, {16.965,92.3728},
- {22.5491,48.1733}, {29.0829,82.6769}, {87.8278,35.7193}, {81.4909,34.4251}, {3.63274,65.9146},
- {77.8257,25.7469}, {83.6104,62.5964}, {22.1009,30.8157}, {61.2442,19.8021}, {67.4605,10.9733},
- {71.9462,78.2262}, {40.1188,20.0352}, {43.4009,31.5658}, {38.5748,23.0996}, {15.4724,53.2846},
- {1.45793,55.5398}, {38.2167,38.0215}, {73.7408,30.5408}, {64.9659,26.0445}, {91.9591,55.2316},
- {80.9785,68.5986}, {31.195,69.7848}, {0.600477,64.5889}, {84.391,53.296}, {64.2693,61.8447},
- {40.0709,51.8515}, {71.8867,36.2154}, {67.7812,80.1897}, {3.28927,15.2876}, {68.5722,6.35606},
- {61.8958,18.7616}, {56.7831,70.0301}, {0.570914,0.112548}, {26.157,30.5239}, {85.7555,65.5368},
- {34.1354,18.1161}, {87.9009,66.7341}, {31.323,65.3305}, {18.6265,88.5014}, {50.3461,15.7139},
-
- {67.5654,82.8957}, {19.1112,90.417}, {70.6067,39.4521}, {54.7397,86.8924}, {93.2485,73.8959},
- {92.6576,23.3119}, {93.342,55.1443}, {55.2568,49.4407}, {79.9646,93.9129}, {59.4497,81.4139},
- {99.53,65.7201}, {32.4541,93.5852}, {58.9157,87.4309}, {75.9324,63.7771}, {79.491,77.5421},
- {60.4379,26.2785}, {16.6955,47.0564}, {86.5086,79.549}, {66.4414,87.3021}, {61.1981,41.2483},
- {64.5601,59.6899}, {14.8342,53.8557}, {3.29634,57.9022}, {51.8151,70.091}, {51.5049,83.2609},
- {48.981,11.2648}, {4.84997,51.0349}, {38.4658,81.4351}, {45.2122,63.7656}, {41.3078,14.3982},
- {40.6767,24.7033}, {71.7597,1.74566}, {81.2947,57.3721}, {44.6743,58.2682}, {99.5165,47.7361},
- {7.42604,5.87232}, {59.728,64.0766}, {21.9788,22.2602}, {92.3513,63.0243}, {46.2852,73.7939},
- {85.0586,43.8562}, {94.8911,95.2662}, {76.7014,89.9086}, {53.6742,33.3569}, {47.7551,21.9136},
- {46.6169,94.982}, {96.7277,88.4318}, {45.8039,18.3765}, {76.6448,78.0224}, {25.7585,90.4782}
-};
-
-static cairo_time_t
-do_tessellate (cairo_t *cr, int num_points, int loops)
-{
- int i;
-
- for (i=0; i < num_points; i++)
- cairo_line_to (cr, points[i].x, points[i].y);
-
- cairo_perf_timer_start ();
-
- /* We'd like to measure just tessellation without
- * rasterization. For now, we can do that with cairo_in_fill. But
- * we'll have to be careful since cairo_in_fill might eventually
- * be optimized to have an implementation that doesn't necessarily
- * include tessellation. */
- while (loops--)
- cairo_in_fill (cr, 50, 50);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-tessellate_16 (cairo_t *cr, int width, int height, int loops)
-{
- return do_tessellate (cr, 16, loops);
-}
-
-static cairo_time_t
-tessellate_64 (cairo_t *cr, int width, int height, int loops)
-{
- return do_tessellate (cr, 64, loops);
-}
-
-static cairo_time_t
-tessellate_256 (cairo_t *cr, int width, int height, int loops)
-{
- return do_tessellate (cr, 256, loops);
-}
-
-cairo_bool_t
-tessellate_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "tessellate", NULL);
-}
-
-void
-tessellate (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "tessellate-16", tessellate_16, NULL);
- cairo_perf_run (perf, "tessellate-64", tessellate_64, NULL);
- cairo_perf_run (perf, "tessellate-256", tessellate_256, NULL);
-}
-
-#if 0
-double
-rand_within (double range)
-{
- return range * (rand() / (RAND_MAX + 1.0));
-}
-
-int
-main (void)
-{
-#define SIZE 100
- int i;
-
- printf ("point_t points[] = {\n");
-
- for (i=0; i < 1000; i++) {
- printf (" {%g,%g},", rand_within (SIZE), rand_within (SIZE));
- if (i % 5 == 4)
- printf ("\n");
- }
-
- printf ("};\n");
-}
-#endif
diff --git a/perf/micro/text.c b/perf/micro/text.c
deleted file mode 100644
index cdb319936..000000000
--- a/perf/micro/text.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of
- * Red Hat, Inc. not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Red Hat, Inc. makes no representations about the
- * suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
- * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_text (cairo_t *cr, int width, int height, int loops)
-{
- const char text[] = "the jay, pig, fox, zebra and my wolves quack";
- int len = strlen (text);
- double x, y;
- int i = 0, j = 0;
-
- cairo_set_font_size (cr, 9);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- do {
- cairo_move_to (cr, 0, j++ * 10);
- cairo_show_text (cr, text + i);
- cairo_get_current_point (cr, &x, &y);
- while (x < width && cairo_status (cr) == CAIRO_STATUS_SUCCESS) {
- cairo_show_text (cr, text);
- cairo_get_current_point (cr, &x, &y);
- }
- if (++i >= len)
- i = 0;
- } while (y < height && cairo_status (cr) == CAIRO_STATUS_SUCCESS);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-text_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "text", NULL);
-}
-
-void
-text (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_cover_sources_and_operators (perf, "text", do_text, NULL);
-}
diff --git a/perf/micro/tiger.c b/perf/micro/tiger.c
deleted file mode 100644
index 9e7a9419a..000000000
--- a/perf/micro/tiger.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.o.uk>
- */
-
-#include "cairo-perf.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "../../test/tiger.inc"
-
-static cairo_time_t
-do_tiger (cairo_t *cr, int width, int height, int loops)
-{
- unsigned int i;
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_identity_matrix (cr);
-
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_set_source_rgba (cr, 0.1, 0.2, 0.3, 1.0);
- cairo_paint (cr);
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
-
- cairo_translate (cr, width/2, height/2);
- cairo_scale (cr, .85 * width/500, .85 * height/500);
-
- for (i = 0; i < sizeof (tiger_commands)/sizeof(tiger_commands[0]);i++) {
- const struct command *cmd = &tiger_commands[i];
- switch (cmd->type) {
- case 'm':
- cairo_move_to (cr, cmd->x0, cmd->y0);
- break;
- case 'l':
- cairo_line_to (cr, cmd->x0, cmd->y0);
- break;
- case 'c':
- cairo_curve_to (cr,
- cmd->x0, cmd->y0,
- cmd->x1, cmd->y1,
- cmd->x2, cmd->y2);
- break;
- case 'f':
- cairo_set_source_rgba (cr,
- cmd->x0, cmd->y0, cmd->x1, cmd->y1);
- cairo_fill (cr);
- break;
- }
- }
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_mono_tiger (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- return do_tiger (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_fast_tiger (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_FAST);
- return do_tiger (cr, width, height, loops);
-}
-
-static cairo_time_t
-do_best_tiger (cairo_t *cr, int width, int height, int loops)
-{
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_BEST);
- return do_tiger (cr, width, height, loops);
-}
-
-cairo_bool_t
-tiger_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "tiger", NULL);
-}
-
-void
-tiger (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "tiger-mono", do_mono_tiger, NULL);
- cairo_perf_run (perf, "tiger-fast", do_fast_tiger, NULL);
- cairo_perf_run (perf, "tiger-best", do_best_tiger, NULL);
-}
diff --git a/perf/micro/twin.c b/perf/micro/twin.c
deleted file mode 100644
index 99433bd65..000000000
--- a/perf/micro/twin.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#define WIDTH 1350
-#define HEIGHT 900
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_twin (cairo_t *cr,
- int width,
- int height,
- int loops)
-{
- int i, j, h;
- unsigned char s[2] = {0, 0};
-
- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
- cairo_paint (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
-
- cairo_select_font_face (cr,
- "@cairo:",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_NORMAL);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- h = 2;
- for (i = 8; i < 48; i >= 24 ? i+=3 : i++) {
- cairo_set_font_size (cr, i);
- for (j = 33; j < 128; j++) {
- if (j == 33 || (j == 80 && i > 24)) {
- h += i + 2;
- cairo_move_to (cr, 10, h);
- }
- s[0] = j;
- cairo_text_path (cr, (const char *) s);
- }
- }
- cairo_fill (cr);
- }
-
- cairo_perf_timer_stop ();
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-twin_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "twin", NULL);
-}
-
-void
-twin (cairo_perf_t *perf,
- cairo_t *cr,
- int width,
- int height)
-{
- cairo_perf_run (perf, "twin", do_twin, NULL);
-}
diff --git a/perf/micro/unaligned-clip.c b/perf/micro/unaligned-clip.c
deleted file mode 100644
index 41e327f1e..000000000
--- a/perf/micro/unaligned-clip.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright © 2006 Jeff Muizelaar <jeff@infidigm.net>
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Authors: Jeff Muizelaar <jeff@infidigm.net>
- * Carl Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-static cairo_time_t
-do_unaligned_clip (cairo_t *cr, int width, int height, int loops)
-{
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_save (cr);
-
- /* First a triangular clip that obviously isn't along device-pixel
- * boundaries. */
- cairo_move_to (cr, 50, 50);
- cairo_line_to (cr, 50, 90);
- cairo_line_to (cr, 90, 90);
- cairo_close_path (cr);
- cairo_clip (cr);
-
- /* Then a rectangular clip that would be but for the non-integer
- * scaling. */
- cairo_scale (cr, 1.1, 1.1);
- cairo_rectangle (cr, 55, 55, 35, 35);
- cairo_clip (cr);
-
- /* And paint something to force the clip to be evaluated. */
- cairo_paint (cr);
-
- cairo_restore (cr);
- }
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-unaligned_clip_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "unaligned-clip", NULL);
-}
-
-void
-unaligned_clip (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "unaligned-clip", do_unaligned_clip, NULL);
-}
diff --git a/perf/micro/wave.c b/perf/micro/wave.c
deleted file mode 100644
index f6e6f74a3..000000000
--- a/perf/micro/wave.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2011 Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Benjamin Otte <otte@redhat.com>
- */
-
-#include "cairo-perf.h"
-
-static cairo_surface_t *
-generate_random_waveform(cairo_t *target, int width, int height)
-{
- cairo_surface_t *surface;
- cairo_t *cr;
- int i, r;
-
- srand (0xdeadbeef);
-
- surface = cairo_surface_create_similar (cairo_get_target (target),
- CAIRO_CONTENT_ALPHA,
- width, height);
- cr = cairo_create (surface);
-
- r = height / 2;
-
- for (i = 0; i < width; i++)
- {
- r += rand () % (height / 4) - (height / 8);
- if (r < 0)
- r = 0;
- else if (r > height)
- r = height;
- cairo_rectangle (cr, i, (height - r) / 2, 1, r);
- }
- cairo_fill (cr);
- cairo_destroy (cr);
-
- return surface;
-}
-
-static cairo_time_t
-do_wave (cairo_t *cr, int width, int height, int loops)
-{
- cairo_surface_t *wave;
- cairo_pattern_t *mask;
-
- wave = generate_random_waveform (cr, width, height);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- /* paint outline (and contents) */
- cairo_set_source_rgb (cr, 1, 0, 0);
- cairo_mask_surface (cr, wave, 0, 0);
-
- /* overdraw inline */
- /* first, create a mask */
- cairo_push_group_with_content (cr, CAIRO_CONTENT_ALPHA);
- cairo_set_source_surface (cr, wave, 0, 0);
- cairo_paint (cr);
- cairo_set_operator (cr, CAIRO_OPERATOR_IN);
- cairo_set_source_surface (cr, wave, 1, 0);
- cairo_paint (cr);
- cairo_set_source_surface (cr, wave, -1, 0);
- cairo_paint (cr);
- cairo_set_source_surface (cr, wave, 0, 1);
- cairo_paint (cr);
- cairo_set_source_surface (cr, wave, 0, -1);
- cairo_paint (cr);
- mask = cairo_pop_group (cr);
-
- /* second, paint the mask */
- cairo_set_source_rgb (cr, 0, 1, 0);
- cairo_mask (cr, mask);
-
- cairo_pattern_destroy (mask);
- }
-
- cairo_perf_timer_stop ();
-
- cairo_surface_destroy (wave);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-wave_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "wave", NULL);
-}
-
-void
-wave (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "wave", do_wave, NULL);
-}
diff --git a/perf/micro/wide-fills.c b/perf/micro/wide-fills.c
deleted file mode 100644
index 0747e6e67..000000000
--- a/perf/micro/wide-fills.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-
-/* This is a variant on wide strokes where we precompute
- * a simplified stroke-to-path.
- * When we have a real stroke-to-path, it would useful to compare the cost
- * of stroking vs filling the "identical" paths.
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_wide_fills_ha (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double y = floor (uniform_random (0, height));
- double x = floor (uniform_random (0, width));
- cairo_rectangle (cr, x, y, ceil (uniform_random (0, width)) - x, 5);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_fills_h (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double y = uniform_random (0, height);
- double x = uniform_random (0, width);
- cairo_rectangle (cr, x, y, uniform_random (0, width) - x, 5);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_fills_va (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double x = floor (uniform_random (0, width));
- double y = floor (uniform_random (0, height));
- cairo_rectangle (cr, x, y, 5, ceil (uniform_random (0, height) - y));
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_fills_v (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double x = uniform_random (0, width);
- double y = uniform_random (0, height);
- cairo_rectangle (cr, x, y, 5, uniform_random (0, height) - y);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_fills (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- /* lots and lots of overlapping stroke-like fills */
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- cairo_save (cr);
- cairo_translate (cr,
- uniform_random (0, width),
- uniform_random (0, height));
- cairo_rotate (cr, uniform_random (-M_PI,M_PI));
- cairo_rectangle (cr, 0, 0, uniform_random (0, width), 5);
- cairo_restore (cr);
- }
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-wide_fills_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "wide-fills", NULL);
-}
-
-void
-wide_fills (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "wide-fills-halign", do_wide_fills_ha, NULL);
- cairo_perf_run (perf, "wide-fills-valign", do_wide_fills_va, NULL);
- cairo_perf_run (perf, "wide-fills-horizontal", do_wide_fills_h, NULL);
- cairo_perf_run (perf, "wide-fills-vertical", do_wide_fills_v, NULL);
- cairo_perf_run (perf, "wide-fills-random", do_wide_fills, NULL);
-}
diff --git a/perf/micro/wide-strokes.c b/perf/micro/wide-strokes.c
deleted file mode 100644
index 141309148..000000000
--- a/perf/micro/wide-strokes.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Chris Wilson <chris@chris-wilson.co.uk>
- */
-
-#include "cairo-perf.h"
-
-static uint32_t state;
-
-static double
-uniform_random (double minval, double maxval)
-{
- static uint32_t const poly = 0x9a795537U;
- uint32_t n = 32;
- while (n-->0)
- state = 2*state < state ? (2*state ^ poly) : 2*state;
- return minval + state * (maxval - minval) / 4294967296.0;
-}
-
-static cairo_time_t
-do_wide_strokes_ha (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double h = floor (uniform_random (0, height));
- cairo_move_to (cr, floor (uniform_random (0, width)), h);
- cairo_line_to (cr, ceil (uniform_random (0, width)), h);
- }
-
- cairo_set_line_width (cr, 5.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_strokes_h (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double h = uniform_random (0, height);
- cairo_move_to (cr, uniform_random (0, width), h);
- cairo_line_to (cr, uniform_random (0, width), h);
- }
-
- cairo_set_line_width (cr, 5.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_strokes_va (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double v = floor (uniform_random (0, width));
- cairo_move_to (cr, v, floor (uniform_random (0, height)));
- cairo_line_to (cr, v, ceil (uniform_random (0, height)));
- }
-
- cairo_set_line_width (cr, 5.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_strokes_v (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- double v = uniform_random (0, width);
- cairo_move_to (cr, v, uniform_random (0, height));
- cairo_line_to (cr, v, uniform_random (0, height));
- }
-
- cairo_set_line_width (cr, 5.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_wide_strokes (cairo_t *cr, int width, int height, int loops)
-{
- int count;
-
- /* lots and lots of overlapping strokes */
- state = 0xc0ffee;
- for (count = 0; count < 1000; count++) {
- cairo_line_to (cr,
- uniform_random (0, width),
- uniform_random (0, height));
- }
-
- cairo_set_line_width (cr, 5.);
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_stroke_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-wide_strokes_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "wide-strokes", NULL);
-}
-
-void
-wide_strokes (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_set_source_rgb (cr, 1., 1., 1.);
-
- cairo_perf_run (perf, "wide-strokes-halign", do_wide_strokes_ha, NULL);
- cairo_perf_run (perf, "wide-strokes-valign", do_wide_strokes_va, NULL);
- cairo_perf_run (perf, "wide-strokes-horizontal", do_wide_strokes_h, NULL);
- cairo_perf_run (perf, "wide-strokes-vertical", do_wide_strokes_v, NULL);
- cairo_perf_run (perf, "wide-strokes-random", do_wide_strokes, NULL);
-}
diff --git a/perf/micro/world-map.c b/perf/micro/world-map.c
deleted file mode 100644
index ff22eebf3..000000000
--- a/perf/micro/world-map.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-typedef enum {
- WM_NEW_PATH,
- WM_MOVE_TO,
- WM_LINE_TO,
- WM_HLINE_TO,
- WM_VLINE_TO,
- WM_REL_LINE_TO,
- WM_END
-} wm_type_t;
-
-typedef struct _wm_element {
- wm_type_t type;
- double x;
- double y;
-} wm_element_t;
-
-#include "world-map.h"
-
-enum {
- STROKE = 1,
- FILL = 2,
-};
-
-static cairo_time_t
-do_world_map (cairo_t *cr, int width, int height, int loops, int mode)
-{
- const wm_element_t *e;
- double cx, cy;
-
- cairo_set_line_width (cr, 0.2);
-
- cairo_perf_timer_start ();
-
- while (loops--) {
- cairo_set_source_rgb (cr, .68, .85, .90); /* lightblue */
- cairo_rectangle (cr, 0, 0, 800, 400);
- cairo_fill (cr);
-
- e = &countries[0];
- while (1) {
- switch (e->type) {
- case WM_NEW_PATH:
- case WM_END:
- if (mode & FILL) {
- cairo_set_source_rgb (cr, .75, .75, .75); /* silver */
- cairo_fill_preserve (cr);
- }
- if (mode & STROKE) {
- cairo_set_source_rgb (cr, .50, .50, .50); /* gray */
- cairo_stroke (cr);
- }
- cairo_new_path (cr);
- cairo_move_to (cr, e->x, e->y);
- break;
- case WM_MOVE_TO:
- cairo_close_path (cr);
- cairo_move_to (cr, e->x, e->y);
- break;
- case WM_LINE_TO:
- cairo_line_to (cr, e->x, e->y);
- break;
- case WM_HLINE_TO:
- cairo_get_current_point (cr, &cx, &cy);
- cairo_line_to (cr, e->x, cy);
- break;
- case WM_VLINE_TO:
- cairo_get_current_point (cr, &cx, &cy);
- cairo_line_to (cr, cx, e->y);
- break;
- case WM_REL_LINE_TO:
- cairo_rel_line_to (cr, e->x, e->y);
- break;
- }
- if (e->type == WM_END)
- break;
- e++;
- }
-
- cairo_new_path (cr);
- }
-
- cairo_perf_timer_stop ();
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-do_world_map_stroke (cairo_t *cr, int width, int height, int loops)
-{
- return do_world_map (cr, width, height, loops, STROKE);
-}
-
-static cairo_time_t
-do_world_map_fill (cairo_t *cr, int width, int height, int loops)
-{
- return do_world_map (cr, width, height, loops, FILL);
-}
-
-static cairo_time_t
-do_world_map_both (cairo_t *cr, int width, int height, int loops)
-{
- return do_world_map (cr, width, height, loops, FILL | STROKE);
-}
-
-cairo_bool_t
-world_map_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "world-map", NULL);
-}
-
-void
-world_map (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
- cairo_perf_run (perf, "world-map-stroke", do_world_map_stroke, NULL);
- cairo_perf_run (perf, "world-map-fill", do_world_map_fill, NULL);
- cairo_perf_run (perf, "world-map", do_world_map_both, NULL);
-}
diff --git a/perf/micro/world-map.h b/perf/micro/world-map.h
deleted file mode 100644
index af58b80f1..000000000
--- a/perf/micro/world-map.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/* The data for this test case was provided by Gary Nicholson
- * <gary@imapping.co.nz> who originally created an interactive SVG map
- * of the world as can be seen here:
- *
- * http://www.wherearewe.co.nz/svg.html
- *
- * The data is used here by permission from Gary given on 2006-11-08:
- *
- * Thanks for asking, I don't need any attribution if you are
- * only using the vectors and not the entire map with
- * interactivity etc. So feel free to do what you wish with
- * the data.
- */
-
-#define N(x,y) { WM_NEW_PATH, x, y }
-#define M(x,y) { WM_MOVE_TO, x, y }
-#define L(x,y) { WM_LINE_TO, x, y }
-#define H(x,y) { WM_HLINE_TO, x, y }
-#define V(x,y) { WM_VLINE_TO, x, y }
-#define l(x,y) { WM_REL_LINE_TO, x, y }
-#define E(x,y) { WM_END, x, y }
-
-static const wm_element_t countries[] = {
-N(413.519,90.071),l(.136,-.348),l(-.31,-.204),l(-.017,-.327),l(.213,-.322),l(.245,-.147),l(.142,-.08),l(.225,.072),l(.062,.301),l(.41,.312),l(.466,.096),l(-.044,.288),l(-.248,.144),l(.074,.353),l(-.145,-.063),l(-.568,-.011),l(-.642,-.063),
-N(421.683,94.397),l(.193,.336),l(-.266,.274),l(.214,.288),l(-.09,.192),l(.622,.062),l(.008,.144),l(.55,.242),l(.579,-.332),l(.215,.117),l(-.029,.171),l(-.126,.309),l(.112,.212),l(-.038,.192),l(-.315,-.051),l(-.176,-.162),l(-.283,.091),l(-.081,.273),l(.244,.131),l(-.228,.415),l(-.244,-.333),l(-.469,.05),l(-.071,.122),l(-.216,.03),l(-.23,-.142),l(-.143,-.354),l(-.371,.081),l(.019,.333),l(-.425,.384),l(-.018,.535),l(-.285,.151),l(-.385,-.312),l(.098,-.182),l(-.311,-.071),l(-.534,-.363),l(-.016,-.415),l(-.777,.404),l(.103,.212),l(-.349,.432),l(-.275,.16),l(-.629,-.168),l(-.627,.204),l(-.599,-.062),l(-.102,-.424),l(-.312,-.806),l(-.616,.147),l(-.854,.668),l(-.369,-.111),l(.238,-.226),l(.013,-.322),l(-.08,-.137),l(.089,-.294),l(.718,-.418),l(-.038,-.315),l(.575,-.24),l(.012,-.076),l(.528,-.494),l(.173,-.035),l(-.116,-.089),l(-.153,-.028),l(.221,-.302),l(.446,.007),l(-.005,.096),l(.473,.007),l(.385,-.309),l(.271,.089),l(.272,-.117),l(.271,.096),l(.567,-.158),l(.278,.11),l(.354,-.021),l(-.179,-.199),l(.709,-.199),l(.017,.151),l(.199,-.014),l(.149,.089),l(.852,.007),l(.664,.261),
-N(421.394,104.558),l(.104,.175),l(.04,.256),l(-.06,.475),l(.118,.054),l(.062,.333),l(-.076,.795),l(-.211,.327),l(-.118,.724),l(-.292,.501),l(-.298,-.043),l(-.057,-.196),l(-.41,-.076),l(-.227,-.152),l(.284,-.207),l(-.07,-.076),l(-.437,-.098),l(.257,-.332),l(-.11,-.071),l(-.291,.071),l(-.053,-.147),l(.115,-.022),l(.175,-.158),l(-.094,-.153),l(-.257,-.082),l(.015,-.164),l(.247,-.12),l(-.284,-.218),l(.241,-.284),l(.6,-.305),l(.27,-.022),l(.04,-.125),l(.292,-.043),l(.195,.104),l(.096,-.142),l(-.022,-.344),l(.072,-.224),l(.143,-.011),M(396.323,103.853),l(.375,-.122),l(.411,-.365),l(.549,-2.299),l(.397,-.091),l(-.21,-.29),l(-.226,.259),l(.125,-1.144),l(.223,-.826),l(.115,.153),l(.496,.306),l(.191,.382),l(.191,.229),l(-.281,-.673),l(-.63,-.582),l(-.242,-.233),l(.024,-.249),l(.359,-.477),l(-.202,-.375),l(-.2,-.274),l(-.326,-.216),l(-.685,-.1),l(-.515,-.571),l(-.416,-.323),l(.278,-.426),l(-.233,-.181),l(-.343,-.131),l(-.511,-.142),l(-.184,-.173),l(.247,-.376),l(-.329,-.173),l(-.509,.179),l(-.489,-.249),l(-.824,-.251),l(-.619,-.181),l(-.325,.014),l(-.215,-.25),l(-.91,.167),l(-.059,-.25),l(-.265,-.125),l(-.367,-.042),l(-.056,-.104),l(.861,-.083),l(-.085,-.229),l(-.526,-.104),l(.442,-.104),l(.086,-.205),l(-.275,.017),l(-.263,-.021),l(-.417,.083),l(.04,-.438),l(.303,.012),l(.305,-.146),l(.526,-.088),l(.562,-.174),l(.215,.188),l(.18,-.167),l(.474,.063),l(.112,-.26),l(.272,-.059),l(.764,-.078),l(.393,.366),l(.275,.26),l(.342,.083),l(.652,-.271),l(.317,.167),l(.276,-.127),l(.457,-.124),l(.029,.23),l(.591,-.065),l(.3,-.103),l(-.265,-.188),l(-.028,-.251),l(.056,-.345),l(-.037,-.428),l(-.131,.021),l(-.562,-.682),l(-.11,-.407),l(.927,.126),l(.607,-.105),l(-.084,.397),l(.248,.419),l(.342,-.146),l(1.241,.104),l(.501,.146),l(.079,-.014),l(.525,-.093),l(.662,-.27),l(-.534,-.124),l(.055,-.204),l(.166,-.175),l(.753,-.322),l(.756,-.181),l(.902,-.215),l(.314,-.235),l(.302,-.264),l(-.053,-.775),l(.135,-.542),l(.521,-.25),l(.46,-.16),l(.916,-.092),l(.177,-.096),l(.208,.447),l(.311,.335),l(.266,.127),l(.141,-.071),l(.41,-.208),l(.153,.17),l(.202,.458),l(.194,.133),l(.518,-.012),l(.159,.301),l(.259,-.012),l(.576,.048),l(.375,.168),l(-.159,.241),l(.091,.175),l(-.072,.198),l(.285,.122),l(.406,-.075),l(.446,-.035),l(.193,-.313),l(.245,-.072),l(-.119,.373),l(.146,.18),l(-.039,.228),l(.529,.048),l(.341,.192),l(.371,.204),l(.127,.228),l(.694,-.174),l(.079,.114),l(.642,.063),l(.568,.011),l(.145,.063),l(.428,.319),l(.337,.277),l(.395,-.055),l(.045,.145),l(.689,-.062),l(.072,-.048),l(.233,.007),l(.095,.186),l(.456,.09),l(.479,-.014),l(.605,.193),l(-.954,.806),l(-.054,.213),l(-.054,.358),l(-.321,.372),l(-.075,.295),l(.091,.076),l(-.216,.701),l(.135,.233),l(-.385,.309),l(-.473,-.007),l(.005,-.096),L(415.96,94.5),l(-.221,.302),l(.153,.028),l(.116,.089),l(-.173,.035),l(-.528,.494),l(-.012,.076),l(-.575,.24),l(.038,.315),l(-.718,.418),l(-.089,.294),l(.08,.137),l(-.013,.322),l(-.238,.226),l(.369,.111),l(.854,-.668),l(.616,-.147),l(.312,.806),l(.102,.424),l(-.624,.301),l(.532,.344),l(.025,.292),l(.43,.192),l(-.199,.272),l(-.541,.353),l(-.183,-.111),l(-.437,.186),l(.352,.358),l(.616,.191),l(.135,.331),l(-.175,.01),l(-.315,.371),l(.193,.442),l(.754,.391),l(.849,-.07),l(.062,.281),l(-.146,.469),l(-.346,.23),l(-.221,.215),l(-.833,.488),l(-.889,.659),l(-.427,.087),l(-.318,.043),l(-.798,.159),l(-.405,-.028),l(-.471,-.156),l(-.851,-.499),l(-.315,-.085),l(-.354,.029),l(-.231,.072),l(-.511,-.056),l(-.752,-.313),l(-.602,.044),l(-.731,.345),l(-.357,.258),l(-.555,.559),l(-.147,.386),l(.099,.514),l(.091,.379),l(-.334,-.091),l(-.75,.137),l(-.039,.136),l(-.485,-.015),l(-.427,-.197),l(-.395,.167),l(-.261,-.015),l(-.036,-.152),l(-.335,-.091),l(-.206,.03),l(-.374,.076),l(-.187,-.076),l(-.035,-.289),l(-.091,-.213),l(-1.252,-.304),l(-.355,0),l(.017,.319),l(-.542,-.015),l(-.337,.061),l(-.037,-.122),l(-.767,.03),l(-.084,-.114),l(-.028,-.038),l(-.431,-.152),l(-.131,.076),l(-.262,-.03),l(-.056,.076),l(-.507,-.395),l(-.15,.061),l(-1.088,-.334),l(-.112,.106),l(-.15,-.03),l(-.094,-.106),l(.205,-.243),l(-.058,-.122),l(-.469,.03),l(-.472,-.243),
-N(681.312,116.395),l(.235,-.171),l(.283,-.256),l(.633,-.738),l(.315,-.157),l(.595,.011),l(.579,.068),l(.511,.096),l(.309,-.115),l(.571,-.678),l(.682,.621),l(1.178,1.611),l(.329,.495),l(.269,.664),l(.002,.75),l(-.034,.947),l(-.129,.637),l(.143,.113),l(.5,-.043),l(-.121,.41),l(-.282,.523),l(-.5,.75),l(-.316,.312),l(-.243,.043),l(-.567,-.211),l(-.256,.1),l(-.607,.58),l(-.431,-.083),l(-.289,-.225),l(-.544,.1),l(-.526,.199),l(-1.188,.835),l(-.462,.043),l(-.46,.312),l(-.055,-.564),l(-.056,-.324),l(-.163,-.705),l(-.137,-.395),l(.167,-.453),l(.499,-.468),l(0,-.353),l(.226,-.425),l(-.044,-.141),l(-.378,-.311),l(-.095,-.296),l(.015,-.467),l(-.087,-.339),l(-.289,-.126),l(-.603,-.084),l(.654,-.411),l(.303,-.114),l(.654,.268),l(.254,-.241),l(-.029,-.283),l(-.764,-.89),l(-.113,-.311),l(-.137,-.105),
-N(475.646,121.847),l(-.018,.175),l(.338,.391),l(-.295,-.009),l(-.132,.108),l(-.104,-.059),l(-.327,-.021),l(-.121,.33),l(-.783,.257),l(-.384,.046),l(-.099,.053),l(0,.21),l(-.217,.006),l(-.072,-.192),l(-.402,.023),l(-.547,-.146),l(-.191,-.087),l(0,-.21),l(-.161,-.105),l(-.122,-.403),l(.082,-.035),l(.12,.1),l(.147,-.006),l(.405,-.304),l(.253,-.006),l(.328,.092),l(.077,-.086),l(.088,-.286),l(-.053,-.175),l(.627,.093),l(.658,.027),l(.367,-.056),l(.818,-.233),l(.689,-.304),l(.535,-.158),l(-.475,.295),l(-.436,.231),l(-.596,.444),
-N(704.404,117.274),l(.197,-.099),l(1.108,-.271),l(.057,.354),l(-.481,.284),l(-.232,.241),l(-.068,.453),l(.139,.367),l(.291,.056),l(.221,-.114),l(.418,-.354),l(.24,-.085),l(1.656,-.697),l(.389,-.213),l(.46,-.326),l(.349,-.638),l(.76,-.412),l(.347,-.327),l(.191,-.269),l(.142,-.51),l(.538,-.582),l(-.01,-.142),l(.344,-.567),l(.159,-.468),l(.139,-.609),l(-.043,-.467),l(-.33,-.198),l(-.128,-.24),l(.234,-.213),l(.166,-.284),l(-.155,-1.023),l(.544,-.343),l(.176,-.242),l(.327,-.328),l(.192,0),l(.21,.355),l(.199,.227),l(.303,-.058),l(.799,-.257),l(-.169,-.526),l(-.311,-.028),l(-.36,-.312),l(.694,-.415),l(.441,.156),l(.336,.227),l(.025,.199),l(-.016,.868),l(.058,.611),l(.22,.127),l(.243,.312),l(.717,1.432),l(.001,.496),l(-.246,.709),l(-.709,.766),l(-.226,.439),l(.064,.368),l(-.15,.071),l(-.737,.285),l(-.161,.113),l(-.164,.199),l(-.174,.453),l(.02,.396),l(.094,.254),l(.131,.792),l(-.04,.693),l(-.686,.751),l(-.242,.736),l(.02,.707),l(.198,.296),l(.422,.353),l(-.617,.298),l(-.193,.127),l(-.166,.17),l(-.174,.834),l(-1.081,.439),l(-.094,-.282),l(.294,-.665),l(.184,-.523),l(-.198,-.126),l(-.514,.241),l(-.578,.623),l(-.476,.001),l(-.346,.312),l(-.066,.748),l(-.354,.269),l(-.188,-.028),l(-.066,-.155),l(.003,-.606),l(-.149,-.155),l(-.211,.042),l(-.309,.156),l(-.344,.311),l(-.325,.523),l(-.866,-.055),l(-.505,.057),l(-.631,.1),l(-.458,-.549),l(-.685,-.323),l(-.26,.254),l(-.067,.184),l(-.177,.353),l(.037,.056),l(.417,.197),l(.416,.323),l(-.293,.198),l(-.829,.129),l(-.433,.241),l(-.463,.622),l(-.522,.847),l(-.688,-.365),l(-.565,-.21),l(-.285,-.197),l(-.014,-.169),l(-.194,-.818),l(.099,-.155),l(.495,-.325),l(.179,-.269),l(-.067,-.282),l(-.18,-.042),l(-.601,.17),l(-.341,-.028),l(-.789,-.167),l(-.475,.128),l(-.427,.227),l(-.437,.184),l(-.269,-.098),l(-.256,-.027),l(-1.647,.398),l(-.814,.298),l(-.21,-.31),l(-.452,-.042),l(-.413,.438),l(-.006,.635),l(-.756,-.238),l(-.579,-.055),l(-1.1,.073),l(-.267,-.14),l(.072,-.339),l(.179,-.283),l(.483,.013),l(.499,-.114),l(.751,-.467),l(2.201,-1.953),l(.28,-.015),l(.427,-.128),l(.056,.424),l(.495,-.128),l(1.278,-.257),l(.933,-.058),l(1.183,-.172),l(.892,-.256),l(.068,.452),l(.377,.268),l(.167,-.085),l(.654,-.199),l(.446,-.34),l(-.003,-.353),l(.114,-.467),l(.465,-.51),l(.698,-.581),l(.371,-.453),l(-.062,-1.117),l(.182,-.213),M(695.464,127.756),l(-.292,-.197),l(-.223,-.268),l(-.101,-.381),l(-.177,-.395),l(-.492,-.535),l(.731,-.382),l(.287,-.269),l(.456,-.593),l(.409,.253),l(.615,-.015),l(.483,-.185),l(.311,-.339),l(.451,-.311),l(.454,-.029),l(.316,.169),l(.862,.224),l(.153,.254),l(-.1,.127),l(-.102,.423),l(-.292,.24),l(-.864,.876),l(-.181,-.211),l(-.424,-.295),l(-.467,-.042),l(-.612,.213),l(-.193,.184),l(-.245,.495),l(-.165,.508),l(-.153,.212),l(-.448,.269),M(691.12,131.448),l(-.366,-.042),l(-.056,-.141),l(.268,-.537),l(.128,-.593),l(-.334,-.112),l(-.239,.198),l(-.155,.466),l(-.381,.452),l(-.326,-.211),l(-.059,-.211),l(.322,-.466),l(.032,-.296),l(-.356,-.917),l(.169,-.113),l(.687,-.58),l(.083,-.141),l(.034,-.466),l(-.532,-.789),l(-.333,-.042),l(-.162,.269),l(-.419,.495),l(-.249,-.112),l(-.23,-.508),l(-.376,-.267),l(-.261,-.366),l(.41,-.325),l(.733,.083),l(.706,-.171),l(.315,-.466),l(.241,-.283),l(.484,-.058),l(.478,.056),l(.249,.38),l(.27,.168),l(.43,.084),l(.628,-.213),l(.225,.395),l(-.569,.438),l(.405,.239),l(.443,.437),l(.079,.254),l(-.596,.58),l(-.242,.41),l(-.104,.367),l(-.085,.621),l(-.109,.649),l(-.242,.353),l(-.194,.099),l(-.165,.071),l(-.197,.184),l(-.479,.678),M(711.938,108.369),l(-.222,-.241),l(-.077,-.271),l(.325,-.642),l(-.055,-.342),l(-.549,-.198),l(-.168,-.171),l(-.146,-.812),l(.583,-.386),l(.522,-.172),l(.646,-.373),l(.037,-.356),l(-.318,-.285),l(.277,-.3),l(.224,-.015),l(.661,.427),l(.373,.085),l(.532,-.201),l(-.004,-1.186),l(.455,-.187),l(.45,-.244),l(.074,-.743),l(.007,-.844),l(-.398,-.758),l(-.098,-.473),l(.166,-.216),l(.618,-.346),l(.063,.072),l(.507,.43),l(.904,.816),l(1.07,.842),l(1.083,.684),l(.627,.285),l(.528,.17),l(1.02,.198),l(.282,.042),l(.304,-.086),l(.866,-.66),l(.461,-.144),l(.002,.1),l(-.308,.358),l(-.335,.558),l(.198,.414),l(.469,.599),l(.197,.356),l(-.561,.272),l(-.447,.244),l(-.534,.158),l(-.365,.015),l(-.488,-.199),l(-.453,.015),l(-.363,.144),l(-.345,.229),l(-.754,.786),l(-.396,.5),l(-.26,.599),l(-.4,-.07),l(-.425,-.241),l(-2.031,-.965),l(-.461,-.085),l(-.72,.044),l(-1.038,.587),l(-.153,-.299),l(-.372,-.356),l(-.339,.029),l(-.266,.115),l(-.439,.272),l(.049,.299),l(1.16,.497),l(.56,.298),l(.302,.27),l(-.391,.214),l(-.303,.029),l(-.305,-.128),l(-.261,.043),l(-.324,.314),l(-.388,.471),l(-.347,.114),
-N(597.917,139.685),l(1.251,-1.545),l(.609,-.539),l(.348,-.239),l(.149,-.103),l(.417,-.016),l(.309,.294),l(.479,.208),l(1.659,.047),l(.371,.041),l(.312,.209),l(.329,.619),l(-.07,.156),l(.042,.24),l(.326,.294),l(.313,.069),l(.258,.238),l(.017,.282),l(-.217,.58),l(-.624,.06),l(-1.036,.062),l(-1.238,-.063),l(-.335,-.125),l(-.301,-.055),l(-.531,.313),l(-.544,.074),l(-.085,-.021),l(-.869,-.214),l(-.559,-.081),l(-.637,-.18),l(-.235,-.493),l(.092,-.113),
-N(362.764,152.723),l(.072,-.625),l(.395,-.876),l(.52,-.552),l(.488,-.566),l(.244,-.509),l(1.175,-2.559),l(.238,-.241),l(1.404,-1.175),l(.345,-.495),l(.051,-.918),l(.305,-1.088),l(.651,-1.075),l(.399,-.34),l(.404,-.198),l(.838,-.51),l(.361,-.495),l(.334,-.777),l(.428,-.851),l(1.635,-.04),l(2.511,0),l(2.677,-.001),l(1.718,.004),l(1.42,-.008),l(.027,.876),l(-.03,1.752),l(.002,.65),l(-.104,.396),l(-.56,-.011),l(-6.005,-.022),l(-.557,.074),l(-.047,.509),l(-.07,2.261),l(-.099,2.6),l(-.144,.128),l(-.809,.287),l(-.726,.315),l(-.575,.427),l(-.249,.383),l(-.01,.707),l(.164,1.539),l(.051,1.102),l(-.212,-.027),l(-.732,.033),l(-2.396,-.014),l(-5.055,-.056),l(-.474,-.013),
-N(514.551,145.841),l(-.374,.027),l(-.336,-.083),l(-.008,-.615),l(-.153,-.437),l(-.108,-.791),l(.187,-.607),l(.188,-.11),l(-.059,-.187),l(.177,-.607),l(.33,-.269),l(.312,.083),l(.069,.315),l(.26,.093),l(.063,.199),l(.116,.326),l(-.106,.42),l(.031,.708),l(.118,.254),l(-.104,.381),l(-.327,.467),l(-.275,.433),
-N(514.177,145.868),l(.374,-.027),l(.008,.288),l(.361,.14),l(.153,.128),l(.186,-.093),l(-.046,.443),l(.397,.001),l(.402,.127),l(.687,-.093),l(.103,-.21),l(.183,-.058),l(.218,.117),l(.424,-.042),l(.595,.112),l(.224,-.035),l(.079,-.105),l(1.358,.222),l(.732,-.14),l(-.022,-.292),l(.225,.175),l(.375,-.016),l(.157,-.099),l(.312,-.422),l(.232,-.073),l(.267,-.495),l(.131,-.297),l(.711,-.637),l(.813,-.889),l(.163,.105),l(.229,-.178),l(.85,-.708),l(.313,-.433),l(.15,.161),l(-.248,.42),l(-.107,.299),l(-.004,.176),l(.099,.064),l(.121,-.024),l(.454,.042),l(.09,.324),l(.001,.508),l(-.003,.358),l(-.49,.034),l(-.401,-.083),l(-.107,.396),l(.073,1.326),l(-.199,.34),l(-.536,.596),l(.003,.946),l(.024,2.075),l(.063,.183),l(-.152,.057),l(-.584,.469),l(-.839,-.108),l(-3.387,-.446),l(-3.362,-.375),l(-.261,-.902),l(-.548,-1.154),l(-1.043,-2.198),
-N(668.627,151.365),l(-.102,-.056),l(-.107,-.325),l(-.922,-1.212),l(-.332,-.987),l(-.03,-.438),l(.156,-.749),l(.546,-.792),l(1.312,-1.852),l(.259,-.184),l(.425,-.128),l(.229,-.184),l(.358,-.227),l(.228,.127),l(.554,.394),l(-.334,.424),l(-.084,.142),l(.023,.31),l(-.067,.622),l(-.203,.296),l(-.182,.354),l(-.065,.692),l(-.1,.494),l(-.317,.805),l(-.473,.707),l(-.417,.833),l(-.014,.353),l(-.114,.438),l(-.228,.142),
-N(389.765,144.543),l(.1,.084),l(.895,.531),l(2.054,1.344),l(.811,.575),l(3.283,2.241),l(1.924,1.26),l(1.292,.824),l(.397,.253),l(2.472,1.469),l(.181,.253),l(-.096,.396),l(.082,.183),l(.393,.28),l(1.111,1.039),l(.229,.027),l(.47,-.314),l(.588,.562),l(.375,.167),l(.748,.024),l(.309,.111),l(.277,.352),l(.099,.522),l(-.161,.679),l(.146,.564),l(2.176,-.408),l(.064,1.017),l(.034,2.203),l(.001,.96),l(-.08,.89),l(-.145,.919),l(-.434,1.246),l(-.596,.794),l(-.339,.271),l(-.29,.129),l(-2.533,.085),l(-1.808,.124),l(-.209,.072),l(-.562,.427),l(-.579,.272),l(-.678,-.053),l(-.581,-.081),l(-1.062,-.173),l(-.36,-.059),l(-.356,-.125),l(-.37,.073),l(-1.22,.713),l(-.947,.458),l(-.304,.228),l(-.314,.793),l(-.274,-.027),l(-.324,-.182),l(-.518,-.209),l(-.272,.101),l(-.638,.625),l(-.492,.667),l(-.393,.822),l(-.174,.227),l(-.45,.102),l(-.551,-.364),l(-.293,-.281),l(-.273,.058),l(-.397,.384),l(-.355,1.217),l(-.292,1.047),l(-.317,.369),l(-.543,.271),l(-.448,.158),l(-.257,.016),l(-.141,.255),l(.058,.749),l(-.133,.876),l(-.261,.92),l(-.172,.326),l(-.046,.156),l(-.08,.043),l(-.159,.1),l(-.604,.399),l(-.352,.059),l(-.148,-.239),l(-.117,-.381),l(-.004,-.297),l(-.147,-.211),l(-.257,-.041),l(-.239,.114),l(-.571,.483),l(-.362,.469),l(-.35,.228),l(-.455,-.436),l(-.566,-.321),l(-.352,.059),l(-.522,.54),l(-.559,-.901),l(-.194,-1.143),l(-.349,-.718),l(-.474,-.478),l(-.265,-.451),l(-.271,-.832),l(-.022,-.339),l(-.246,-.281),l(-.323,-.055),l(-.684,.428),l(-.3,.327),l(-.43,.243),l(-.565,-.152),l(-.356,-.153),l(-.338,-.026),l(-.475,.413),l(-.252,.256),l(-.536,-.265),l(-.882,-.715),l(-.18,-.183),l(-.113,-.028),l(.062,-.142),l(.004,-.565),l(-.082,-.833),l(-.265,-.337),l(-.554,-.322),l(-.181,-.197),l(-.22,-.479),l(-.144,-.663),l(-.251,-1.1),l(.057,-.339),l(.506,-.399),l(.332,-.284),l(.018,-.607),l(.181,-.552),l(.252,-.256),l(.402,-.073),l(.261,.111),l(.568,.83),l(.214,.168),l(.454,.082),l(.107,-.269),l(-.055,-.296),l(.06,-.212),l(.535,.124),l(.713,.137),l(.485,.054),l(.387,-.031),l(.945,-.344),l(1.953,-.026),l(6.457,-.01),l(.379,-1.613),l(-.724,-.787),l(-.186,-1.468),l(-.202,-2.386),l(-.325,-2.753),l(-.178,-1.736),l(-.19,-1.468),l(-.908,-7.962),l(-.049,-.776),l(3.231,-.089),l(.523,-.13),
-N(525.37,142.384),l(.312,-.429),l(.155,-.17),l(.084,.833),l(-.423,.707),l(-.118,.156),l(-.121,.024),l(-.099,-.064),l(.004,-.176),l(.107,-.299),l(.248,-.42),l(-.15,-.161),M(525.923,144.712),l(0,.22),l(.456,.762),l(.408,.465),l(.782,.634),l(.677,.394),l(1.008,.52),l(.392,.154),l(.277,.014),l(.576,-.029),l(.364,.112),l(.873,.973),l(.518,.648),l(.46,.422),l(.81,.365),l(.025,.212),l(-.67,1.06),l(-.615,.721),l(-.883,.807),l(-.776,1.541),l(-.242,.142),l(-.562,-.083),l(-.235,-.084),l(-.252,.071),l(-.278,.509),l(-.062,1.115),l(.001,.791),l(.134,.621),l(-.403,.142),l(-1.046,.073),l(-.627,.27),l(-.367,.283),l(-.29,.495),l(-.131,.551),l(-.204,.283),l(-.444,.255),l(-.544,.1),l(-.292,0),l(-.386,-.042),l(-.326,.029),l(-.382,.283),l(-.22,.297),l(-.125,.508),l(.003,.353),l(-.091,.311),l(-.631,.396),l(-.344,.043),l(-.776,-.21),l(-.717,.058),l(-.896,.27),l(-.768,.298),l(-.283,.099),l(-.416,.145),l(-.241,-.306),l(-.483,-.689),l(.006,-.296),l(-.127,-.253),l(-.933,-1.364),l(-.604,-.971),l(-.226,-.634),l(-.092,-.663),l(1.691,-.815),l(2.35,-1.213),l(5.346,-2.982),l(-.155,-1.453),l(-.581,-.914),l(-.063,-.183),l(-.024,-2.075),l(-.003,-.946),l(.536,-.596),l(.199,-.34),l(-.073,-1.326),l(.107,-.396),l(.401,.083),l(.49,-.034),
-N(405.733,173.04),l(-.568,-.971),l(-.562,-.025),l(-.37,.044),l(-.516,-.181),l(-.97,-.757),l(-.114,-.226),l(.335,-.439),l(-.018,-.212),l(-.179,-.268),l(-.502,-.42),l(-.389,-.266),l(-.422,-.492),l(-.426,-.93),l(-.019,-.396),l(.173,-.665),l(.581,.081),l(.678,.053),l(.579,-.272),l(.562,-.427),l(.209,-.072),l(1.808,-.124),l(2.533,-.085),l(.29,-.129),l(.339,-.271),l(.596,-.794),l(.434,-1.246),l(.145,-.919),l(.08,-.89),l(-.001,-.96),l(-.034,-2.203),l(-.064,-1.017),l(1.672,-.321),l(1.82,-.364),l(3.084,-2.617),l(.834,-.655),l(2.308,-1.454),l(1.607,-.956),l(4.012,-2.241),l(1.632,-.843),l(.265,-.186),l(.832,.137),l(1.646,.442),l(1.008,.333),l(.258,.182),l(1.192,.911),l(.231,-.157),l(1.519,-.729),l(.364,2.145),l(.169,1.298),l(.42,1.028),l(.554,.802),l(.703,.604),l(-.388,.722),l(-.265,.99),l(-.168,1.088),l(-.084,.989),l(.022,.537),l(-.062,.707),l(-.019,1.045),l(-.034,1.088),l(-.056,.466),l(-2.43,2.613),l(-.591,.78),l(-.87,1.333),l(-.572,.794),l(-.007,.678),l(.123,.719),l(.014,.269),l(-.951,.034),l(-.437,.2),l(-.453,.299),l(-.761,.697),l(-.259,.058),l(-.609,-.208),l(-.724,-.193),l(-.884,-.221),l(-.531,-.04),l(-.709,.047),l(-.628,.103),l(-.774,.287),l(-.403,.327),l(-.629,.399),l(-.273,.059),l(-.934,.005),l(-.965,-.277),l(-1.173,-.742),l(-.354,-.083),l(-.467,.116),l(-1.337,.544),l(-.37,.002),l(-.209,-.098),l(-1.095,-1.223),l(-.821,-.277),l(-1.111,-.121),l(-1.174,.108),l(-1.064,.188),l(-.676,.4),l(-.687,1.614),l(-.353,.482),l(-.158,.849),l(-.092,.961),l(-.902,-.503),l(-.727,-.589),l(-.339,-.28),l(-.321,.073),l(-.577,.3),
-N(431.763,171.063),l(-.351,-.407),l(-.575,-.52),l(-.173,-.394),l(-.014,-.269),l(-.123,-.719),l(.007,-.678),l(.572,-.794),l(.87,-1.333),l(.591,-.78),l(2.43,-2.613),l(.056,-.466),l(.034,-1.088),l(.019,-1.045),l(.062,-.707),l(-.022,-.537),l(.084,-.989),l(.168,-1.088),l(.265,-.99),l(.388,-.722),l(-.703,-.604),l(-.554,-.802),l(-.42,-1.028),l(-.169,-1.298),l(-.364,-2.145),l(1.818,-.858),l(.41,-.059),l(5.231,2.554),l(4.941,2.372),l(5.577,2.792),l(1.981,.963),l(-.02,1.045),l(-.016,.946),l(-.036,.636),l(.085,2.5),l(-.038,.749),l(.036,1.002),l(.031,1.229),l(-.04,.283),l(-.839,-.009),l(-1.245,.05),l(-.229,.143),l(-.417,1.245),l(-.583,.809),l(-.122,.438),l(.131,.677),l(-.149,.212),l(-.718,.428),l(-.053,.24),l(.342,.662),l(-.087,.34),l(-.542,.596),l(-.316,.609),l(.219,.352),l(.517,-.088),l(.338,.012),l(.141,.225),l(.221,1.228),l(.137,.522),l(.155,.295),l(.444,.407),l(.266,.465),l(.026,.367),l(-.15,.425),l(-.559,-.208),l(-.321,-.012),l(-.322,.086),l(-.939,.613),l(-.372,.228),l(-.165,.382),l(-.005,.41),l(-.196,.284),l(-2.649,2.275),l(-.386,.087),l(-2.181,.055),l(-.434,.059),l(-.209,.199),l(-.117,.806),l(-.646,1.176),l(-.258,.143),l(-.368,.031),l(-.881,-.009),l(-.818,.273),l(-.754,.386),l(-.466,.271),l(-.224,.03),l(-.225,-.069),l(-.494,-.661),l(-1.363,.686),l(-.449,.158),l(-.24,-.027),l(-.096,-.084),l(-.208,-.183),l(-.382,-1.057),l(-.638,-1.07),l(-1.343,-1.179),l(-1.088,-1.067),l(.323,-.539),l(.29,-.312),l(.24,-.1),l(.481,.082),l(1.187,.191),l(.674,-.032),l(.225,-.143),l(-.047,-.127),l(-.208,-.21),l(-.381,-.633),l(-.205,-.578),l(-.169,-1.228),l(.134,-.651),l(-.119,-1.2),l(-.395,-.887),l(-.923,-1.238),l(-.208,-.083),l(-.627,-.109),
-N(627.173,150.012),l(.483,-.229),l(.515,-.13),l(.341,.012),l(.597,.392),l(.325,.097),l(.584,-.413),l(.332,-.115),l(1.595,-.052),l(.807,-.117),l(.341,-.157),l(.696,-.554),l(.521,-.328),l(.298,-.101),l(.623,.575),l(.771,.235),l(.66,.053),l(.777,-.047),l(.237,.21),l(.056,.38),l(-.472,.75),l(.096,.521),l(.273,.365),l(.943,.615),l(.621,.166),l(.909,.107),l(.197,.143),l(-.19,.132),l(-.826,.482),l(.106,.465),l(-.203,.212),l(-1.261,-.054),l(-.136,.198),l(.057,.395),l(-.283,.382),l(-.585,.792),l(-.221,.142),l(-.533,.241),l(-.171,.127),l(-.27,.396),l(-.303,.932),l(-.388,.975),l(.268,.225),l(.469,.563),l(1.112,1.071),l(.023,.24),l(.042,.522),l(.087,.254),l(.42,.493),l(1.096,.83),l(1.282,1.296),l(.26,.197),l(.636,.069),l(.313,.38),l(.282,1.016),l(.302,.578),l(.638,.605),l(.293,.663),l(.341,1.382),l(.524,2.809),l(-.295,.438),l(-.235,.495),l(.05,.819),l(-.095,.41),l(.056,.664),l(-.027,.099),l(-.364,.551),l(-.447,.439),l(-.254,.127),l(-.509,.1),l(-.419,.17),l(-.501,.354),l(-.591,.622),l(-.579,.354),l(-.325,.043),l(-.512,-.197),l(-.404,-.31),l(-.179,-.141),l(-.153,.424),l(.051,.494),l(.048,.353),l(-.205,.721),l(-.388,.424),l(-.326,.071),l(-.235,-.07),l(-.246,.481),l(-.427,.326),l(-.523,.142),l(-.417,.213),l(-.459,.565),l(-.196,.269),l(-.406,.297),l(-.264,.099),l(-.365,-.042),l(.078,-.861),l(.1,-1.313),l(.151,-.494),l(.215,-.283),l(-.02,-.353),l(-.475,-.437),l(-.749,-.238),l(-.091,-.066),l(.3,-.289),l(.646,-.229),l(.915,-.528),l(.599,-.229),l(.497,.011),l(.688,.194),l(.17,-.27),l(-.03,-.197),l(-.568,-.435),l(-.216,-.422),l(.234,-.425),l(.99,-.571),l(.521,-.229),l(.932,-.443),l(.599,-.187),l(.385,-.285),l(.217,-.509),l(-.054,-1.073),l(.05,-.424),l(.076,-.367),l(-.455,-1.014),l(-.029,-.663),l(.215,-.905),l(.155,-.918),l(-.064,-.578),l(-.214,-.437),l(-.529,-.477),l(-.072,-.282),l(.226,-.439),l(-.136,-.395),l(-.358,-.308),l(-.685,-.391),l(-.471,-.52),l(-.57,-.914),l(-1.683,-2.121),l(-.698,-.772),l(-.637,-.646),l(-.632,-.476),l(-1.234,-.741),l(-.162,-.098),l(-.043,-.494),l(.277,-.369),l(.311,-.101),l(.476,.068),l(.287,-.058),l(.261,-.185),l(.255,-.326),l(-.009,-.508),l(-.87,-.968),l(-.434,-.675),l(-.262,-.083),l(-.39,.171),l(-.509,.483),l(-.287,.058),l(-.47,-.195),l(-.607,-.434),l(-.334,-.689),l(-.338,-.929),l(-.543,-.604),l(-.613,-.575),l(-.45,-.745),
-N(217.961,150.385),l(.304,-.043),l(.84,-.27),l(-.17,-.254),l(-.312,-.112),l(-.369,-.056),l(-.651,.016),l(-.497,-.042),l(-.645,.157),l(-1.193,.92),l(-.371,.029),l(-.653,.001),l(-.211,.113),l(-.189,.452),l(-.396,.284),l(-.32,.043),l(-.786,.086),l(.259,-.325),l(.473,-.312),l(-.128,-.593),l(.282,-.382),l(.114,-.099),l(1.258,-.61),l(1.625,-.47),l(1.164,-.087),l(.842,-.157),l(.825,.041),l(.566,-.044),l(.73,.168),l(.848,.083),l(.603,.197),l(.557,.112),l(.477,.013),l(.499,.268),l(.573,.536),l(.382,.253),l(.581,.168),l(.768,.111),l(1.229,.351),l(1.02,.492),l(.453,.31),l(.374,.55),l(.33,.141),l(.479,.041),l(1.704,.519),l(1.018,.167),l(.327,.239),l(-.344,.58),l(.233,.155),l(.559,.042),l(.756,-.072),l(.495,.168),l(.507,.38),l(.591,.281),l(.381,.296),l(-.233,.085),l(-.981,.087),l(-1.15,.398),l(-.626,.058),l(-1.054,-.209),l(-.9,-.041),l(-.934,.186),l(-.943,.115),l(-.484,.029),l(-.449,-.07),l(.353,-.382),l(.728,-.623),l(.173,-.396),L(229,154.204),l(-.181,-.127),l(-.622,-.14),l(-.7,.001),l(-.603,-.112),l(-.651,-.338),l(-.141,-.748),l(-.258,-.536),l(-.218,-.155),l(-.396,-.027),l(-1.005,.044),l(-.836,-.139),l(-.621,-.225),l(-.956,-.493),l(-.739,-.238),l(-.615,-.069),l(-1.154,-.068),l(-.489,-.098),l(-.855,-.352),
-N(634.036,168.444),l(.808,-.64),l(.121,-.438),l(-.002,-.945),l(-.157,-.507),l(-.419,-.703),l(-.979,-1.279),l(-.255,-.464),l(-.107,-.366),l(-.058,-1.524),l(-.435,-.632),l(-.688,-.659),l(-.285,-.535),l(-.052,-.282),l(-.266,-.153),l(-.893,-.192),l(-.403,-.012),l(-.286,.453),l(-.2,.538),l(-.543,.257),l(-.223,.072),l(-.59,-.265),l(-.835,-.348),l(-.346,.03),l(-1.173,1.178),l(-.37,.411),l(-.481,-.138),l(-.145,-.324),l(.027,-.494),l(.117,-.438),l(.528,-1.569),l(.085,-.41),l(-.249,-1.311),l(-.045,-.113),l(-.414,.045),l(-.489,.2),l(-.423,.003),l(-.186,-.154),l(-.066,-.367),l(.106,-.805),l(-.01,-.423),l(-.118,-.168),l(-.295,-.182),l(-.541,-.166),l(.193,-.185),l(.582,-.455),l(.442,-.581),l(.53,-.61),l(.502,-.355),l(.178,.196),l(.321,.21),l(.769,.08),l(.266,-.213),l(.109,-.339),l(-.119,-.521),l(-.228,-.366),l(-.138,-.592),l(.043,-.325),l(.24,-.241),l(.679,-.314),l(.45,.745),l(.613,.575),l(.543,.604),l(.338,.929),l(.334,.689),l(.607,.434),l(.47,.195),l(.287,-.058),l(.509,-.483),l(.39,-.171),l(.262,.083),l(.434,.675),l(.87,.968),l(.009,.508),l(-.255,.326),l(-.261,.185),l(-.287,.058),l(-.476,-.068),l(-.311,.101),l(-.277,.369),l(.043,.494),l(.162,.098),l(1.234,.741),l(.632,.476),l(.637,.646),l(.698,.772),l(1.683,2.121),l(.57,.914),l(.471,.52),l(.685,.391),l(.358,.308),l(.136,.395),l(-.226,.439),l(.072,.282),l(.529,.477),l(.214,.437),l(.064,.578),l(-.155,.918),l(-.209,.114),l(-.975,.429),l(-.3,.072),l(-.373,-.351),l(-.444,-.181),l(-.476,.186),l(-.392,.285),l(.107,.296),l(.187,.182),l(.103,.211),l(-.095,.24),l(-.248,.058),l(-.469,-.251),l(-.341,-.111),l(-.736,-.165),l(-.533,-.251),
-N(60.074,72.607),l(-.099,.228),l(-.491,.472),l(-.395,.183),l(-.462,.062),L(58,73.461),l(-.961,-.362),l(-.153,-.197),l(.169,-.289),l(.54,-.274),l(.341,-.32),l(.716,.364),l(.3,.091),l(.465,-.26),l(.215,-.213),l(.064,-.366),l(.485,-.047),l(1.107,.135),l(.536,.334),l(.133,.213),l(-.756,.062),l(-.429,0),l(-.59,.184),l(-.11,.092),M(40.092,77.571),l(-.729,-.029),l(-.097,-.24),l(.011,-.3),l(.802,-.243),l(.326,-.211),l(.593,-.423),l(.448,-.137),l(.646,-.077),l(1.427,.253),l(.711,.24),l(-.079,.211),l(-.303,.046),l(-.754,-.074),l(-.496,.031),l(-1.077,.183),l(-.269,.226),l(-1.161,.543),M(38.426,77.979),l(-.515,-.209),l(-.139,-.285),l(.381,-.227),l(.674,.27),l(.093,.195),l(-.122,.15),l(-.372,.105),M(37.896,78.449),l(-.256,.084),l(-.558,.151),l(-1.109,-.058),l(-.387,.135),l(-.398,.434),l(-.31,.15),l(-.854,-.207),l(-.135,-.224),l(.497,-.359),l(.5,-.315),l(.955,-.166),l(.863,-.346),l(.39,.089),l(.461,.224),l(.341,.409),M(29.628,81.29),l(-.168,-.594),l(-.324,-.476),l(.839,-.136),l(.424,.088),l(.436,.238),l(-.244,.268),l(-.26,.06),l(-.073,.297),l(-.22,.09),l(-.412,.164),M(27.543,81.591),l(-.39,.031),l(-.741,.165),l(-.311,-.133),l(-.088,-.178),l(.104,-.119),l(.336,-.268),l(.294,-.09),l(.584,.222),l(.212,.371),M(54.394,157.986),l(-.559,-.356),l(-.044,-.884),l(-.243,-.677),l(.482,-.402),l(-.035,-.2),l(-.156,-.26),l(.052,-.149),l(.173,-.046),l(.354,.158),l(.652,.279),l(.593,.425),l(-.015,.275),l(.238,.046),l(.12,.287),l(.306,.149),l(-.062,.161),L(56,156.933),l(-.172,.204),l(-.766,.195),l(-.374,.23),l(-.295,.425),M(23.015,59.92),l(-1.613,-.646),l(-.75,-.205),l(-.792,-.062),l(-.9,.065),l(-.291,-.095),l(-.431,-.222),l(.179,-.287),l(.516,-.049),l(1.135,.221),l(.579,-.001),l(.543,-.081),l(.538,-.001),l(.828,.285),l(1.725,.362),l(.429,.237),l(.046,.111),l(-.569,-.03),l(-.646,.033),l(-.527,.365),M(99.855,70.993),l(.467,.929),l(-.071,.167),l(-.879,-.272),l(-.621,-.075),l(.067,.441),l(-.056,.228),l(-.935,-.607),L(97.03,71.41),l(.396,-.458),l(.263,-.153),l(.612,-.078),l(.784,.38),l(.771,-.108),M(100.975,73.606),l(.128,.272),l(-.086,.273),l(-.318,.483),l(-.559,-.815),l(-.597,-.909),l(-.04,-.228),l(.095,-.213),l(.407,.029),l(.568,.197),l(.402,.91),M(106.858,78.207),l(-1.872,-1.166),l(-.566,-.555),l(.01,-.467),l(-.559,-.843),l(.071,-.106),l(.456,.06),l(.274,.256),l(1.165,.48),l(.086,.196),l(-.059,.136),l(-.149,.226),l(.296,.436),l(.839,.374),l(.007,.974),M(140.191,127.819),l(-.043,-.094),l(-.198,-.36),l(-.049,-.067),l(-.032,.042),l(-.028,.05),l(-.04,-.092),l(.002,-.664),l(-.331,-.604),l(-.472,-.451),l(-.661,-.451),l(-.512,-.197),l(-.114,-.052),l(-.145,.034),l(.002,.092),l(-.088,.025),l(-.1,-.042),l(-.146,-.143),l(.076,-.076),l(-.073,-.202),l(-.228,-.252),l(-.283,-.025),l(-.312,.084),l(-.932,-.336),l(-.286,-.328),l(-.428,-.244),l(-.383,.042),l(-.932,-.16),l(-.721,.051),l(-.12,-.185),l(-.234,-.067),l(-.046,-.177),l(.094,-.117),l(-.157,-.504),l(.133,-.464),l(-.227,-.096),l(-.127,.008),l(-.249,-.134),l(0,-.101),l(.075,-.093),l(-.029,-.219),l(-.347,-.185),l(-.254,-.286),l(-.415,-.219),l(-.391,-.623),l(-.202,-.076),l(-.203,-.311),l(-.409,-.219),l(-.156,-.529),l(-.002,-.227),l(.178,.007),l(.147,-.164),l(.029,-.326),l(-.208,-.251),l(-.192,-.045),l(-.22,.037),l(-.303,-.126),l(-.535,-.514),l(.078,-.21),l(-.091,-.312),l(-.129,-.067),l(-.044,-.463),l(.058,-.152),l(.119,-.025),l(.099,.067),l(.073,.076),l(-.086,.101),l(.153,.202),l(.285,.126),l(.116,.118),l(.203,.017),l(-.385,-.564),l(-.183,-.144),l(-.021,-.236),l(-.184,-.109),l(-.051,-.344),l(-.13,.006),l(-.011,.144),l(.048,.446),l(-.093,.017),l(-.293,-.194),l(-.119,.042),l(-.516,-.404),l(-.136,-.363),l(-.377,-.514),l(-.531,-.379),l(-.624,-.583),l(-.123,-.142),l(.114,-.101),l(-.327,-.751),l(.161,-.43),l(-.254,-.479),l(-.22,-.355),l(-.738,-.782),l(-.104,-.299),l(.099,-.627),l(.252,-.628),l(.166,-.357),l(.059,-.856),l(-.215,-.785),l(-.692,-1.486),l(-.153,-.916),l(.096,-.287),l(.231,-.244),l(.402,-.201),l(.365,-.717),l(-.365,-.573),l(-.066,-.33),l(.424,-1.593),l(.153,-.575),l(.061,-.634),l(.091,-.778),l(.019,-.179),l(-.153,-.16),l(.08,-.231),l(-.103,-.167),l(.157,-.077),l(-.03,-.186),l(-.046,-.186),l(-.031,-.103),l(-.004,-.058),l(.322,.096),l(.209,-.019),l(.062,-.097),l(-.211,.006),l(-.614,-.122),l(.062,-.707),l(-.103,-.328),l(.017,-.277),l(.587,-.225),l(-.345,-.019),l(-.16,-.142),l(-.129,0),l(-.053,.045),l(.042,.116),l(-.12,.052),l(-.133,-.979),l(-.927,-1.463),l(-.017,-.465),l(.129,-.131),l(.544,.086),l(.632,.217),l(.785,.114),l(.641,.028),l(.546,-.044),l(.415,.086),l(.547,.318),l(.039,.435),l(-.42,.407),l(-.413,.347),l(.532,.146),l(.184,.188),l(.251,.169),l(.029,-.228),l(.161,-.232),l(.393,-.305),l(.21,-.581),l(.102,-.465),l(-.064,-.421),l(-.356,-.958),l(-.158,-.305),l(-.655,-.516),l(.194,.013),l(2.579,.001),l(1.335,.022),l(4.588,-.025),l(3.938,.008),l(2.87,-.001),l(1.687,.006),l(5.117,-.028),l(.74,.011),l(4.13,.021),l(1.089,-.035),l(3.821,.023),l(.875,-.005),l(3.617,-.004),l(4.84,.018),l(.601,-.003),l(2.935,.014),l(2.131,-.012),l(2.781,.029),l(2.915,-.016),l(2.105,.003),l(1.348,-.007),l(2.798,.029),l(2.687,-.029),l(.68,.003),l(-.387,-.588),l(-.131,-.347),l(.501,-.036),l(.896,.748),l(.279,.371),l(.468,.46),l(.833,.451),l(.518,-.076),l(1.425,.208),l(.02,.185),l(.271,-.012),l(.338,.48),l(.16,-.247),l(.502,.013),l(.241,.271),l(.469,.086),l(.064,.185),l(.506,.098),l(.573,-.141),l(.219,-.06),l(.412,-.191),l(.373,-.075),l(.028,.282),l(.197,.116),l(.855,-.083),l(.474,.041),l(.156,.115),l(.196,.144),l(.542,-.049),l(.707,.074),l(1.469,-.592),l(.805,-.189),l(.797,.227),l(.977,.386),l(3.975,1.576),l(2.15,1.061),l(.101,.429),l(.46,.465),l(.628,-.024),l(.178,.135),l(.184,.294),l(.916,.181),l(.307,.235),l(-.11,.318),l(.26,.33),l(2.529,1.05),l(.876,3.16),l(.054,.545),l(-.028,.746),l(-.377,.576),l(-.294,.544),l(-.264,.433),l(-.414,.294),l(-.707,.525),l(-.044,.218),l(.012,.33),l(.371,.427),l(.497,.169),l(.573,.068),l(.524,-.117),l(.925,-.506),l(.939,-.478),l(.88,-.262),l(.919,-.062),l(.944,-.163),l(1.464,-.452),l(.875,-.427),l(-.047,-.362),l(-.16,-.471),l(-.018,-.319),l(.162,-.375),l(.47,-.203),l(.93,-.091),l(1.123,.01),l(1.305,.138),l(1.156,-.197),l(.44,-.275),l(.163,-.512),l(.146,-.434),l(.545,-.164),l(1.754,-.814),l(.534,-.305),l(.968,-.523),l(1.76,-.009),l(2.508,.029),l(1.855,.004),l(1.093,.095),l(.174,-.375),l(.363,-.435),l(.402,-.06),l(1.161,.124),l(1.139,-1.45),l(1.139,-2.22),l(.514,-.626),l(.632,-.526),l(.273,.085),l(.505,.36),l(.381,.085),l(.41,-.176),l(.771,.025),l(.488,.288),l(.174,.274),l(.31,2.819),l(-.077,.229),l(.606,.231),l(.224,0),l(.042,.154),l(-.143,.069),l(.02,.256),l(-.192,.077),l(.16,.291),l(.188,-.153),l(.349,.495),l(-.268,.281),l(.299,-.04),l(.171,.093),l(-.511,.374),l(-.509,.093),l(-.297,-.12),l(-.013,.253),l(-.138,.067),l(-.077,-.107),l(-.231,-.08),l(-.277,.133),l(-.101,.28),l(-.171,-.013),l(-.15,.16),l(-.175,-.347),l(-.746,.28),l(-.204,-.093),l(.12,.413),l(-.666,-.213),l(.199,-.48),l(-.149,-.04),l(-.364,.52),l(-.332,.56),l(-.342,.333),l(-.324,-.227),l(-.249,.439),l(-.346,-.08),l(.122,-.307),l(-.325,.253),l(.165,.16),l(-.326,.293),l(-.318,-.133),l(.105,-.226),l(-.654,.253),l(.065,.359),l(-.264,.04),l(-.161,.373),l(-.352,.106),l(-.333,.679),l(-.404,.505),l(.173,.146),l(.068,.212),l(.168,.053),l(.083,-.08),l(.169,.013),l(-.122,.146),l(-.547,.106),l(.053,.093),l(-.392,.292),l(-.068,.159),l(.337,.027),l(.282,.093),l(.599,.704),l(.055,.398),l(.399,.106),l(.691,-.239),l(-.022,-.186),l(-.14,-.027),l(-.254,-.279),l(-.097,-.04),l(-.009,-.066),l(.196,0),l(.23,.133),l(.218,.358),l(.031,.425),l(-1.599,.292),l(-.032,-.385),l(-.124,-.066),l(-.109,.226),l(-.164,.04),l(-.03,.093),l(-.105,-.106),l(-.159,.266),l(-.164,.04),l(-.294,.04),l(-.045,-.332),l(.198,-.332),l(-.443,.119),l(-.154,-.146),l(-.082,.252),l(-.087,.664),l(-1.429,.132),l(-1.694,.159),l(-1.182,.345),l(-.787,.358),l(-.097,.212),l(-.32,.053),l(-.144,.172),l(-.032,-.04),l(.308,-.756),l(.024,-.106),l(-.071,.027),l(-.41,.994),l(-.079,-.08),l(-.406,.292),l(.218,.318),l(.553,.093),l(-.46,1.515),l(-.302,.429),l(-.259,-.092),l(.043,.251),l(-.062,.185),l(-.237,.145),l(-.462,.501),l(-.292,.304),l(-.167,.026),l(-.075,-.119),l(.177,-.31),l(-.113,-.178),l(-.43,.013),l(-.447,-.343),l(-.148,-.053),l(-.329,-.541),l(.315,-.257),l(.151,-.245),l(-.271,.119),l(-.362,.37),l(.489,.845),l(.033,.356),l(.387,.581),l(.28,.066),l(.104,.765),l(-.101,.238),l(-.151,.23),l(-.125,-.013),l(-.487,.666),l(-.396,.798),l(.034,.053),l(-.13,.132),l(-.107,-.125),l(-.374,.725),l(.026,.125),l(-.226,.04),l(-.137,-.263),l(.342,-.864),l(.195,-.29),l(.247,-.119),l(.061,-.237),l(-.093,-.059),l(-.374,.119),l(.226,-.383),l(-.218,.04),l(-.176,-.093),l(.012,-.191),l(.242,-.04),l(-.077,-.33),l(-.439,.296),l(-.241,-.204),l(-.157,.053),l(-.23,-.396),l(.355,-.171),l(.357,-.053),l(-.005,-.06),l(-.604,-.316),l(-.092,.165),l(-.072,0),l(.107,-.323),l(.089,-.02),l(.21,.159),l(.131,-.06),l(-.098,-.224),l(-.353,-.066),l(-.065,-.112),l(.096,-.112),l(.336,.02),l(.193,-.284),l(-.281,.046),l(-.158,-.059),l(.241,-.37),l(.652,-.152),l(-.328,-.06),l(.146,-.409),l(-.28,.093),l(-.096,.132),l(.11,.079),l(-.315,.191),l(-.035,-.224),l(-.093,.053),l(.051,.224),l(-.081,.086),l(-.051,-.158),l(-.097,-.066),l(-.103,.416),l(-.447,-.079),l(.402,.501),l(-.294,.666),l(.07,.237),l(.272,.488),l(-.055,.139),l(-.466,-.317),l(-.1,-.211),l(.026,.205),l(.174,.218),l(.421,.237),l(.132,.508),l(-.631,-.402),l(-.354,-.007),l(-.118,-.283),l(-.155,-.053),l(.066,.25),l(-.541,-.323),l(-.33,.04),l(.015,-.29),l(.427,-.323),l(-.428,.079),l(-.19,.468),l(.204,.231),l(.457,.046),l(.202,.25),l(.954,.297),l(-.047,.092),l(.554,.165),l(.158,.132),l(-.22,.468),l(-.227,.06),l(-1.042,-.804),l(.708,.811),l(.626,.171),l(-.248,.092),l(.323,.079),l(-.045,.079),l(.061,.06),l(-.034,.25),l(-.312,-.191),l(-.071,.073),l(.104,.211),l(-.216,.02),l(-.656,-.56),l(-.023,.026),l(.419,.475),l(.309,.158),l(.182,-.026),l(.191,.21),l(.018,.31),l(-.298,.059),l(-.492,-.534),l(-.474,-.198),l(-.199,.16),l(.046,.044),l(.44,.145),l(.488,.382),l(-.047,.237),l(.442,-.033),l(.031,-.119),l(.748,.119),l(.151,.382),l(.406,1.212),l(.448,.803),l(-.14,-.092),l(-.262,-.349),l(-.059,-.132),l(-.359,-1.172),l(-.147,-.277),l(-.056,.31),l(.135,0),l(.034,.198),l(-.292,-.066),l(.173,.283),l(.144,.099),l(.228,.58),l(-.144,-.053),l(-.211,-.382),l(.002,.224),l(-.52,-.303),l(-.06,.059),l(.266,.303),l(-.247,.119),l(-.526,-.204),l(.225,.204),l(-.375,.211),l(-.173,-.02),l(-.251,-.21),l(-.024,-.217),l(.083,-.158),l(-.081,-.053),l(-.091,.204),l(.044,.23),l(.116,.211),l(-.107,.158),l(.894,.02),l(.571,-.145),l(.125,.165),l(-.113,.191),l(-.072,.369),l(.14,.066),l(.092,-.257),l(.135,-.369),l(.18,-.105),l(.266,.31),l(.047,.296),l(-.166,.25),l(-.163,-.013),l(-.063,-.099),l(-.316,.474),l(-.254,.197),l(-.483,-.053),l(-.203,-.065),l(-.147,-.066),l(-.136,-.245),l(-.151,.014),l(.141,.244),l(-.075,.013),l(-.538,-.125),l(-.436,-.151),l(.162,.185),l(.269,.026),l(.833,.335),l(-.034,.119),l(-.396,.145),l(.247,.007),l(-.19,.25),l(-.281,.138),l(-.149,0),l(-.481,-.375),l(.242,.395),l(.43,.164),l(.302,-.171),l(.292,.026),l(.11,-.204),l(.04,.178),l(.217,.04),l(.048,.079),l(-.428,.322),l(-.013,.085),l(-.261,.072),l(-1.498,.214),l(-.865,.895),l(-.487,.609),l(-.13,.127),l(-.935,.143),l(-.528,.128),l(-.617,.241),l(-.678,.539),l(-.225,.424),l(-.096,.354),l(-.819,.694),l(-.693,.383),l(-.429,.199),l(-.797,.086),l(-.35,.58),l(-.177,.198),l(-.809,1.125),l(-.273,.781),l(-.459,1.249),l(.236,1.455),l(.387,.925),l(.456,.873),l(.934,1.562),l(.352,1.746),l(.486,1.194),l(-.075,.092),l(.287,.276),l(.123,.333),l(.062,.827),l(-.301,1.536),l(-.064,.278),l(-.31,.415),l(.108,.424),l(-.02,.252),l(-.393,.551),l(-.017,-.092),l(.129,-.241),l(-.025,-.138),l(-.256,.035),l(-.38,.137),l(-.291,-.126),l(-.509,.138),l(-.12,-.329),l(.014,-.233),l(-.567,-1.068),l(-.764,-.138),l(-.204,-.352),l(-.113,-.819),l(-.423,-.229),l(-.144,-.702),l(-.373,.093),l(-.608,-1.08),l(-.375,-.482),l(.296,0),l(.375,-.438),l(.048,-.226),l(-.167,-.226),l(-.471,.407),l(-.277,-.208),l(.126,-.573),l(.147,-.758),l(.158,-1.043),l(-.293,-.452),l(-.258,-.169),l(-.496,-.126),l(-.832,-.987),l(-.875,-.804),l(-.528,-.168),l(-.43,.072),l(-.536,.298),l(-.456,.354),l(-1.202,.299),l(-.273,-.213),l(-.131,-.62),l(-.253,-.254),l(-.264,-.113),l(-.752,-.069),l(-.516,-.296),l(-.22,-.233),l(-.504,.138),l(-1.052,.115),l(-.653,-.184),l(-.047,.298),l(-.64,.099),l(-.183,0),l(-.578,-.926),l(-.238,.781),l(-.447,-.135),l(-.65,.001),l(-1.328,-.04),l(-.672,.439),l(-.39,.055),l(-1,-.459),l(-.096,.009),l(-.142,.014),l(-.362,.528),l(.201,.229),l(.303,0),l(.211,0),l(.537,-.207),l(.406,.092),l(.676,.482),l(-.68,.373),l(.02,.254),l(.263,.353),l(.593,.146),l(.229,.217),l(.35,.334),l(-.533,.136),l(-.503,-.084),l(-.276,-.419),l(-.79,-.271),l(-.224,-.211),l(-.265,-.056),l(-.013,.02),l(-.209,.32),l(.209,.154),l(.248,.183),l(-.248,.179),l(-.069,.05),l(-.447,-.459),l(-.476,.192),l(-.287,.291),l(-1.025,-.472),l(-.419,-.494),l(-1.16,-.642),l(-.615,.066),l(.554,.393),l(-.307,.187),l(-1.17,-.083),l(-.886,-.252),l(-.896,-.168),l(-1.547,.173),l(-.632,.328),l(-.392,-.015),l(-.433,-.031),l(-.135,-.49),l(-.333,.057),l(-.112,.184),l(.474,.731),l(-.877,.64),l(-.808,.577),l(-.915,.317),l(-.419,.043),l(-.414,-.056),l(-.728,-.111),l(-.126,.198),l(.437,.437),l(-.239,.396),l(-.327,.199),l(-.631,.114),l(-.737,.27),l(-.268,.17),l(.558,.352),l(.111,.169),l(-.659,.694),l(-.154,.297),l(-.012,.848),l(.144,.636),l(.271,.762),l(.425,.903),l(-.347,-.119),l(-.816,-.377),l(-.296,.001),l(-.416,.116),l(-.264,-.069),l(-1.029,-.56),l(-.921,-.32),l(-.375,-.365),l(-.336,-.592),l(-.332,-.932),l(-.078,-.467),l(-.268,-.253),l(-.657,-.576),l(-.845,-1.042),l(-.744,-1.227),l(-.663,-1.029),l(-.363,-.366),l(-.412,-.252),l(-.783,-.321),l(-.475,-.082),l(-.643,.018),l(-.468,.201),l(-.576,.541),l(-.418,.413),l(-.283,.37),l(-.416,.158),l(-.501,-.011),l(-.337,-.069),l(-1.104,-.503),l(-1.092,-.659),l(-.445,-.549),l(-.318,-.847),l(-.284,-.678),l(-.179,-.226),l(-.708,-.491),l(-.837,-.519),l(-.766,-.632),l(-.631,-.662),l(-.209,-.112),l(-1.892,-.046),l(-1.858,-.003),l(-.096,.892),l(-.213,.101),l(-1.867,.011),l(-.966,-.037),l(-1.544,-.02),l(-1.662,-.019),l(-.338,-.055),l(-3.516,-1.112),l(-2.811,-.933),l(-1.186,-.39),l(-.267,-.154),l(-.316,-.31),l(-2.381,.084),l(-2.367,.155),l(-.34,.017),M(49.818,152.776),l(-.122,.086),l(-.279,.03),l(-.111,-.131),l(-.177,-.005),l(-.324,.051),l(-.304,-.39),l(-.071,-.263),l(.339,-.01),l(.299,-.253),l(.188,.218),l(.106,.294),l(.223,.096),l(.233,.279),M(52.785,154.312),l(-.155,-.081),l(-.085,-.356),l(-.461,-.321),l(.095,-.229),l(.143,-.058),l(.366,.209),l(.344,.055),l(.616,.356),l(-.005,.172),l(-.294,.184),l(-.563,.069),M(111.683,77.224),l(-.138,.415),l(-.45,.067),l(-.324,.113),l(-.295,.247),l(-.321,-.137),l(-.185,-.21),l(.087,-.443),l(.086,-.443),l(-.438,-.675),l(-.463,-.319),l(-.199,-.271),l(-1.281,.055),l(-.437,.098),l(-.153,.161),l(-.496,.097),l(-.019,-.193),l(-.034,-.432),l(.212,-.272),l(.184,-.212),l(-.378,-.347),l(-.641,-.438),l(-.693,-.696),l(-.723,-.317),l(-.453,-.136),l(.132,-.35),l(-.569,-.592),l(-.099,-.213),l(.371,-.229),l(-.068,-.122),l(-.301,-.152),l(-.445,-.076),l(-.392,-.274),l(-.237,-.259),l(-.57,-.305),l(-1,-.411),l(-.479,-.765),l(-.217,-.583),l(-.367,-.399),l(-.357,.016),l(-.101,.814),l(.42,.873),l(.104,.306),l(-.047,.153),l(-.701,-.136),l(-.272,-.076),l(-.511,-.504),l(-.4,-.459),l(-.537,.139),l(-1.219,-.228),l(1.263,.718),l(.032,.214),l(-1.62,.171),l(-1.093,-.35),l(-1.388,-.948),l(-.543,-.292),l(-.664,-.043),l(-.079,0),l(-.933,-.213),l(-1.3,-.536),l(.928,-.248),l(.135,-.169),L(90.8,67.129),l(-.384,-.153),l(-.792,.156),l(-.454,.14),l(-.656,.017),l(-1.058,-.06),l(-1.068,-.245),l(.027,-.247),l(-.148,-.186),l(-.325,-.108),l(-.359,.016),l(-.47,.202),l(-1.036,.049),l(-1.465,-.122),L(80.46,66.64),l(-.786,-.091),l(-.248,-.108),l(-.651,-.387),l(-.427,-.527),l(-.301,.218),l(-.788,.157),l(-.89,-.293),l(-.234,-.326),l(-.417,-.139),l(-.872,-.248),l(-1.538,-.23),l(-.817,-.248),l(-.671,-.342),l(-.553,.235),l(-.675,.079),l(.06,.437),l(-.193,.062),l(-.389,.25),l(-.249,.405),l(1.119,.293),l(.174,.294),l(-.096,.388),l(-.428,.449),l(-.458,.001),l(-.804,-.214),l(-.586,-.061),l(-.568,.094),l(-.978,.603),l(-1.066,.217),l(-.936,.448),l(-1.035,.448),l(-1.095,.109),l(.178,-.308),l(.063,-.123),l(.72,-.401),l(-.093,-.385),l(-.655,-.523),l(.004,-.108),L(64.1,66.19),l(.411,-.482),l(.157,-.42),l(.736,-.312),l(.87,-.235),l(1.165,-.018),l(1.085,.123),l(.239,-.156),l(-1.239,-.466),l(-.971,-.389),l(-1.043,.049),l(-.226,.219),l(-.449,.095),l(-.573,.438),l(-.865,.375),l(-1.019,.282),L(61.553,65.9),l(-.406,.094),l(-.298,.14),l(.131,.325),l(-.177,.526),l(-.563,.34),l(-.564,.078),L(59,67.544),l(-.592,.278),l(-.681,.601),l(-.035,.292),l(.38,.168),l(.36,.03),l(.667,.106),l(.465,.229),l(-.075,.184),l(-.43,.338),l(-.625,.2),l(-.557,.277),l(-.423,.398),l(-.544,.383),l(-.675,.093),l(-1.434,.308),l(-.678,.397),l(-1.036,.337),l(-.7,.367),l(.52,.5),l(-.1,.167),l(-1.106,.412),l(-.897,.153),l(-.778,.168),L(49.51,74.19),l(-1.214,.456),L(48.1,74.828),l(-.274,.394),l(-.753,.439),l(-1.193,.229),l(-1.234,.184),l(-.973,-.345),l(.001,-.181),l(.332,-.348),l(.763,-.273),l(.306,-.212),l(.445,-.364),l(1.171,-.441),l(1.403,.073),l(-.12,-.212),l(.02,-.516),l(.47,-.304),l(.725,-.291),l(.754,-.366),l(.266,-.214),l(.002,-.731),l(.246,-.749),l(.693,-.49),l(.194,-.398),l(.034,-.412),l(-.633,.122),l(-1.251,.186),l(-.676,-.029),l(-.5,-.597),l(-.266,.062),l(-.613,.216),l(-.136,.23),l(.239,.352),l(.021,.352),l(-.169,.046),L(47,70.115),l(-.567,-.32),l(-.487,-.397),l(-.509,-.291),l(-.56,-.03),l(-.812,-.106),l(-.91,.094),l(.028,.138),l(-.644,.338),l(-1.175,.14),l(-.649,-.09),l(-.064,-.123),l(-.082,-.107),l(-.125,-1.028),l(.3,-.508),l(-.142,-.431),l(-.864,-1.002),l(-1.43,.437),l(-.738,.078),l(-.406,.202),l(-1.091,.094),l(-.4,-.23),l(-.394,-.355),l(-.466,-.325),l(-1.007,-.463),l(-.179,-.28),l(.292,-.171),l(.337,-.437),l(.704,.139),l(1.312,.309),l(.69,.03),l(.238,-.234),l(-.375,-.482),l(-.458,-.264),l(-.363,0),l(-.541,.22),l(-.528,-.015),l(-1.342,-.513),l(-.623,-.186),l(-.197,.016),l(-.858,-.029),l(-.024,-.078),l(-.623,-.985),l(.79,-.19),l(.071,-.456),l(.495,-.221),l(.102,-.299),l(.227,-.347),l(.893,-.491),l(.337,-.38),l(.386,-.301),l(.527,-.476),l(.39,-.175),l(.719,.109),l(.98,.268),l(.485,.094),l(.752,-.144),l(.427,-.254),l(.675,-.429),l(1.252,-.257),l(.774,-.033),l(.955,-.049),l(.354,-.175),l(.187,-.478),l(-.259,-.669),l(-.814,-.686),l(.026,-.096),l(.927,-.034),l(.343,-.256),l(-.25,-.384),l(-.497,-.256),l(-.367,-.08),l(-1.88,.389),L(39.33,56.53),l(-.534,.289),l(-.496,.065),l(-1.907,-.333),l(-.848,-.031),L(34.8,56.49),l(-1.27,.162),l(-1.265,-.029),l(-1.349,-.174),l(-.53,-.207),l(-.183,-.788),l(.144,-.146),l(.636,-.033),l(1.008,-.002),l(.446,-.179),l(-1.057,-.241),l(-1.912,-.304),L(28.13,54.31),l(-1.285,-.208),l(.219,-.114),l(.781,-.262),l(1.568,-.214),l(1.325,-.328),l(.958,-.214),l(1.058,-.361),l(.953,-.23),l(1.399,-.281),l(1.513,.128),l(-.158,.523),l(.023,.277),l(1.051,.161),l(1.359,.095),l(1.074,-.019),l(.657,-.099),l(.784,-.246),l(.55,-.295),l(.262,-.083),l(.752,.064),l(.751,.113),l(1.021,-.051),l(.2,-.327),l(.007,-.18),l(-.689,-.064),l(-1.946,-.292),l(-1.283,-.047),l(-.312,-.755),l(-1.473,-.162),l(-.96,-.031),l(-1.573,-.096),l(-.194,-.511),l(-.484,-.312),l(-1.042,-.461),l(-.512,-.148),l(-2.66,-.659),l(-2.008,-.545),l(.317,-.167),l(.812,-.402),l(.086,-.485),l(2.136,-.054),l(.99,-.069),l(1.829,-.288),l(.784,-.354),l(.452,-.623),l(.788,-.575),l(.616,-.525),l(.818,-.41),l(.742,-.224),l(1.066,-.104),l(1.133,-.241),l(1.047,-.036),l(1.804,.065),l(.146,-.188),l(-.156,-.205),L(44.47,42.83),l(.018,-.206),l(1.936,-.089),l(1.143,.032),l(.974,-.054),l(1.344,-.14),l(1.098,-.416),l(.918,-.417),l(.957,-.019),l(.282,.051),l(.675,.241),l(.156,.172),l(-.383,.139),l(.017,.344),l(1.049,.136),l(.424,.034),l(.536,-.293),l(.297,-.208),l(1.419,.187),l(1.534,.049),l(1.062,.049),l(.715,.033),l(.711,.257),l(.359,.274),l(.783,.358),l(.494,.085),l(.421,-.086),l(1.292,.117),l(1.124,.015),l(1.556,-.054),l(1.449,-.088),l(1.213,.1),l(1.377,.254),l(.883,.118),l(3.424,.13),l(1.279,.168),l(.743,.169),l(2.027,-.038),l(2.339,-.141),l(1.123,.236),l(2.441,.791),l(1.206,.301),l(.227,.008),l(.102,.483),l(-.003,2.855),l(.039,2.259),l(.052,2.335),l(.129,2.796),l(-.026,2.183),l(-.043,4.334),l(.026,2.167),l(.089,1.046),l(.196,.279),l(.84,.074),l(2.424,-.122),l(.739,.059),l(.332,.388),l(.173,.387),l(.348,.292),l(2.162,1.318),l(.945,.673),l(.238,-.325),l(.848,-.205),l(1.225,-.67),l(.731,-.498),l(.495,-.126),l(.832,.073),l(.316,.199),l(.371,.492),l(.35,.322),l(2.048,1.175),l(.814,.58),l(1.769,1.768),l(1.67,1.882),l(.512,.393),l(.189,.029),l(.98,.314),l(2.025,.763),l(.402,.255),l(-.163,.788),l(.393,.777),
-N(643.755,159.873),l(-1.092,-.52),l(-.637,-.337),l(-.203,-1.284),l(.036,-.282),l(.24,-.241),l(.42,-.241),l(.721,-.623),l(.493,.056),l(.049,-.17),l(.24,-.396),l(.239,.028),l(.573,.225),l(.321,-.312),l(.439,-.001),l(.798,-.171),l(.596,.69),l(-.163,.17),l(-.443,.354),l(-.412,.538),l(-.285,.734),l(.14,.296),l(-.22,.311),l(-.292,.085),l(-1.026,.383),l(-.532,.707),M(627.173,150.012),l(-.679,.314),l(-.24,.241),l(-.043,.325),l(.138,.592),l(.228,.366),l(.119,.521),l(-.109,.339),l(-.266,.213),l(-.769,-.08),l(-.321,-.21),l(-.178,-.196),l(-.153,-.239),l(-.111,-.38),l(-.628,.413),l(-.647,.159),l(-.246,-.083),l(-.378,-.266),l(-.341,-.746),l(-.291,-.379),l(-.481,.045),l(-.507,.003),l(-.228,-.098),l(-.117,-.352),l(.729,-1.584),l(-.033,-.268),l(-.521,-.096),l(-.554,.074),l(-.202,-.324),l(-.277,-1.762),l(-.156,-.126),l(-.479,.017),l(-.771,.089),l(-.819,.442),l(-.312,.086),l(-.216,-.069),l(0,-.268),l(.224,-.58),l(-.163,-.705),l(-.075,-.465),l(.617,-.85),l(.191,-.198),l(.487,-.271),l(.611,-.525),l(.429,-.722),l(.353,-.862),l(-.02,-.875),l(-.195,-1.649),l(-.146,-.14),l(-.504,.031),l(-.287,-.041),l(-.217,-.309),l(-.243,-.901),l(-.397,-.435),l(-.504,-.279),l(-.277,.044),l(-.306,.34),l(-.001,.127),l(-.624,-.081),l(-.73,-.179),l(-.657,-.081),l(-.3,-.055),l(-.102,-.056),l(.138,-.269),l(.354,-.454),l(-.046,-.38),l(-.716,-.715),l(-.455,-.392),l(-1.377,.84),l(-.377,.044),l(-.975,-.319),l(-.286,-.167),l(-.355,.087),l(-.546,.299),l(-1.105,.726),l(-.829,.258),l(-.543,.37),l(-1.123,1.107),l(-.397,.27),l(-.714,.216),l(-.784,.033),l(-.189,.1),l(-.329,-.619),l(-.312,-.209),l(-.371,-.041),l(-1.659,-.047),L(601,137.538),l(-.309,-.294),l(-.417,.016),l(-.149,.103),l(-.348,.239),l(-.609,.539),l(-1.251,1.545),l(-.212,-.662),l(.052,-.861),l(-.139,-.183),l(-.231,-.069),l(-.471,.102),l(-.345,.129),l(-.655,-.159),l(-.339,.281),l(-.341,-.116),l(-.849,.066),l(-.319,-.364),l(-.63,-.281),l(-.407,0),l(-.08,.331),l(-.271,.083),l(-.685,-.38),l(.01,.364),l(-.237,.099),l(-.141,-.463),l(-.54,-.496),l(-.365,.066),l(-.935,-.066),l(-.014,-.265),l(.175,-.396),l(-.326,-.017),l(-.333,.248),l(-1.451,-.893),l(.069,-.281),l(-.178,-.38),l(-.289,-.166),l(-.71,.116),l(-.158,.166),l(-.657,-.794),l(-.454,-.281),l(-.15,.132),l(-.472,-.215),l(-.726,-.595),l(-.867,-.264),l(-.132,-.612),l(-1.079,-.199),l(-.186,.182),l(-.275,-.066),l(-.134,.513),l(-.276,.314),l(-.299,-.05),l(-.24,-.43),l(-.859,-.596),l(-.154,.066),l(-.756,-.248),l(.116,-.364),l(-1.078,-.579),l(-.363,.116),l(-.772,-.843),l(-.383,-.248),l(-.477,.314),l(-.198,-.066),l(-.099,-.43),l(.215,-.215),l(-.272,-.364),l(.104,-.446),l(-.579,-.595),l(-.157,-.694),l(.785,-.198),l(.033,.364),l(.337,.264),l(.368,-.049),l(.376,-.281),l(.578,-.364),l(-.367,-.694),l(.104,-.414),l(-.68,-.099),l(-.044,-.182),l(-.092,-.078),l(-.718,-.096),l(-.294,-.221),l(-.037,-.552),l(-.073,-.589),l(.184,-.184),l(.331,-.221),l(-.221,-.258),l(-.441,-.405),l(-.81,-.11),l(-.221,-.515),l(-.441,-1.03),l(0,-.515),l(-.502,.152),l(-.147,-.126),l(-.305,-.111),l(-1.337,-.104),l(-.565,-.436),l(-.178,-.09),l(-.104,-.199),l(-.239,0),l(-.52,.196),l(-.252,-.281),l(-.198,-.218),l(-.301,-.07),l(.312,-.516),l(-.007,-.501),l(-.213,-.247),l(-.373,-.323),l(-.625,.009),l(-.282,.128),l(-.004,-.456),l(-.554,-.117),l(-.296,-.047),l(-.281,.21),l(-.105,-.112),l(-.313,-.14),l(-.048,-.088),l(-.236,-.012),l(-.01,-.269),l(.574,.059),l(.192,-.145),l(.354,-.136),l(.08,-.249),l(.181,-.185),l(-.2,-.163),l(.152,-.36),l(-.245,-.237),l(.126,-.428),l(-.049,-.123),l(-.152,-.012),l(-.028,-.246),l(.009,-.284),l(-.295,-.494),l(-.273,-.154),l(-.692,-.039),l(-.22,-.06),l(-.229,.162),l(-.463,.045),l(-.325,-.394),l(-.077,-.305),l(.207,-.223),l(-.023,-1.031),l(.011,-.069),l(.139,-.739),l(.129,-.213),l(.274,-.186),l(1.422,-.704),l(1.737,-.734),l(.359,-.03),l(.06,.071),l(.183,.567),l(.344,.055),l(.507,-.145),l(.885,-.132),l(.268,-.243),l(.463,-.784),l(.467,-.472),l(.238,-.03),l(1.248,.235),l(.459,-.017),l(.478,-.102),l(.646,-.345),l(.638,-.701),l(.405,-.301),l(.445,-.145),l(1.338,-.349),l(.97,-.219),l(.325,-.187),l(.051,-.157),l(-.031,-.194),l(-.139,-.86),l(.02,-.399),l(.32,-.401),l(.705,-.546),l(.222,-.33),l(-.119,-.47),l(-.29,-.441),l(-.345,-.627),l(-.03,-1.357),l(-.483,-.141),l(-.366,.06),l(-.232,-.185),l(.068,-.215),l(.215,-.302),l(.393,-.188),l(1.799,-.254),l(1.082,-.207),l(.35,-.06),l(.5,.184),l(1.133,.238),l(.394,-.074),l(.231,-.145),l(.156,-.245),l(-.126,-.286),l(-.622,-.514),l(.137,-.418),l(.286,-.605),l(.438,-.794),l(.516,-1.141),l(.427,-.507),l(1.096,.254),l(.721,.141),l(.594,.141),l(1.402,.079),l(.718,-.062),l(.417,-.103),l(.444,-.392),l(.157,-.39),l(-.213,-.707),l(-.097,-.75),l(.34,-.581),l(.428,-.277),l(1.199,-.093),l(.289,-.06),l(.306,-.219),l(.035,-.478),l(.011,-.275),l(.279,-.262),l(.542,-.148),l(.551,-.034),l(.228,-.014),l(.569,-.003),l(.244,-.074),l(.062,.145),l(.131,.405),l(.24,.563),l(.371,.433),l(1.301,.745),l(.834,.415),l(.614,.069),l(.731,.167),l(.633,.144),l(.354,.143),l(.568,.618),l(1.07,1.451),l(.401,.66),l(-.215,.447),l(-.237,.75),l(-.214,.389),l(-.369,.347),l(-.035,.129),l(.105,.43),l(.233,.229),l(.724,.312),l(1.062,.181),l(1.505,.021),l(.995,.038),l(.668,.083),l(.998,.224),l(.632,.268),l(1.645,.806),l(.839,.31),l(.744,.096),l(.105,.542),l(1.571,2.161),l(.467,.439),l(.444,.254),l(1.979,.018),l(1.241,.207),l(.802,.109),l(1.165,.022),l(2.861,-.059),l(.937,.023),l(1.164,.022),l(1.69,.119),l(.521,.168),l(.815,.551),l(1.006,.365),l(1.599,.433),l(.929,.123),l(.663,-.061),l(.61,.067),l(.253,.297),l(.433,.197),l(.481,-.017),l(.686,-.289),l(1.44,-.534),l(.303,-.101),l(.736,-.274),l(.816,-.289),l(1.204,-.349),l(1.339,-.007),l(1.514,-.065),l(.987,.08),l(.651,-.061),l(1.941,-.737),l(.265,-.172),l(1.111,-1.046),l(.67,-.389),l(1.265,-.292),l(.326,-.259),l(.123,-.271),l(-.188,-.228),l(-.599,-.411),l(-.389,-.569),l(-.003,-.343),l(.214,-.401),l(.539,-.589),l(.457,-.231),l(.316,-.073),l(.718,.154),l(.668,.382),l(.592,.125),l(.982,-.005),l(.744,-.047),l(.742,-.433),l(1.192,-.91),l(.224,.013),l(.438,.012),l(.624,.054),l(.896,-.134),l(.638,-.248),l(.347,-.188),l(.241,-.216),l(.312,-.82),l(.363,-.333),l(.47,-.204),l(.464,-.045),l(.483,.127),l(.353,-.189),l(.831,-.278),l(.539,-.146),l(.937,-.221),l(.854,-.033),l(.432,.099),l(1.074,.008),l(.464,.127),l(.414,-.218),l(.107,-.217),l(-.048,-.273),l(-.599,-.501),l(-.879,-.99),l(-.797,-.5),l(-.538,-.199),l(-.928,-.212),l(-.438,.002),l(-1.191,.786),l(-.292,-.07),l(-.431,-.416),l(-.317,-.085),l(-.576,.018),l(-.754,.062),l(-.929,.395),l(-.342,.045),l(-.051,-.029),l(-.269,-.836),l(.381,-.58),l(1.224,-1.959),l(.687,-1.207),l(.295,-.31),l(.046,.018),l(.452,.172),l(1.126,.574),l(.343,-.016),l(.438,-.089),l(2.44,-.752),l(.779,-.339),l(.123,-.233),l(-.056,-.306),l(-.35,-.348),l(-.062,-.146),l(.103,-.249),l(.422,-.426),l(.416,-.543),l(.667,-.779),l(.599,-.545),l(1.371,-.608),l(.167,-.794),l(-.107,-.249),l(-.465,-.306),l(-.558,-.026),l(-.822,.078),l(.119,-.25),l(.375,-.282),l(1.193,-.787),l(.478,-.165),l(.602,-.136),l(1.854,-.143),l(.836,-.123),l(1.203,-.109),l(.917,-.049),l(1.148,.215),l(1.037,.481),l(.683,.188),l(1.386,-.125),l(.539,.026),l(.763,.467),l(.742,.952),l(1.087,2.384),l(.94,1.588),l(.927,1.903),l(.436,.389),l(.507,.2),l(1.247,.341),l(1.523,.253),l(2.659,.839),l(.205,.144),l(.297,.866),l(.44,1.283),l(.261,.446),l(.68,-.033),l(.649,-.018),l(1.657,-.052),l(.604,-.22),l(.953,-.308),l(1.357,-.31),l(1.181,-.208),l(.902,-.034),l(.246,.114),l(.064,.259),l(.116,.389),l(.017,.504),l(-.566,.407),l(-.66,.393),l(-.291,.707),l(-.278,.893),l(-.538,1.066),l(-.627,1.08),l(-.329,.432),l(-.551,.69),l(-.47,.347),l(-.547,-.098),l(-.679,-.225),l(-.685,-.24),l(-.396,-.041),l(-1.664,.982),l(-.048,.557),l(.332,.897),l(.062,.656),l(-.006,.613),l(-.025,.385),l(-.097,.128),l(.112,.299),l(-.156,.329),l(-.511,.43),l(-1.252,.462),l(-.111,.058),l(-.579,-.68),l(-.247,.001),l(-.253,.129),l(-.383,.358),l(-.23,.713),l(-.955,.532),l(-.62,.259),l(-.538,.017),l(-.452,-.054),l(-.333,-.126),l(-.392,.059),l(-.273,.243),l(-.025,.342),l(.508,.765),l(.046,.113),l(-.527,.159),l(-.975,.048),l(-.508,-.153),l(-.493,-.253),l(-.273,-.396),l(-.448,.017),l(-.386,.13),l(-.686,1.027),l(-.636,.543),l(-1.032,.545),l(-1.533,.604),l(-.52,.329),l(-.415,.442),l(-.379,.528),l(-.066,-.092),l(-.417,.171),l(-1.222,.13),l(-.728,.171),l(-2.248,.925),l(-.632,.37),l(-.566,.469),l(-.604,.271),l(-.336,.015),l(.13,-.255),l(.862,-.682),l(.33,-.354),l(-.47,-.113),l(-.37,.072),l(-.153,-.297),l(.058,-.156),l(.953,-.781),l(.269,-.384),l(.55,-.413),l(.159,-.2),l(-.057,-.298),l(-.73,-.553),l(-.727,-.283),l(-.131,-.014),l(-.628,.03),l(-.166,.015),l(-.494,.371),l(-1.146,1.183),l(-.355,.157),l(-.643,.086),l(-.613,.243),l(-.36,.199),L(665.49,112),l(-.136,.411),l(-.131,.255),l(-.251,.255),l(-.437,.128),l(-.493,-.013),l(-.326,.27),l(-.307,.114),l(-.455,-.565),l(-.355,-.014),l(-.349,.128),l(-.396,.638),l(-.301,.694),l(.088,.34),l(.245,.368),l(.558,.268),l(.8,.268),l(1.21,-.045),l(.29,.254),l(-.019,.538),l(-.123,.581),l(.057,.538),l(.261,.283),l(.733,.069),l(.698,-.157),l(.76,-.525),l(.509,-.497),l(.552,-.228),l(.534,-.128),l(.287,.07),l(.895,.621),l(.543,.197),l(1.023,-.087),l(.361,.027),l(.471,.141),l(.274,0),l(-.248,.708),l(-.057,.552),l(-.612,-.197),l(-.297,-.084),l(-.525,.058),l(-1.677,.555),l(-.707,.44),l(-.072,.735),l(-.522,.157),l(-.146,-.113),l(-.017,-.269),l(-.127,-.084),l(-.501,.114),l(.138,.466),l(-.152,.368),l(-.485,.496),l(-1.397,1.119),l(-.126,.226),l(.039,.55),l(.62,.225),l(.712,.492),l(.785,.521),l(.391,.535),l(.424,1.241),l(.668,.647),l(.175,.437),l(-.13,.677),l(.172,.183),l(.694,.295),l(.399,.592),l(.562,.253),l(.272,.268),l(.087,.31),l(-.049,.155),l(-.789,.369),l(.088,.07),l(.425,.31),l(.314,.79),l(-.019,.296),l(-.141,.184),l(-.534,.043),l(-.651,.213),l(-.948,.552),l(-.849,.213),l(-.629,.297),l(.72,.21),l(.378,.056),l(.944,-.425),l(.488,-.058),l(.162,.056),l(.524,.592),l(.387,.168),l(.456,.027),l(.009,.155),l(-.231,.311),l(-.382,.227),l(-.304,.241),l(.11,.155),l(.326,-.029),l(.202,.084),l(-.184,.325),l(-.298,.749),l(-.192,.649),l(.028,.353),l(-.22,.452),l(-.209,.127),l(-.35,-.338),l(-.146,.142),l(-.569,.763),l(-.401,.622),l(-.215,.622),l(-.127,.296),l(-.595,.425),l(-.251,.438),l(-.254,.184),l(-.569,.029),l(-.382,.227),l(.279,.719),l(-.264,.508),l(.076,.593),l(-.093,.269),l(-.207,.269),l(-.532,.199),l(-.161,.282),l(-.174,.396),l(-.294,.636),l(-.626,.354),l(-.412,.495),l(-.492,-.14),l(-.443,-.069),l(-.142,.113),l(-.145,.198),l(.118,.833),l(-.213,.142),l(-.772,.651),l(-.356,.127),l(-.628,.171),l(-.563,.467),l(-.571,.213),l(-.107,.113),l(-.008,.48),l(-.133,.156),l(-.568,.058),l(-.5,.114),l(-.341,.438),l(-.364,-.126),l(-.52,-.168),l(-.274,.057),l(-.315,.326),l(-.435,.198),l(-.643,.1),l(-.047,-.465),l(-.52,.057),l(-.699,.213),l(-.32,.198),l(-.285,-.042),l(-.401,-.493),l(-.163,-.155),l(-.191,.283),l(.095,.169),l(-.045,.212),l(-.047,.691),l(-.209,.297),l(-.416,.114),l(-.501,-.182),l(-.123,.282),l(-.001,.24),l(-.146,.155),l(-.615,.058),l(-.366,.114),l(-.596,.043),l(-.463,-.211),l(-.217,.1),l(-.439,.48),l(-.227,.071),l(-.774,-.041),l(-.747,.227),l(-.406,.326),l(-.451,-.027),l(-.277,-.084),l(-.011,.057),l(-.069,.353),l(-.29,.396),l(.011,.113),l(.48,.634),l(.269,.126),l(.043,.198),l(-.36,.269),l(-.763,.157),l(-.481,-.719),l(-.241,-.691),l(.012,-.395),l(.396,-.777),l(-.015,-.169),l(-.587,-.253),l(-.226,.071),l(-.206,.297),l(-.454,.072),l(-.676,-.21),l(-.574,-.733),l(-.196,.085),l(-.017,.169),l(-.159,.396),l(-.27,.128),l(-.332,-.056),l(-.481,.043),l(-.055,.038),l(-.197,-.143),l(-.909,-.107),l(-.621,-.166),l(-.943,-.615),l(-.273,-.365),l(-.096,-.521),l(.472,-.75),l(-.056,-.38),l(-.237,-.21),l(-.777,.047),l(-.66,-.053),l(-.771,-.235),l(-.623,-.575),l(-.298,.101),l(-.521,.328),l(-.696,.554),l(-.341,.157),l(-.807,.117),l(-1.595,.052),l(-.332,.115),l(-.584,.413),l(-.325,-.097),l(-.597,-.392),l(-.341,-.012),l(-.515,.13),l(-.483,.229),
-N(241.073,156.152),l(.017,.52),l(.098,1.215),l(.012,.212),l(-.379,.455),l(-.011,.17),l(.485,1.358),l(-.669,-.577),l(-.445,-.056),l(-.761,.143),l(-.877,-.012),l(-.666,-.14),l(-.574,-.056),l(-.474,.1),l(-.378,.354),l(-.135,-.042),l(-.993,-.549),l(-.171,-.325),l(.04,-.198),l(.269,-.184),l(1.051,.097),l(.631,.111),l(1.125,.167),l(.654,.041),l(.61,-.185),l(.386,-.156),l(-.198,-.155),l(-.692,-.464),l(-.136,-.296),l(.184,-.707),l(-.202,-.296),l(-.394,-.154),l(-.913,-.14),l(-.305,-.211),l(.04,-.184),l(.119,-.085),l(.344,-.1),l(.724,-.058),l(.781,.125),l(1.081,.294),l(.576,.056),l(.147,-.089),
-N(241.295,160.082),l(-.485,-1.358),l(.011,-.17),l(.379,-.455),l(-.012,-.212),l(-.098,-1.215),l(-.017,-.52),l(.503,-.279),l(.393,.14),l(.342,0),l(.384,-.17),l(.369,-.043),l(.14,.198),l(.177,.112),l(1,.309),l(.657,-.072),l(.213,.395),l(.335,.338),l(.528,.324),l(.335,.084),l(.643,.21),l(.916,.45),l(.399,.352),l(.231,.311),l(-.191,.17),l(-.144,.297),l(-.314,.368),l(-.238,-.098),l(-.476,-.592),l(-.378,-.042),l(-.788,.058),l(-.288,-.098),l(-.373,0),l(-.329,.1),l(-.763,.539),l(-.396,-.056),l(-.319,-.494),l(-.166,-.028),l(-.155,.057),l(-.658,.326),l(-.344,.778),l(-.41,.65),l(-.289,-.112),l(-.325,-.551),
-N(668.053,167.796),l(-.131,-.099),l(-.74,-.732),l(-.444,-1.255),l(.037,-.424),l(.054,-.706),l(-.292,-.465),l(.18,-.382),l(.978,.704),l(.202,-.424),l(.023,-.41),l(-.101,-.438),l(-.026,-.579),l(.145,-.438),l(.025,-.664),l(.082,-.861),l(.074,-.636),l(.38,-.862),l(.188,-.127),l(.337,-.142),l(.523,.055),l(1.21,.52),l(.576,.042),l(.188,-.212),l(.277,-.17),l(.199,.141),l(.018,.396),l(-.266,.438),l(-.045,.48),l(.14,.79),l(.541,.394),l(.182,.325),l(-.427,1.271),l(-.31,.467),l(-.834,.608),l(-.555,.312),l(-.082,.099),l(.003,.268),l(-.078,.565),l(-.28,.424),l(.127,.211),l(.35,.733),l(.345,1.101),l(.26,.62),l(.093,.028),l(.451,.324),l(.296,.07),l(.161,-.325),l(.485,-.537),l(.197,-.029),l(.418,.112),l(.226,.211),l(.179,.635),l(.286,.353),l(.326,.084),l(.505,-.58),l(.621,.267),l(.141,.028),l(.078,.127),l(-.168,.156),l(-.378,.156),l(-.208,.212),l(.936,1.226),l(-.315,.184),l(-.568,-.196),l(-.404,-.098),l(-.094,-.48),l(-.229,-.31),l(-.599,-.535),l(-.753,-.577),l(-.258,0),l(-.099,.226),l(.371,.776),l(-.218,.283),l(-.727,-.775),l(-.982,-.548),l(-.309,.015),l(-.344,.142),l(-.182,.255),l(-.14,.071),l(-.395,.057),l(-.322,-.225),l(-.591,-.366),l(-.195,-.423),l(.64,-.608),l(.323,.211),l(.358,.084),l(.4,-.199),l(-.151,-.169),l(-.713,-.295),l(-.422,-.395),l(-.522,-.168),l(-.239,.607),M(669.676,172.974),l(-.452,-.366),l(-.349,-.408),l(-.051,-.226),l(-.364,-1.114),l(-.459,-.521),l(.685,-.058),l(.868,.012),l(.314,.169),l(.274,.451),l(.028,.861),l(-.097,.48),l(-.214,.283),l(-.185,.438),M(679.073,175.368),l(-.562,-.267),l(-.178,-.254),l(-.237,-.169),l(-.064,-.127),l(.139,-.339),l(-.091,-.423),l(-.55,-.352),l(-.662,-.479),l(-.147,-.466),l(.513,-.1),l(1.017,-.143),l(.371,.112),l(.283,.409),l(.069,.818),l(.123,.805),l(.257,.79),l(-.112,.127),l(-.167,.057),M(671.406,176.824),l(.022,-.353),l(.186,-1.342),l(.061,-1.172),l(.482,.395),l(.576,.281),l(.366,.028),l(.634,-.185),l(.027,.438),l(-.079,.396),l(-.24,.269),l(-.184,.198),l(-.908,.651),l(-.943,.397),M(664.721,177.812),l(-.366,-.027),l(.127,-.297),l(.202,-.099),l(.314,-.396),l(.265,-.523),l(.082,-.607),l(.138,-.509),l(.326,-.184),l(.14,.183),l(-.16,.283),l(.276,.55),l(.212,.564),l(-.108,.113),l(-.664,.354),l(-.406,.368),l(-.377,.227),M(673.781,179.981),l(-.385,-.366),l(-.828,-.591),l(-.206,-.38),l(.099,-.368),l(.565,-.213),l(.22,-.269),l(.487,-1.822),l(.438,-.185),l(.271,.028),l(.113,.126),l(.049,.282),l(-.373,.905),l(-.089,.226),l(-.315,1.413),l(.165,.296),l(.214,.465),l(-.213,.41),l(-.212,.043),M(661.179,181.308),l(-.317,-.042),l(.215,-.48),l(.343,-.467),l(.35,-.34),l(.592,-.354),l(.636,-.496),l(.933,-1.089),l(.11,.55),l(-.118,.424),l(-.267,.297),l(-.24,.184),l(-.516,.213),l(-.172,.127),l(-.244,.622),l(-.327,.269),l(-.591,.171),l(-.386,.41),M(680.678,185.402),l(-.201,-.098),l(-.098,-.438),l(-.361,-.748),l(-.297,-.112),l(-.381,.608),l(-.361,.82),l(.246,.38),l(.166,.395),l(.148,.677),l(-.158,.495),l(-.383,.509),l(-.305,-.253),l(-.176,-.268),l(.201,-.41),l(-.076,-.325),l(-.363,-.07),l(-.361,.665),l(-.173,-.056),l(-1.114,-.619),l(-.557,-.549),l(-.206,-.508),l(-.037,-.635),l(.466,-.905),l(-.108,-.479),l(-.466,-.409),l(-.778,-.295),l(-.292,.043),l(-.062,.17),l(-.129,.226),l(-.5,.255),l(-.661,.058),l(-.027,-.494),l(-.174,-.24),l(-.399,.199),l(-.504,.961),l(-.525,.863),l(-.219,-.084),l(-.119,-.127),l(-.034,-.197),l(.054,-.311),l(.359,-.749),l(.185,-.537),l(.263,-.283),l(.383,-.184),l(.564,-.044),l(.219,-.127),l(.134,-.466),l(.205,-.156),l(.549,-.241),l(.777,-.101),l(.292,.353),l(.102,.72),l(.317,-.156),l(.485,-.058),l(.207,-.184),l(.207,-.565),l(.358,-.255),l(.479,.21),l(.186,.084),l(.158,-1.087),l(.29,-.015),l(.264,.465),l(.315,-.481),l(.205,-.142),l(.392,.098),l(.133,-.227),l(-.048,-.706),l(-.172,-.564),l(.146,-.353),l(.413,.549),l(.711,.803),l(.229,.48),l(.083,.324),l(-.336,.735),l(.237,.226),l(.537,-.1),l(.076,.423),l(-.114,.424),l(.056,.692),l(.207,.437),l(-.002,.438),l(-.111,.424),l(-.283,.579),l(-.332,.622),
-N(251.898,160.229),l(-.547,-.112),l(-.073,-.212),l(.051,-.551),l(-.109,-.24),l(.11,-.17),l(.235,-.071),l(.543,.069),l(.404,-.015),l(1.505,.11),l(.393,.168),l(.113,.141),l(-.188,.354),l(-.07,.099),l(-.283,.227),l(-.335,.043),l(-.739,-.083),l(-.657,.072),l(-.354,.17),
-N(228.82,160.519),l(-.299,-.056),l(-.693,-.224),l(-.229,-.268),l(-.47,-.366),l(-.465,-.084),l(-.142,-.211),l(.53,-.284),l(.704,-.072),l(1.364,.251),l(.97,.351),l(.651,.267),l(.279,.282),l(-.04,.198),l(-.332,.071),l(-.751,-.295),l(-.543,.058),l(-.227,.255),l(-.308,.128),
-N(400.72,175.499),l(-.595,-.119),l(-.161,-.032),l(-.976,.458),l(-1.429,-.006),l(-.867,-.037),l(-2.119,.041),l(-.271,.157),l(-.125,.34),l(.261,1.934),l(.02,.41),l(-.191,.17),l(-.63,-.434),l(-.644,-.166),l(-.769,.075),l(-.608,.159),l(-.446,.257),l(-.368,.115),l(-.354,-.083),l(-.452,-.223),l(-.52,-.562),l(-.15,-.465),l(-.308,-.252),l(-.545,.003),l(-.259,-.168),l(.08,-.043),l(.046,-.156),l(.172,-.326),l(.261,-.92),l(.133,-.876),l(-.058,-.749),l(.141,-.255),l(.257,-.016),l(.448,-.158),l(.543,-.271),l(.317,-.369),l(.292,-1.047),l(.355,-1.217),l(.397,-.384),l(.273,-.058),l(.293,.281),l(.551,.364),l(.45,-.102),l(.174,-.227),l(.393,-.822),l(.492,-.667),l(.638,-.625),l(.272,-.101),l(.518,.209),l(.324,.182),l(.274,.027),l(.314,-.793),l(.304,-.228),l(.947,-.458),l(1.22,-.713),l(.37,-.073),l(.356,.125),l(.36,.059),l(1.062,.173),l(-.173,.665),l(.019,.396),l(.426,.93),l(.422,.492),l(.389,.266),l(.502,.42),l(.179,.268),l(.018,.212),l(-.335,.439),l(.114,.226),l(.97,.757),l(.516,.181),l(.37,-.044),l(.562,.025),l(.568,.971),l(.131,.367),l(-.237,.764),l(-.415,.468),l(-.337,.158),l(-.739,-.095),l(-.418,.045),l(-.415,.271),l(-.366,.553),l(-.24,.157),l(-.062,.142),l(-.29,-.041),l(-.611,-.166),l(-1.013,-.163),
-N(209.823,175.47),l(-.388,-.645),l(-.932,-.888),l(-1.003,-1.085),l(-.837,-.817),l(-.723,-.464),l(-.196,-.183),l(-.023,-.226),l(.625,-.03),l(1.001,-.125),l(.29,-.143),l(.293,-.412),l(.005,-.961),l(.882,-.034),l(.513,-.583),l(.725,.42),l(1.207,-.997),l(.503,-.794),l(.294,-.242),l(.259,.013),l(.328,.182),l(.463,.097),l(.248,-.086),l(.424,-.229),l(1.425,-.486),l(.23,.519),l(.038,.339),l(-.057,.509),l(-.214,.707),l(-.543,.806),l(-.1,.749),l(.042,.904),l(-.245,1.13),l(-.188,.735),l(-.101,1.385),l(.031,.55),l(.184,.466),l(.188,.363),l(-.281,.274),l(-.767,-.149),l(-.241,-.46),l(-.285,.077),l(-.394,-.107),l(-.603,.25),l(-1.651,-.599),l(-.43,.271),
-N(634.036,168.444),l(.533,.251),l(.736,.165),l(.341,.111),l(.469,.251),l(.248,-.058),l(.095,-.24),l(-.103,-.211),l(-.187,-.182),l(-.107,-.296),l(.392,-.285),l(.476,-.186),l(.444,.181),l(.373,.351),l(.3,-.072),l(.975,-.429),l(.209,-.114),l(-.215,.905),l(.029,.663),l(.455,1.014),l(-.076,.367),l(-.05,.424),l(.054,1.073),l(-.217,.509),l(-.385,.285),l(-.599,.187),l(-.932,.443),l(-.521,.229),l(-.99,.571),l(-.234,.425),l(.216,.422),l(.568,.435),l(.03,.197),l(-.17,.27),l(-.688,-.194),l(-.497,-.011),l(-.599,.229),l(-.915,.528),l(-.646,.229),l(-.3,.289),l(-.256,-.188),l(-.248,-.268),l(-.35,-.042),l(-.382,.142),l(-.205,-.042),l(-.293,.043),l(-.183,-.113),l(.142,-.311),l(.182,-.226),l(-.04,-.254),l(-.283,-.395),l(-.277,.043),l(-.462,.298),l(-.339,.015),l(-.171,-1.044),l(-.649,-1.488),l(.146,-.176),l(-.16,-.479),l(-.487,-.717),l(-.219,-.648),l(-.026,-.635),l(.076,-.382),l(.146,-.297),l(.92,-1.233),l(.521,-.441),l(.383,-.101),l(1.172,-.091),l(.798,.066),l(.558,-.074),l(.575,.039),l(.599,.109),l(.301,.167),
-N(214.474,175.913),l(.821,.884),l(.385,.623),l(.314,.322),l(.225,.046),l(.465,.645),l(.441,.352),l(-.014,.006),l(-.074,.123),l(-.478,-.184),l(-.219,.205),l(-.014,.321),l(0,.58),l(.507,.307),l(-.396,.368),l(.125,.532),l(-.374,.369),l(.243,.184),l(-.204,.609),l(.003,-.466),l(-.296,-.307),l(.01,-.568),l(-.377,-.148),l(-.238,-.102),l(-.111,.082),l(.325,.41),l(.084,.225),l(-.113,.062),l(-.726,-.299),l(-.13,-.282),l(.251,-.339),l(.04,-.382),l(-.182,-.338),l(-.486,-.324),l(-.695,-.287),l(-.079,-.144),l(-.689,-.103),l(-.316,-.327),l(.007,-.421),l(-.146,-.255),l(-.249,-.098),l(-.576,-.353),l(-.416,-.266),l(.225,.512),l(.086,.222),l(.422,.044),l(.181,.266),l(-.544,.573),l(-.144,-.262),l(-.356,-.282),l(-.561,-.211),l(-.323,-.239),l(-.147,-.24),l(-.104,-.494),l(.128,-.421),l(.332,-.225),l(-.008,-.389),l(-.554,-.225),l(.363,-.123),l(-.057,-.227),l(-.238,.017),l(.43,-.271),l(1.651,.599),l(.603,-.25),l(.394,.107),l(.285,-.077),l(.241,.46),l(.767,.149),l(.281,-.274),
-N(436.304,195.359),l(-.209,-.451),l(-.194,-.804),l(-.498,-.802),l(-1.217,-1.236),l(-.112,-.324),l(-.064,-.791),l(-.432,-.605),l(-.4,-.661),l(-.207,-.592),l(-.273,-1.185),l(-.112,-.776),l(.064,-.424),l(.144,-.198),l(.528,-.399),l(.4,-.511),l(.866,-1.743),l(.354,-.327),l(.208,-.114),l(.096,.084),l(.24,.027),l(.449,-.158),l(1.363,-.686),l(.494,.661),l(.225,.069),l(.224,-.03),l(.466,-.271),l(.754,-.386),l(.818,-.273),l(.881,.009),l(.368,-.031),l(.258,-.143),l(.646,-1.176),l(.117,-.806),l(.209,-.199),l(.434,-.059),l(2.181,-.055),l(.386,-.087),l(2.649,-2.275),l(.196,-.284),l(.005,-.41),l(.165,-.382),l(.372,-.228),l(.939,-.613),l(.322,-.086),l(.321,.012),l(.559,.208),l(1.342,1.673),l(.347,.549),l(.122,.536),l(-.416,1.472),l(.01,.664),l(.158,.211),l(.802,-.019),l(.272,-.001),l(.207,.126),l(.252,.493),l(.223,.225),l(.797,.447),l(.799,.235),l(.351,.196),l(.223,.267),l(-.148,.481),l(.173,.395),l(.445,.351),l(.558,.378),l(.717,.434),l(.207,.168),l(.206,.366),l(.059,.72),l(.285,.436),l(.367,.224),l(.814,.165),l(.558,.477),l(.157,.352),l(-.083,.679),l(.031,.07),l(-.496,.145),l(-.962,.344),l(-.319,-.026),l(-.287,-.167),l(-.687,-.264),l(-1.15,-.361),l(-.4,.13),l(-.082,.551),l(-.13,.241),l(-.256,.058),l(-.399,-.026),l(-.862,-.207),l(-.593,.102),l(-.93,.373),l(-.93,.486),l(-.271,.016),l(-.559,-.35),l(-.383,-.153),l(-.353,.186),l(-.677,1.36),l(-.176,.157),l(-.591,-.067),l(-1.934,-.511),l(-1.422,-.189),l(-.512,-.322),l(-.159,-.239),l(-.334,-.394),l(-.75,-.518),l(-.432,-.167),l(-.479,.06),l(-.529,.3),l(-.353,.341),l(-.785,.979),l(-.097,.297),l(.096,.452),l(-.017,.353),l(-.063,.594),l(-.16,.058),l(-.751,.287),l(-.895,-.093),l(-.624,-.138),l(-.367,-.054),l(-.975,.175),l(-.479,.102),l(-.255,.228),l(-.222,1.287),l(-.158,.523),l(-.365,.497),l(-.303,.312),
-N(371.324,180.419),l(1.088,-1.235),l(.643,-.866),l(.238,-.157),l(.594,.039),l(1.137,-.148),l(.466,.04),l(.42,.224),l(.456,.421),l(.475,.619),l(.252,.761),l(.165,1.369),l(.26,.656),l(-.259,.502),l(-1.184,1.151),l(-.63,.724),l(-.285,.256),l(-.061,.103),l(-.631,-.523),l(-.661,-.408),l(-.483,-.196),l(-.033,-.141),l(.061,-.297),l(-.05,-.184),l(-.531,-.21),l(-.792,-.549),l(-.389,-.366),l(-.375,-.465),l(.494,-.241),l(.174,-.227),l(-.034,-.155),l(-.484,-.211),l(-.065,-.113),l(.022,-.173),
-N(579.606,186.906),l(-.493,-.083),l(-.265,-.197),l(-.21,-.353),l(-.246,-.621),l(-.361,-1.256),l(-.034,-.649),l(.005,-.763),l(-.02,-.904),l(-.24,-.696),l(.188,-.513),l(-.298,-.35),l(.068,-.28),l(.423,.023),l(.349,-.43),l(.053,-.367),l(.226,-.369),l(-.152,-.537),l(.529,.48),l(.699,.38),l(.234,.395),l(.549,.776),l(.175,.324),l(-.099,.339),l(.024,.141),l(.592,.338),l(.266,.733),l(.798,1.368),l(.136,.508),l(-.193,.735),l(-.397,.679),l(-.369,.396),l(-.514,.425),l(-.78,.284),l(-.642,.043),
-N(217.111,178.792),l(.52,.307),l(.195,.512),l(.02,.374),l(.363,.155),l(.628,.024),l(.244,-.205),l(.398,.43),l(.726,.082),l(.458,-.083),l(1.348,-.751),l(.514,-.046),l(1.387,-.921),l(.373,.144),l(.742,.069),l(.071,.156),l(.789,-.017),l(.767,.21),l(.666,.38),l(.644,.563),l(.406,.666),l(.084,.327),l(.228,.149),l(.509,1.038),l(-.322,.062),l(-.094,.43),l(-.584,.409),l(-.085,-.307),l(-.19,-.082),l(.045,.45),l(-.228,.082),l(-.256,.753),l(-.378,-.825),l(-.441,-.762),l(-.137,-.452),l(.179,-.24),l(.22,-.085),l(.786,.125),l(-.336,-.193),l(-.125,-.164),l(-.096,-.471),l(-.309,.307),l(-.439,.041),l(-.244,-.378),l(-.031,-.269),l(-.193,-.282),l(-.132,.151),l(-.226,-.287),l(-.11,.102),l(-.132,-.266),l(-.456,-.192),l(-.562,-.013),l(-.499,.241),l(-.382,.108),l(-.07,.359),l(.081,.234),l(-.529,.318),l(-.374,.184),l(-.335,.029),l(-.345,.41),l(.049,.296),l(.316,.297),l(.464,.43),l(.178,.386),l(-.011,.146),l(-.281,.081),l(-.243,-.042),l(-.431,.391),l(-.568,.105),l(-.339,-.042),l(-.189,-.146),l(.108,-.164),l(-.349,-.833),l(-.244,-.353),l(-.177,.674),l(-.812,-.409),l(-.227,-.757),l(-.207,.041),l(-.96,-.123),l(-.434,-.266),l(-.599,0),l(-.314,.113),l(-.361,.495),l(.204,-.609),l(-.243,-.184),l(.374,-.369),l(-.125,-.532),l(.396,-.368),l(-.507,-.307),l(0,-.58),l(.014,-.321),l(.219,-.205),l(.478,.184),l(.074,-.123),
-N(266.015,188.956),l(-.503,-.647),l(-.732,-.745),l(-.324,-.521),l(.071,-.212),l(.395,-.539),l(-.008,-.58),l(.061,-.452),l(1.032,-.19),l(.41,-.144),l(.308,-.299),l(-.141,-.282),l(-.62,-.604),l(-.074,-.212),l(.101,-.255),l(1.655,-1.239),l(.061,-.41),l(-.095,-.296),l(.072,.049),l(.496,.338),l(.856,.521),l(.695,.521),l(.587,.663),l(.128,.409),l(-.036,.734),l(.148,.945),l(.298,-.593),l(.22,-.099),l(.6,.182),l(.101,.127),l(.507,.295),l(.708,.549),l(.401,.493),l(.374,.649),l(-.015,.339),l(-.142,.496),l(-.082,.862),l(-.183,.27),l(-1.131,.091),l(-.169,.17),l(.078,.777),l(-.095,.467),l(-.328,.694),l(.571,.831),l(.532,.675),l(.561,.067),l(.185,.295),l(.246,.832),l(.49,1.127),l(.332,.563),l(-.06,.212),l(-.943,-.022),l(-.934,.429),l(-1,.331),l(-.505,.314),l(-.694,.513),l(-.686,.075),l(-.613,-.392),l(-1.103,-.897),l(-.15,-.296),l(-.008,-.396),l(.072,-.354),l(-.167,-.31),l(-.281,-.394),l(-.156,-.465),l(.213,-.962),l(.547,-1.416),l(.179,-.368),l(-.435,-.958),l(-.533,-.138),l(-.304,.001),l(.452,-1.09),l(-.04,-.212),l(-.26,-.111),l(-.516,-.124),l(-.302,.058),l(-.375,.257),
-N(377.518,182.142),l(.193,-.376),l(.252,-.242),l(.367,-.143),l(.528,-.046),l(.338,.097),l(.165,.366),l(.22,.846),l(.009,.65),l(-.044,.283),l(.277,.323),l(.404,.322),l(.321,.026),l(.756,-.922),l(.143,-.086),l(.337,.097),l(.339,.224),l(-.062,.17),l(.119,.55),l(-.059,.438),l(-.501,.865),l(.05,.183),l(.194,.183),l(.369,.097),l(.592,-.032),l(1.264,1.334),l(.131,.282),l(-.059,.452),l(-.247,.849),l(-.105,.565),l(-.041,.919),l(-1.513,-.643),l(-1.221,-.619),l(-1.012,-.562),l(-.403,-.423),l(-1.129,-1.113),l(-1.111,-.76),l(-.723,-.337),l(-.901,-.535),l(-.66,-.548),l(.061,-.103),l(.285,-.256),l(.63,-.724),l(1.184,-1.151),l(.259,-.502),
-N(429.505,210.684),l(.484,.336),l(.177,.013),l(.443,-.271),l(.327,-.581),l(1.495,-.532),l(.054,.424),l(.042,.664),l(.147,.211),l(.57,-.328),l(.554,-.399),l(.931,-.811),l(.364,-.229),l(1.025,-.938),l(.086,-.706),l(-.122,-.72),l(.074,-.396),l(.193,-1.159),l(.343,-.751),l(.47,-.836),l(.41,-.454),l(.809,-.599),l(.525,-.229),l(.459,-.427),l(.139,-.523),l(.169,-.708),l(.115,-.61),l(.254,-1.342),l(.196,-2.021),l(.156,-.764),l(.094,-.551),l(.349,-.821),l(.558,-.837),l(.398,-1.203),l(.031,-.156),l(-.128,-.197),l(.16,-.058),l(.063,-.594),l(.017,-.353),l(-.096,-.452),l(.097,-.297),l(.785,-.979),l(.353,-.341),l(.529,-.3),l(.479,-.06),l(.432,.167),l(.75,.518),l(.334,.394),l(.159,.239),l(.512,.322),l(1.422,.189),l(1.934,.511),l(.591,.067),l(.176,-.157),l(.677,-1.36),l(.353,-.186),l(.383,.153),l(.559,.35),l(.271,-.016),l(.93,-.486),l(.93,-.373),l(.593,-.102),l(.862,.207),l(.399,.026),l(.256,-.058),l(.13,-.241),l(.082,-.551),l(.4,-.13),l(1.15,.361),l(.687,.264),l(.287,.167),l(.319,.026),l(.962,-.344),l(.496,-.145),l(.143,.239),l(.795,.772),l(.348,.493),l(.525,.477),l(.366,.195),l(.352,-.016),l(.258,-.242),l(.529,-.37),l(.384,.012),l(.684,.631),l(.16,-.1),l(.436,-.582),l(.258,-.157),l(.207,.083),l(1.032,.926),l(1.288,1.32),l(.063,.028),l(.159,.183),l(-.018,.424),l(-.26,1.88),l(.128,.253),l(.191,.027),l(.479,.04),l(.271,.182),l(.111,.31),l(-.191,.453),l(-1.195,1.066),l(-1.241,.996),l(-.255,.284),l(-.395,.681),l(-.217,1.02),l(-.107,.507),l(.021,.593),l(-.025,.734),l(.057,.748),l(-.076,.27),l(-.188,.298),l(-.426,.412),l(-.301,.171),l(-.269,.256),l(-.122,.425),l(-.49,1.358),l(.197,.338),l(.689,.999),l(.087,.381),l(-.04,.438),l(.014,.636),l(.237,.634),l(.017,1.329),l(-.064,.762),l(.425,1.439),l(-.102,.848),l(.122,.693),l(.486,.631),l(.936,.898),l(.428,.78),l(.689,1.804),l(-.563,.068),l(-3.015,.499),l(-.347,.214),l(-.154,.198),l(-.797,1.276),l(-.029,.622),l(.372,2.088),l(-.377,1.175),l(-.3,1.02),l(.043,.296),l(.456,.605),l(.837,.843),l(.445,.279),l(.515,.012),l(.448,-.455),l(.362,-.186),l(.136,.183),l(.032,.791),l(.028,1.427),l(-.041,.551),l(-.371,-.012),l(-1.355,-.091),l(-.348,-.21),l(-.381,-.647),l(-.561,-.731),l(-.416,-.351),l(-.477,-.252),l(-.895,-.263),l(-.38,-.28),l(-.728,-1.423),l(-.212,.354),l(-.522,.682),l(-.366,.087),l(-.325,-.111),l(-.922,-.164),l(-.925,-.249),l(-.489,-.194),l(-.58,-1.014),l(-.175,.071),l(-1.146,.289),l(-.195,-.056),l(-.172,-.352),l(-.365,-.379),l(-.678,-.096),l(-1.24,-.147),l(-.991,.146),l(-.859,.26),l(-.61,.004),l(-.199,-.197),l(-.007,-.254),l(.198,-.905),l(.003,-.466),l(-.306,-.62),l(-.844,-.998),l(-.117,-.211),l(-.021,-.212),l(.296,-1.033),l(.07,-1.06),l(-.109,-.607),l(-.303,-.605),l(.057,-.354),l(.177,-.693),l(-.052,-.183),l(-.322,-.098),l(-1.231,.093),l(-.88,.019),l(-.212,-.168),l(.055,-.48),l(-.181,-.225),l(-2.016,.082),l(-.112,.001),l(-.089,.354),l(.027,.593),l(-.286,.892),l(-.184,.411),l(-.993,.006),l(-.899,-.122),l(-1.021,.246),l(-.88,.034),l(-.292,-.168),l(-.64,-.787),l(-.597,-1.07),l(-.537,-1.409),l(-.059,-.579),l(-.121,-.521),l(-.082,-.127),l(-.321,-.111),l(-.385,-.012),l(-1.104,-.008),l(-.88,.034),l(-.624,.003),l(-1.312,-.048),l(-.945,-.052),l(-.783,.02),l(-.432,.03),l(-.318,.101),l(-.896,.062),l(-.699,.314),l(-.56,.06),l(-.112,-.013),l(-.322,-.922),l(.012,-.053),l(.74,-.3),l(-.017,-.085),l(.1,-.89),l(.094,-.143),l(.317,-.199),l(.583,-.568),
-N(468.568,202.653),l(1.277,-.05),l(4.659,0),l(1.448,-.033),l(4.663,2.568),l(3.553,1.984),l(.137,.381),l(-.116,.552),l(.07,.239),l(2.427,1.752),l(1.067,.807),l(-.237,.427),l(-.419,1.329),l(-.137,1.017),l(.109,.551),l(.665,.987),l(.768,.577),l(-.024,.282),l(-.263,.354),l(-.371,1.046),l(.037,.17),l(.306,.041),l(.118,.226),l(-.172,.692),l(-.019,.946),l(.411,1.793),l(.18,.564),l(.401,.465),l(.823,.55),l(.396,.268),l(.177,.228),l(-1.157,.836),l(-.515,.342),l(-1.218,.402),l(-1.243,.559),l(-.448,.031),l(-.646,-.42),l(-.276,-.083),l(-.21,.326),l(-.543,.766),l(-.396,.144),l(-.42,-.054),l(-.964,.006),l(-.963,.02),l(-.512,-.294),l(-.323,-.394),l(-.229,-.083),l(-.123,.128),l(-.643,.356),l(-.526,.088),l(-1.019,-.149),l(-.898,-.018),l(-.196,-.559),l(-.135,-.766),l(-.053,-.584),l(-.135,-.946),l(-.448,-.841),l(-.663,-.538),l(-1.014,-.107),l(-.223,.016),l(-.385,-.407),l(-.732,-.349),l(-1.574,-.57),l(-1.269,-.6),l(-.729,-.265),l(-.263,-.21),l(-.703,-.641),l(-.689,-1.804),l(-.428,-.78),l(-.936,-.898),l(-.486,-.631),l(-.122,-.693),l(.102,-.848),l(-.425,-1.439),l(.064,-.762),l(1.252,-.348),l(.388,-.539),l(.645,-1.204),l(.687,-.853),l(.346,-.271),l(.044,-.212),l(-.148,-.239),l(-.273,-.125),l(-.401,-.068),l(-.211,-.211),l(.158,-.976),l(.304,-.016),l(.396,-.158),l(.142,-.17),l(.104,-.481),l(-.167,-.493),l(-.364,-.888),l(-.121,-.748),
-N(464.786,206.235),l(-.197,-.338),l(.49,-1.358),l(.122,-.425),l(.269,-.256),l(.301,-.171),l(.426,-.412),l(.064,.042),l(.546,.223),l(.431,-.045),l(.458,-.427),l(.554,-.398),l(.319,-.017),l(.121,.748),l(.364,.888),l(.167,.493),l(-.104,.481),l(-.142,.17),l(-.396,.158),l(-.304,.016),l(-.559,.031),l(-.508,.159),l(-.391,.567),l(-.158,.085),l(-.396,.13),l(-.789,-.32),l(-.688,-.024),
-N(465.79,210.652),l(-.017,-1.329),l(-.237,-.634),l(-.014,-.636),l(.04,-.438),l(-.087,-.381),l(-.689,-.999),l(.688,.024),l(.789,.32),l(.396,-.13),l(.158,-.085),l(.391,-.567),l(.508,-.159),l(.559,-.031),l(-.158,.976),l(.211,.211),l(.401,.068),l(.273,.125),l(.148,.239),l(-.044,.212),l(-.346,.271),l(-.687,.853),l(-.645,1.204),l(-.388,.539),l(-1.252,.348),
-N(427.243,211.207),l(.536,-.414),l(.68,-.513),l(.351,-.13),l(.695,.533),l(-.583,.568),l(-.317,.199),l(-.094,.143),l(-.1,.89),l(.017,.085),l(-.74,.3),l(.143,-.625),l(-.082,-.24),l(-.505,-.796),M(427.998,213.843),l(.112,.013),l(.56,-.06),l(.699,-.314),l(.896,-.062),l(.318,-.101),l(.432,-.03),l(.783,-.02),l(.945,.052),l(1.312,.048),l(.624,-.003),l(.88,-.034),l(1.104,.008),l(.385,.012),l(.321,.111),l(.082,.127),l(.121,.521),l(.059,.579),l(.537,1.409),l(.597,1.07),l(.64,.787),l(.292,.168),l(.88,-.034),l(1.021,-.246),l(.899,.122),l(.993,-.006),l(.184,-.411),l(.286,-.892),l(-.027,-.593),l(.089,-.354),l(.112,-.001),l(2.016,-.082),l(.181,.225),l(-.055,.48),l(.212,.168),l(.88,-.019),l(1.231,-.093),l(.322,.098),l(.052,.183),l(-.177,.693),l(-.057,.354),l(.303,.605),l(.109,.607),l(-.07,1.06),l(-.296,1.033),l(.021,.212),l(.117,.211),l(.844,.998),l(.306,.62),l(-.003,.466),l(-.198,.905),l(.007,.254),l(.199,.197),l(.61,-.004),l(.859,-.26),l(.991,-.146),l(1.24,.147),l(-.214,1.344),l(.195,1.059),l(.269,.323),l(.089,.254),l(-.132,.368),l(-.436,.44),l(-.124,.594),l(-.125,.086),l(-.517,-.04),l(-3.408,.091),l(-.051,.877),l(.015,1.342),l(-.024,3.249),l(.017,.848),l(.023,.594),l(.099,.438),l(.308,.394),l(.471,.436),l(1.354,1.391),l(.611,.632),l(-.93,.218),l(-1.96,.379),l(-1.044,.203),l(-.717,-.08),l(-1.164,.063),l(-.408,-.083),l(-.349,-.21),l(-2.024,.026),l(-.697,-.024),l(-.622,-.151),l(-.401,-.322),l(-.305,-.366),l(-.408,-.096),l(-.989,-.023),l(-2.59,.016),l(-1.636,-.019),l(-.631,-.011),l(-1.296,-.006),l(-2.201,.013),l(-.636,-.151),l(-.463,-.309),l(-.45,-.478),l(-.294,-.083),l(-.499,.088),l(-.591,.286),l(-.778,.513),l(-.758,-.462),l(-.352,.144),l(-.248,.197),l(.048,-1.809),l(-.017,-.805),l(-.029,-.649),l(.397,-.34),l(.221,-.269),l(.26,-.707),l(.163,-.734),l(.184,-1.398),l(.239,-.976),l(.321,-.918),l(.584,-.665),l(.183,-.565),l(.268,-.354),l(.64,-.228),l(.268,-.325),l(.423,-.679),l(.364,-1.201),l(.053,-.664),l(-.046,-.848),l(-.191,-.959),l(-.201,-.536),l(-.492,-.705),l(-.476,-.776),l(-.268,-.775),l(.139,-.495),l(.476,-.382),l(.158,-.156),l(.107,-.424),l(-.006,-.479),l(-.199,-.579),l(-.489,-.69),l(-.441,-.733),l(-.203,-1.031),l(-.181,-.423),l(-.276,-.366),l(-.666,-.974),l(-.072,-.15),
-N(452.198,239.34),l(-.611,-.632),l(-1.354,-1.391),l(-.471,-.436),l(-.308,-.394),l(-.099,-.438),l(-.023,-.594),l(-.017,-.848),l(.024,-3.249),l(-.015,-1.342),l(.051,-.877),l(3.408,-.091),l(.517,.04),l(.125,-.086),l(.124,-.594),l(.436,-.44),l(.132,-.368),l(-.089,-.254),l(-.269,-.323),l(-.195,-1.059),l(.214,-1.344),l(.678,.096),l(.365,.379),l(.172,.352),l(.195,.056),l(1.146,-.289),l(.175,-.071),l(.58,1.014),l(.489,.194),l(.925,.249),l(.922,.164),l(.325,.111),l(.366,-.087),l(.522,-.682),l(.212,-.354),l(.728,1.423),l(.38,.28),l(.895,.263),l(.477,.252),l(.416,.351),l(.561,.731),l(.381,.647),l(.348,.21),l(1.355,.091),l(.371,.012),l(.041,-.551),l(-.028,-1.427),l(-.032,-.791),l(-.136,-.183),l(-.362,.186),l(-.448,.455),l(-.515,-.012),l(-.445,-.279),l(-.837,-.843),l(-.456,-.605),l(-.043,-.296),l(.3,-1.02),l(.377,-1.175),l(-.372,-2.088),l(.029,-.622),l(.797,-1.276),l(.154,-.198),l(.347,-.214),l(3.015,-.499),l(.563,-.068),l(.703,.641),l(.263,.21),l(.729,.265),l(1.269,.6),l(1.574,.57),l(.732,.349),l(.385,.407),l(.559,.887),l(.434,.859),l(.013,.324),l(-.183,.27),l(-.709,.344),l(-.011,.127),l(.04,.594),l(-.091,1.682),l(.08,.353),l(.216,.168),l(.511,.266),l(.072,.197),l(-.197,.241),l(-.472,.258),l(-.792,.259),l(-.146,.34),l(-.094,.764),l(-.3,.807),l(.2,.479),l(.261,.408),l(.394,.125),l(-1.264,.53),l(-1.696,.575),l(-.932,.4),l(-2.165,.578),l(-.187,.128),l(-.009,.495),l(.152,.465),l(.087,.438),l(-.505,-.096),l(-.999,.049),l(-.794,.259),l(-.636,.54),l(-.312,.539),l(-.019,.579),l(-.168,.199),l(-.285,.114),l(-.999,.062),l(-.621,.202),l(-.306,.341),l(-.777,.937),l(-.562,.738),l(-.825,.951),l(-.354,.045),l(-.803,-.165),l(-.421,-.309),l(-.334,.129),l(-.521,.286),l(-.404,.017),l(-.594,-.209),l(-.264,-.097),l(-.154,-.169),l(-.163,-.027),l(-.187,-.154),l(-.456,-.393),l(-.294,-.055),l(-1.089,-.093),l(-.086,-.099),l(-.165,-.056),l(-1.845,.364),
-N(477.231,225.874),l(-.224,1.184),l(-.107,.48),l(.252,.917),l(.177,1.017),l(.149,.408),l(.238,.268),l(.803,.588),l(1.189,1.166),l(.454,.661),l(.14,.48),l(-.155,2.346),l(-.04,.41),l(-.214,.213),l(-.432,.073),l(-.322,.017),l(-.229,.213),l(-.076,.622),l(.08,.509),l(.029,.479),l(-.096,.283),l(-.185,-.111),l(-.562,-.463),l(-.763,-1.112),l(-.484,-.548),l(-.234,-.423),l(.036,-.212),l(.499,-.61),l(.116,-.227),l(.025,-.693),l(-.1,-.96),l(-.22,-.479),l(-.261,-.056),l(-.674,.061),l(-.702,.132),l(-.27,-.211),l(-.343,-.407),l(-.382,-.549),l(-.195,-.041),l(-.394,-.125),l(-.261,-.408),l(-.2,-.479),l(.3,-.807),l(.094,-.764),l(.146,-.34),l(.792,-.259),l(.472,-.258),l(.197,-.241),l(-.072,-.197),l(-.511,-.266),l(-.216,-.168),l(-.08,-.353),l(.091,-1.682),l(-.04,-.594),l(.011,-.127),l(.709,-.344),l(.183,-.27),l(-.013,-.324),l(-.434,-.859),l(-.559,-.887),l(.223,-.016),l(1.014,.107),l(.663,.538),l(.448,.841),l(.135,.946),l(.053,.584),l(.135,.766),l(.196,.559),
-N(245.934,224.314),l(.939,.136),l(1.122,.304),l(.355,-.03),l(.946,-.824),l(.336,.026),l(.48,.025),l(.415,-.243),l(1.471,-1.109),l(.874,-.485),l(.36,-.158),l(.934,-.076),l(1.283,.021),l(.045,.748),l(-.079,.621),l(-.064,.622),l(.036,.818),l(.141,.635),l(.335,.591),l(.813,.928),l(1.1,.939),l(.316,.097),l(.787,.023),l(.355,-.03),l(.676,.25),l(.688,.307),l(.75,.603),l(.3,.098),l(.882,.037),l(.096,.014),l(.385,.774),l(.398,.308),l(.22,.084),l(1.148,-.077),l(.636,.123),l(.537,.166),l(.403,.237),l(.085,.169),l(-.038,.565),l(.203,1.029),l(.03,.706),l(.138,2.032),l(.249,.944),l(.153,.112),l(.967,.036),l(.5,.012),l(1.615,.019),l(.693,.024),l(.042,.296),l(-.261,.835),l(.067,.563),l(.436,.407),l(.73,.362),l(.316,.479),l(.307,.774),l(.022,.494),l(-.185,1.173),l(-.238,.834),l(-.38,.765),l(-.421,.666),l(-.089,-.084),l(-1.952,-.991),l(-.352,-.054),l(-.928,.02),l(-.843,-.01),l(-.126,.128),l(-1.076,.204),l(-1.104,.162),l(-.784,.202),l(-.33,.044),l(-.332,.383),l(-.698,1.105),l(-.278,.341),l(-.133,.509),l(.016,.635),l(-.385,1.188),l(-.395,1.104),l(-.149,.325),l(-.592,-.109),l(-1.33,-.077),l(-.686,.004),l(-1.034,1.784),l(-.416,-1.084),l(-.341,-.309),l(-.37,-.195),l(-.531,-.067),l(-.527,.045),l(-.901,.034),l(-.615,-.194),l(-.193,-.169),l(-.322,-.181),l(-.292,.27),l(-2.026,2.087),l(-1.047,.006),l(-.272,-.182),l(-.397,-2.144),l(-.278,-.973),l(-.212,-.563),l(-.769,-1.11),l(-.249,-.676),l(.04,-.354),l(.437,-1.555),l(-.017,-.282),l(-.761,-.744),l(-.25,-.521),l(-.193,-1.213),l(-.304,-.647),l(-.555,-.745),l(-.152,-.253),l(-.018,-.142),l(-.132,-.295),l(-.049,-.48),l(.12,-.227),l(.723,-.61),l(.285,-.439),l(-.015,-.522),l(-.604,-1.168),l(-.022,-.48),l(.159,-.34),l(.21,-.368),l(-.347,-.845),l(.102,-.452),l(.532,-.582),l(.221,-.34),l(.156,-.34),l(-.236,-.902),l(-.057,-.522),l(.143,-.848),l(.15,-.523),l(.437,-.736),l(-.08,-.24),l(-.922,-1.646),l(-1.109,-1.843),
-N(473.575,260.04),l(-1.331,.011),l(-.192,.058),l(-.068,-.382),l(-.261,-.889),l(.071,-.495),l(-.075,-.296),l(-.095,-.324),l(.03,-.806),l(.057,-1.301),l(-.072,-.763),l(-.147,-.678),l(-.33,-.944),l(-.441,-.689),l(-.181,-.946),l(-.295,-1.199),l(-.159,-.183),l(.448,-.384),l(.396,-.412),l(1.68,-1.706),l(.114,-.227),l(-.09,-.367),l(.075,-.834),l(.229,-.481),l(.736,-.683),l(.205,-.341),l(.168,-.41),l(-.594,-.845),l(-.118,-.805),l(-.113,-.494),l(.128,-.283),l(.448,-.596),l(.201,-.411),l(-.132,-.805),l(-.086,-1.144),l(-.031,-.791),l(-.178,-.818),l(-.441,-.379),l(-.515,-.224),l(-1.167,-.347),l(-1.042,-.445),l(-.658,-.223),l(-1.438,-.006),l(-.137,-.14),l(-.025,-.495),l(-.011,-.212),l(-.087,-.438),l(-.152,-.465),l(.009,-.495),l(.187,-.128),l(2.165,-.578),l(.932,-.4),l(1.696,-.575),l(1.264,-.53),l(.195,.041),l(.382,.549),l(.343,.407),l(.27,.211),l(.702,-.132),l(.674,-.061),l(.261,.056),l(.22,.479),l(.1,.96),l(-.025,.693),l(-.116,.227),l(-.499,.61),l(-.036,.212),l(.234,.423),l(.484,.548),l(.763,1.112),l(.562,.463),l(.185,.111),l(.096,-.283),l(-.029,-.479),l(-.08,-.509),l(.076,-.622),l(.229,-.213),l(.322,-.017),l(.432,-.073),l(.214,-.213),l(.04,-.41),l(.155,-2.346),l(-.14,-.48),l(-.454,-.661),l(-1.189,-1.166),l(-.803,-.588),l(-.238,-.268),l(-.149,-.408),l(-.177,-1.017),l(-.252,-.917),l(.107,-.48),l(.224,-1.184),l(.898,.018),l(1.019,.149),l(.526,-.088),l(.643,-.356),l(.123,-.128),l(.229,.083),l(.323,.394),l(.512,.294),l(.963,-.02),l(.964,-.006),l(.42,.054),l(.396,-.144),l(.543,-.766),l(.21,-.326),l(.276,.083),l(.646,.42),l(.448,-.031),l(1.243,-.559),l(1.218,-.402),l(.515,-.342),l(1.157,-.836),l(.128,.167),l(.212,.479),l(-.185,.579),l(-.302,.453),l(-.198,.255),l(.181,.451),l(.129,.72),l(-.012,.466),l(.182,1.115),l(-.101,.58),l(-.258,.325),l(.374,.705),l(.154,.494),l(-.006,1.115),l(-.004,.819),l(.043,.184),l(.185,.127),l(.327,.084),l(.015,.269),l(-.165,.494),l(-.563,.58),l(.184,.381),l(-.08,.283),l(-.418,.565),l(-.802,.906),l(-.512,.622),l(-.72,.651),l(-1.36,.751),l(-1.48,.653),l(-.73,.228),l(-1.308,.582),l(-.852,.637),l(-1.286,1.443),l(-.886,.85),l(-1.193,.878),l(-1.181,.836),l(-.268,.128),l(-.035,.96),l(-.083,.495),l(.058,.127),l(.719,.535),l(.188,.381),l(-.166,.452),l(-.085,.184),l(.461,1.511),l(.071,.564),l(.06,.155),l(.246,.014),l(.171,-.128),l(.141,-.085),l(.043,.607),l(-.234,2.218),l(-.284,.82),l(.325,.196),l(.152,.057),l(-.025,.325),l(-.157,.311),l(-.516,.566),l(-.699,.538),l(-.664,.34),l(-1.266,.412),l(-.796,.312),l(-.688,.228),l(-.895,.524),l(-.652,.665),l(-.337,.51),l(.292,.338),l(.589,.338),l(.045,.325),l(-.149,1.022),
-N(499.85,236.166),l(.544,-.071),l(.622,-.369),l(.18,.028),l(.346,.098),l(.269,-.085),l(.396,-.368),l(.911,-.143),l(.311,.281),l(.305,-.028),l(.101,-.185),l(-.171,-.366),l(.771,-.539),l(.423,-.198),l(.322,.226),l(.389,-.213),l(-.308,-.494),l(.207,-.282),l(.505,-.425),l(.229,.296),l(.229,.056),l(.558,-.594),l(-.158,-.197),l(-.253,-.409),l(.094,-.297),l(.243,.014),l(.27,-.071),l(.172,-.34),l(-.297,-.875),l(.06,-.339),l(.255,-.043),l(.117,.07),l(.253,.438),l(.28,.099),l(.2,-.41),l(.692,-.524),l(.235,-.367),l(.134,-.452),l(.168,-.692),l(-.133,-.354),l(.003,-.226),l(.537,-.468),l(.356,.324),l(.455,.648),l(.612,.281),l(.141,.198),l(.213,.847),l(.294,1.821),l(.093,.663),l(.231,.791),l(.391,.733),l(.163,.466),l(-.038,.367),l(-.069,.155),l(-.058,.099),l(-.537,.807),l(-.22,-.127),l(-.189,-.366),l(-.555,-.748),l(-.297,.143),l(-.05,.424),l(.193,.875),l(.396,.521),l(.079,.396),l(-.307,.636),l(-.746,1.005),l(-.045,.452),l(.041,.89),l(-.18,.946),l(-.709,2.12),l(-.825,2.572),l(-1.254,3.788),l(-1.324,4.48),l(-.518,1.568),l(-.188,.255),l(-.508,.637),l(-.2,.113),l(-1.369,.102),l(-.999,.327),l(-.474,.468),l(-.813,.086),l(-.363,-.465),l(-.196,-.142),l(-.546,-.182),l(-.37,.071),l(-.269,-.057),l(-.863,-.718),l(-.104,-.24),l(-.02,-.565),l(-.104,-.239),l(-.46,-.366),l(-.124,-.282),l(.001,-.721),l(.345,-1.088),l(-.094,-.325),l(-.287,-.479),l(-.62,-.931),l(-.189,-.494),l(.075,-.664),l(.391,-1.37),l(.228,-.213),l(.474,-.185),l(.768,-1.371),l(.686,-1.174),l(.104,-.325),l(.151,-1.103),l(-.11,-.353),l(-.278,-.226),l(-.354,-.366),l(.066,-.184),l(.252,-.509),l(-.521,-.861),l(-.117,-.677),l(-.069,-.494),l(-.231,-.721),l(.024,-.112),l(.517,-.693),l(.362,-.594),l(.163,-.438),l(.007,-1.073),l(.484,-.016),
-N(468.138,234.908),l(.011,.212),l(.025,.495),l(.137,.14),l(1.438,.006),l(.658,.223),l(1.042,.445),l(1.167,.347),l(.515,.224),l(.441,.379),l(.178,.818),l(.031,.791),l(.086,1.144),l(.132,.805),l(-.201,.411),l(-.448,.596),l(-.128,.283),l(.113,.494),l(.118,.805),l(.594,.845),l(-.168,.41),l(-.205,.341),l(-.736,.683),l(-.229,.481),l(-.075,.834),l(.09,.367),l(-.114,.227),l(-1.68,1.706),l(-.396,.412),l(-.448,.384),l(-.342,-.225),l(-.547,-.124),l(-.442,-.025),l(-.529,.145),l(-.31,.016),l(-.99,-.403),l(-.597,-.139),l(-.72,-.023),l(-.067,-.042),l(-.186,-.098),l(-.306,-.451),l(-.479,-.35),l(-.549,-.167),l(-.938,-.136),l(-.352,-.153),l(-.524,-.873),l(-.163,-.564),l(.032,-.565),l(-.127,-.239),l(-.78,.019),l(-.201,-.098),l(-.109,-.211),l(.051,-.537),l(-.106,-.169),l(-.552,-.266),l(-.533,-.223),l(-.57,-.321),l(-.563,-.491),l(-.377,-.662),l(-.246,-.96),l(-.469,-.604),l(-.43,-.478),l(-.267,-.451),l(.103,-.227),l(.594,.209),l(.404,-.017),l(.521,-.286),l(.334,-.129),l(.421,.309),l(.803,.165),l(.354,-.045),l(.825,-.951),l(.562,-.738),l(.777,-.937),l(.306,-.341),l(.621,-.202),l(.999,-.062),l(.285,-.114),l(.168,-.199),l(.019,-.579),l(.312,-.539),l(.636,-.54),l(.794,-.259),l(.999,-.049),l(.505,.096),
-N(444.673,255.519),l(-.006,3.434),l(.031,1.894),l(.025,2.246),l(-.057,.205),l(-.454,.318),l(-.545,.302),l(-.581,.498),l(-.427,.034),l(-.581,-.166),l(-.745,-.042),l(-.892,.048),l(-.517,-.039),l(-.296,-.212),l(-.055,-.528),l(-.042,-.345),l(-.193,-.222),l(-.637,-.348),l(-.329,-.127),l(-.335,.116),l(-.109,.217),l(-.317,.416),l(-.584,.27),l(-.152,.068),l(-.458,-.491),l(-1.041,-1.001),l(-.458,-.606),l(-.359,-1.03),l(-.345,-.72),l(-.136,-.493),l(.12,-.269),l(.053,-.34),l(-.458,-.719),l(-.231,-.861),l(.148,-.861),l(-.002,-.48),l(-.537,-1.326),l(-.496,-2.244),l(.772,-.02),l(.04,-.678),l(-.077,-.749),l(-.456,-.006),l(.016,-.06),l(-.099,-.522),l(-.26,-.508),l(-1.018,-1.283),l(-.343,-.55),l(-1.102,-2.158),l(-.841,-1.623),l(-.9,-1.509),l(-.988,-1.269),l(-.511,-1.044),l(-.122,-.396),l(-.045,-.551),l(.015,-.578),l(.248,-.197),l(.352,-.144),l(.758,.462),l(.778,-.513),l(.591,-.286),l(.499,-.088),l(.294,.083),l(.45,.478),l(.463,.309),l(.636,.151),l(2.201,-.013),l(1.296,.006),l(.631,.011),l(1.636,.019),l(2.59,-.016),l(.989,.023),l(.408,.096),l(.305,.366),l(.401,.322),l(.622,.151),l(.697,.024),l(2.024,-.026),l(.349,.21),l(.408,.083),l(1.164,-.063),l(.717,.08),l(1.044,-.203),l(1.96,-.379),l(.93,-.218),l(1.845,-.364),l(.165,.056),l(.086,.099),l(1.089,.093),l(.294,.055),l(.456,.393),l(-.811,.315),l(-.891,.02),l(-.284,.143),l(-.993,.938),l(-.209,.029),l(-.62,-.773),l(-1.048,.134),l(-2.962,.47),l(-1.183,.021),l(.005,1.215),l(-.007,1.286),l(-.025,.876),l(-.043,1.201),l(.002,3.561),l(-.586,.046),l(-1.564,.052),l(-.146,.028),l(-.106,2.657),l(-.009,1.201),l(.013,1.624),l(.007,.806),
-N(248.453,316.576),l(-.306,.101),l(-.892,-.087),l(-.538,-.293),l(-.236,-.015),l(-.311,.163),l(-.418,.398),l(-.498,.192),l(-1.156,.091),l(-.349,.09),l(-.358,.207),l(-.267,.621),l(-.114,.341),l(.06,.532),l(-.163,.622),l(-.104,.148),l(-.453,.031),l(-.534,.104),l(-.956,-.413),l(.667,-.639),l(.326,-.444),l(.582,-.4),l(.025,-.147),l(-.372,-.177),l(-.273,-.117),l(-1.353,.534),l(-1.01,-.013),l(-.545,.163),l(-.202,-.339),l(.128,-.192),l(.959,-.268),l(.266,.028),l(.792,-.208),l(.441,-.118),l(-.605,-.162),l(-.582,.002),l(-.77,.001),l(-.014,-.413),l(.265,-.31),l(-.007,-.191),l(-.446,-.073),l(-.356,-.44),l(-.66,.384),l(-.669,-.175),l(.292,-.53),l(.041,-.177),l(-.378,.045),l(-.361,.147),l(-.416,-.396),l(-.215,-.117),l(.413,-.279),l(.114,-.177),l(-.091,-.278),l(-.053,-.073),l(-.351,.03),l(-.773,-.424),l(-.135,-.059),l(.844,-.192),l(.253,-.161),l(.1,-.294),l(.396,-.366),l(.049,-.234),l(-.641,.06),l(-.257,.104),l(-.312,-.073),l(-.256,-.672),l(.573,-.395),l(-.565,-.378),l(-.12,-.421),l(.757,-.452),l(-.14,-.421),l(-.686,.422),l(-.091,-1.523),l(.399,-.596),l(-.185,-.825),l(.013,-.218),l(.593,.014),l(.41,.245),l(.711,.071),l(.171,-.246),l(.002,-.159),l(-.896,-.447),l(-.867,.146),l(-.317,-.173),l(-.536,.059),l(-.017,-.231),l(.339,-.333),l(.025,-.246),l(-.067,-.087),l(.186,-.202),l(.536,.014),l(.229,-.377),l(.01,-.216),l(-.722,-.389),l(-.354,-.129),l(-.886,.045),l(-.332,-.101),l(-.024,-.49),l(-.939,.16),l(-.115,-.101),l(.122,-.145),l(1.032,-.521),l(.251,-.116),l(.4,-.404),l(.266,-.389),l(.833,-.06),l(.268,.201),l(.059,.346),l(-.648,.202),l(-.323,.274),l(.11,.505),l(.117,.058),l(.191,-.102),l(.268,-.39),l(.183,-.087),l(.242,.101),l(-.037,.317),l(.057,.504),l(.886,-.996),l(.161,-.678),l(.056,-.647),l(.237,-.375),l(.079,-.058),l(.631,-.217),l(-.201,-.071),l(-.438,-.143),l(-.056,-.158),l(.101,-.273),l(.246,-.072),l(.571,-.245),l(.599,-.431),l(.271,-.459),l(-.061,-.229),l(-.394,-.157),l(-.662,-.399),l(-.053,-.372),l(.139,-.243),l(.105,-.458),l(-.06,-.828),l(.366,-.33),l(.676,-.272),l(-.431,-.585),l(-.053,-.784),l(.133,-.158),l(.554,-.157),l(.054,-.314),l(-.116,-.285),l(-.317,-.085),l(-.272,-.198),l(.233,-.329),l(.087,-.313),l(-.401,-.185),l(-.274,-.014),l(-.161,.101),l(-.476,.414),l(-.548,.058),l(-.087,.001),l(-.289,-.199),l(-.16,-.484),l(-.399,-.726),l(-.133,-.697),l(.188,-.911),l(.137,-.413),l(.722,-.739),l(.535,-.767),l(-.006,-.326),l(-.544,-1.757),l(.001,-.608),l(.088,-.567),l(-.076,-.438),l(-.528,-.891),l(-.04,-.298),l(.236,-.198),l(.499,.098),l(.182,-.085),l(.2,-.142),l(.097,-.143),l(.41,-1.288),l(.252,-.481),l(.304,-.935),l(.18,-.65),l(.664,-.808),l(.363,-.722),l(.201,-.636),l(.252,-.946),l(.311,-.691),l(.187,-.128),l(.273,-.382),l(.013,-.296),l(-.312,-.847),l(.082,-.184),l(.455,-.452),l(.206,-.339),l(.028,-.24),l(-.093,-.226),l(-.166,-.805),l(-.292,-2.088),l(-.098,-.86),l(.031,-.565),l(.412,-.565),l(.37,-.537),l(.207,-.564),l(.007,-.734),l(-.339,-.521),l(-.098,-.409),l(.295,-.96),l(.218,-.941),l(.127,-.556),l(.461,-.594),l(.171,-.918),l(.243,-.975),l(.126,-.805),l(.082,-.565),l(-.063,-1.087),l(.422,-.664),l(.211,-.494),l(-.221,-.932),l(-.048,-.833),l(.148,-.24),l(-.022,-.917),l(.229,-.607),l(-.124,-.297),l(-.365,-.084),l(.06,-.324),l(-.046,-.396),l(.223,-.198),l(.402,-.198),l(.137,-.424),l(-.008,-.819),l(.093,-.593),l(.182,-.918),l(-.004,-2.344),l(-.172,-2.074),l(-.042,-1.539),l(-.194,-.974),l(-.15,-.387),l(.852,-.275),l(.259,-.298),l(.228,-.933),l(.15,-.199),l(.586,-.187),l(.152,.253),l(.555,.745),l(.304,.647),l(.193,1.213),l(.25,.521),l(.761,.744),l(.017,.282),l(-.437,1.555),l(-.04,.354),l(.249,.676),l(.769,1.11),l(.212,.563),l(.278,.973),l(.397,2.144),l(.272,.182),l(1.047,-.006),l(.107,.056),l(.212,.14),l(.161,.154),l(-.093,.636),l(-.541,1.457),l(-.36,.256),l(-1.346,.53),l(-.819,.372),l(-.204,.312),l(.25,.817),l(-.421,.722),l(-.007,.579),l(.113,.437),l(.34,.449),l(.03,.226),l(-.273,.369),l(-.161,.382),l(.114,.507),l(.53,.477),l(.011,.227),l(-.152,.311),l(-.333,.017),l(-.791,.089),l(-.329,.835),l(-.464,.835),l(-.608,.694),l(-.282,.439),l(-.823,1.839),l(.167,1.466),l(.054,.762),l(-.124,.185),l(-.492,.271),l(-.292,.34),l(-.388,1.201),l(-.156,.961),l(.285,.633),l(.408,1.154),l(.784,2.816),l(.055,.69),l(-.075,.41),l(-1.083,1.854),l(-.319,.595),l(.088,.409),l(.189,1.06),l(-.078,.325),l(-1.334,1.11),l(-.231,.312),l(-.142,1.075),l(.014,1.16),l(.249,1.103),l(.437,.932),l(-.202,.143),l(-.951,.529),l(-.126,.17),l(-.053,.312),l(-.511,2.427),l(-.316,.541),l(-.1,.37),l(.123,1.835),l(.231,.867),l(.012,.427),l(-.596,.317),l(-.172,.172),l(-.106,.271),l(.094,1.226),l(.125,.128),l(.555,.111),l(.088,.655),l(-.191,1.458),l(.252,.585),l(.26,.185),l(.789,.11),l(.302,.17),l(-.007,.186),l(-.245,.202),l(-.322,.13),l(-.726,.033),l(-.757,.146),l(.176,.171),l(.586,.298),l(.552,.385),l(.017,.216),l(-.767,.794),l(-.059,1.094),l(.158,1.035),l(-.216,.896),l(-.212,.434),l(-.226,.262),l(-.598,.161),l(-.28,.219),l(-.249,.781),l(.446,.648),l(-.069,.188),l(-.296,1.218),l(-.307,.263),l(-1.729,1.01),l(-.271,.292),l(-.037,.45),l(.28,1.309),l(.508,1.123),l(.218,.043),l(.961,-.283),l(.654,-.121),l(.187,.248),l(.231,2.285),l(.778,.568),l(.669,.041),l(1.41,-.052),l(2.827,.132),l(.841,.217),l(1.385,.36),l(.286,.039),M(236.642,296.773),l(-.394,-.113),l(-.43,-.028),l(-.21,-.171),l(-.133,-.229),l(.21,-.457),l(.15,-.657),l(-.087,-.514),l(.011,-.414),l(.364,-.728),l(.817,-.116),l(.36,.327),l(.044,.328),l(-.688,.443),l(-.146,.229),l(.493,.771),l(-.194,1.058),l(-.167,.271),M(238.177,317.937),l(-.445,-.177),l(.083,-.842),l(-.849,.075),l(-.073,-.368),l(.218,-.354),l(.823,.102),l(.508,-.207),l(.205,.103),l(.054,.812),l(-.267,.34),l(-.257,.518),M(247.801,322.062),l(-1.033,.102),l(-.467,-.118),l(-.55,-.237),l(-.42,.001),l(-.481,.104),l(-.935,.226),l(-.496,.03),l(.125,-.343),l(.202,-.312),l(-.104,-.312),l(.906,-.15),l(1.434,.058),l(.433,.323),l(.706,-.007),l(-.622,-.689),l(-.307,-.163),l(-.56,-.117),l(-.178,-.089),l(-.188,.03),l(-.338,-.341),l(-.229,-.4),l(1.611,-.581),l(-.044,-.296),l(-.165,-.147),l(-1.819,.285),l(-.292,-.222),l(.263,-.474),l(.146,-.163),l(1.074,-.52),l(.868,-.637),l(.414,.28),l(1.153,.062),l(-.008,1.144),l(-.098,3.675),
-N(456.133,239.67),l(.187,.154),l(.163,.027),l(.154,.169),l(.264,.097),l(-.103,.227),l(.267,.451),l(.43,.478),l(.469,.604),l(.246,.96),l(.377,.662),l(.563,.491),l(.57,.321),l(.533,.223),l(.552,.266),l(.106,.169),l(-.051,.537),l(.109,.211),l(.201,.098),l(.78,-.019),l(.127,.239),l(-.032,.565),l(.163,.564),l(.524,.873),l(.352,.153),l(.938,.136),l(.549,.167),l(.479,.35),l(.306,.451),l(.186,.098),l(-.317,.411),l(-.388,.327),l(-.507,.243),l(-.747,.075),l(-.304,.115),l(-.7,.823),l(-.586,.583),l(-.362,.229),l(-.747,.357),l(-.388,.355),l(-.107,.636),l(-.222,.666),l(-.247,.241),l(-.634,.357),l(-.98,.33),l(-.249,.214),l(-.217,.708),l(-.345,.963),l(-.288,.354),l(-.237,.129),l(-.584,.116),l(-.43,-.026),l(-.473,.06),l(-.511,-.011),l(-.819,-.193),l(-.744,-.32),l(-.979,-.645),l(-.545,-.039),l(-.333,.186),l(-.084,.24),l(-.585,1.134),l(-.382,.469),l(-.651,.625),l(-.632,.428),l(-.8,.372),l(-.823,.033),l(-.854,.047),l(-.368,-.097),l(-.11,-.183),l(.003,-.48),l(.243,-.609),l(.166,-.538),l(-.21,-.762),l(-.547,-.943),l(-.716,-.787),l(-.528,-.067),l(-.007,-.806),l(-.013,-1.624),l(.009,-1.201),l(.106,-2.657),l(.146,-.028),l(1.564,-.052),l(.586,-.046),l(-.002,-3.561),l(.043,-1.201),l(.025,-.876),l(.007,-1.286),l(-.005,-1.215),l(1.183,-.021),l(2.962,-.47),l(1.048,-.134),l(.62,.773),l(.209,-.029),l(.993,-.938),l(.284,-.143),l(.891,-.02),l(.811,-.315),
-N(279.288,257.295),l(.02,.239),l(-.544,1.57),l(-.375,.468),l(-1.007,.74),l(-.301,.27),l(-.352,.51),l(-.609,-.363),l(-.35,-.097),l(-.235,.029),l(-.387,.172),l(-.745,.131),l(-.71,.005),l(-.564,-.096),l(-.992,-.333),l(-.607,-.025),l(-1.187,.332),l(-.19,-.056),l(.064,-.212),l(.425,-.426),l(.486,-.398),l(.11,-.198),l(-.21,-.619),l(.048,-.227),l(.625,-.851),l(.617,-1.203),l(.018,-.268),l(-.939,-.503),l(-.65,-.18),l(-1.448,-.697),l(-1.632,-1.106),l(-.671,-.307),l(-1.173,-.204),l(-.498,-.237),l(-.835,-.588),l(-.576,-.562),l(-1.271,-1.376),l(-.782,-.913),l(-.225,-.337),l(-.19,-.056),l(.149,-.325),l(.395,-1.104),l(.385,-1.188),l(-.016,-.635),l(.133,-.509),l(.278,-.341),l(.698,-1.105),l(.332,-.383),l(.33,-.044),l(.784,-.202),l(1.104,-.162),l(1.076,-.204),l(.126,-.128),l(.843,.01),l(.928,-.02),l(.352,.054),l(1.952,.991),l(.089,.084),l(.253,.408),l(.084,.663),l(.521,.872),l(.104,.959),l(-.132,.862),l(-.086,.721),l(-.006,.72),l(.372,.04),l(.818,.15),l(.925,.221),l(.346,-.03),l(.709,-.413),l(.115,-.001),l(.724,.278),l(.843,.404),l(.121,.437),l(.487,2.524),l(.254,.563),l(.224,.055),l(1.29,-.445),l(.234,.112),l(.491,.336),l(.019,.141),l(-.321,.75),l(-.298,.835),l(-.222,.819),l(-.027,.777),l(.063,.423),
-N(444.673,255.519),l(.528,.067),l(.716,.787),l(.547,.943),l(.21,.762),l(-.166,.538),l(-.243,.609),l(-.003,.48),l(.11,.183),l(.368,.097),l(.854,-.047),l(.823,-.033),l(.8,-.372),l(.632,-.428),l(.651,-.625),l(.382,-.469),l(.585,-1.134),l(.084,-.24),l(.333,-.186),l(.545,.039),l(.979,.645),l(.744,.32),l(.819,.193),l(.511,.011),l(.473,-.06),l(.43,.026),l(.584,-.116),l(.237,-.129),l(.288,-.354),l(.345,-.963),l(.217,-.708),l(.249,-.214),l(.98,-.33),l(.634,-.357),l(.247,-.241),l(.222,-.666),l(.107,-.636),l(.388,-.355),l(.747,-.357),l(.362,-.229),l(.586,-.583),l(.7,-.823),l(.304,-.115),l(.747,-.075),l(.507,-.243),l(.388,-.327),l(.317,-.411),l(.067,.042),l(.72,.023),l(.597,.139),l(.99,.403),l(.31,-.016),l(.529,-.145),l(.442,.025),l(.547,.124),l(.342,.225),l(.159,.183),l(.295,1.199),l(.181,.946),l(.441,.689),l(.33,.944),l(.147,.678),l(.072,.763),l(-.057,1.301),l(-.03,.806),l(.095,.324),l(-1.449,-.585),l(-.279,.199),l(-.657,.979),l(-.28,.567),l(-.005,.325),l(.39,.676),l(.307,.465),l(.458,.322),l(.671,.109),l(.595,-.004),l(.076,-.594),l(.064,-.198),l(.312,-.186),l(.131,-.015),l(.192,-.058),l(1.331,-.011),l(-.182,1.195),l(-.352,.849),l(-.182,.184),l(-.404,.1),l(-.093,.24),l(.199,.536),l(-.104,.467),l(-.248,.354),l(-.569,.453),l(-.923,.581),l(-.591,.75),l(-1.383,1.98),l(-.631,.834),l(-1.242,1.373),l(-1.193,1.062),l(-.829,.863),l(-1.434,1.034),l(-1.379,1.091),l(-.552,.382),l(-.989,.638),l(-.676,.298),l(-.782,.101),l(-.98,-.012),l(-.549,.071),l(-.132,.354),l(.013,.127),l(-.109,.085),l(-.449,-.098),l(-.553,-.126),l(-.303,.015),l(-.25,.198),l(-.272,.312),l(-.226,.113),l(-.36,-.056),l(-.768,-.408),l(-.759,-.168),l(-.542,-.013),l(-.31,.113),l(-.38,.27),l(-.482,-.099),l(-.645,-.21),l(-.295,.1),l(-.638,.043),l(-.589,.214),l(-.729,.538),l(-.72,.086),l(-.44,-.013),l(-.667,-.084),l(-.738,.072),l(-.575,.199),l(-.827,.82),l(-1.251,-.576),l(-.092,-.509),l(-.218,-.183),l(-.479,-.056),l(-.28,.085),l(-.257,-.479),l(-.343,-.056),l(-.149,.255),l(-.035,.197),l(-.312,-.112),l(-.119,-.226),l(.267,-.495),l(.103,-.424),l(-.857,-1.354),l(-.323,-.282),l(-.134,-.226),l(.173,-.17),l(.636,-.044),l(.172,-.424),l(.06,-.819),l(-.163,-.663),l(-.186,-.522),l(-.61,-1.143),l(-.75,-1.029),l(-.472,-.903),l(-.612,-1.383),l(-.646,-1.467),l(-.573,-.818),l(-.436,-.467),l(.152,-.068),l(.584,-.27),l(.317,-.416),l(.109,-.217),l(.335,-.116),l(.329,.127),l(.637,.348),l(.193,.222),l(.042,.345),l(.055,.528),l(.296,.212),l(.517,.039),l(.892,-.048),l(.745,.042),l(.581,.166),l(.427,-.034),l(.581,-.498),l(.545,-.302),l(.454,-.318),l(.057,-.205),l(-.025,-2.246),l(-.031,-1.894),l(.006,-3.434),M(462.462,268.501),l(.412,-.044),l(.194,-.553),l(.633,-.343),l(1.035,-.303),l(.263,-.199),l(.582,-1.007),l(.268,-.326),l(.143,-.241),l(-.104,-.226),l(-.967,-.744),l(-.33,-.337),l(-.422,-.266),l(-.308,.086),l(-.995,.359),l(-.65,.329),l(-.513,.567),l(-.275,.44),l(-.691,.611),l(.12,.409),l(.582,.858),l(.285,.366),l(.739,.561),M(432.955,250.661),l(.456,.006),l(.077,.749),l(-.04,.678),l(-.772,.02),l(-.078,-.354),l(-.028,-.396),l(.285,-.297),l(.101,-.406),
-N(471.719,258.047),l(.075,.296),l(-.071,.495),l(.261,.889),l(.068,.382),l(-.131,.015),l(-.312,.186),l(-.064,.198),l(-.076,.594),l(-.595,.004),l(-.671,-.109),l(-.458,-.322),l(-.307,-.465),l(-.39,-.676),l(.005,-.325),l(.28,-.567),l(.657,-.979),l(.279,-.199),l(1.449,.585),
-N(462.462,268.501),l(-.739,-.561),l(-.285,-.366),l(-.582,-.858),l(-.12,-.409),l(.691,-.611),l(.275,-.44),l(.513,-.567),l(.65,-.329),l(.995,-.359),l(.308,-.086),l(.422,.266),l(.33,.337),l(.967,.744),l(.104,.226),l(-.143,.241),l(-.268,.326),l(-.582,1.007),l(-.263,.199),l(-1.035,.303),l(-.633,.343),l(-.194,.553),l(-.412,.044),
-N(790.15,283.022),l(.738,.197),l(.008,-.227),l(-.242,-.524),l(.052,-.284),l(.233,.014),l(.389,.17),l(.37,.751),l(.277,.964),l(.48,.17),l(1.753,.691),l(.506,.113),l(.37,-.072),l(.699,-.483),l(.885,-.343),l(.4,.027),l(.329,.17),l(.066,.454),l(-.022,.198),l(-.402,1.236),l(-.283,.072),l(-.761,.058),l(-.035,.683),l(-.124,.156),l(-.424,.029),l(-.746,.016),l(-.432,.2),l(-.271,.284),l(.041,.384),l(.254,.525),l(-.002,.213),l(-.151,.199),l(-.646,.515),l(-.898,1.129),l(-.847,1.058),l(-.756,.587),l(-.68,.316),l(-.337,-.171),l(-.47,-.313),l(-.237,-.328),l(.056,-.314),l(.288,-.386),l(.307,-.671),l(.398,-.5),l(-.031,-.343),l(-.271,-.128),l(-.761,-.582),l(-.421,-.185),l(-.593,-.184),l(-.98,-.452),l(-.306,-.256),l(-.11,-.17),l(.081,-.128),l(.419,-.157),l(1.389,-.685),l(.209,-.512),l(-.078,-.695),l(.087,-.312),l(.396,-.441),l(.032,-.383),l(-.482,-.837),l(.081,-.567),l(-.156,-.311),l(-.479,-.655),l(-.574,-.678),l(.102,-.164),l(-.145,-.304),l(-.291,-.351),l(-.336,-.188),l(-.29,-.163),l(.117,.233),l(.497,.515),l(.049,.141),l(-.169,0),l(-.211,-.281),l(-.525,-.631),l(-.622,-.771),l(-.518,-.561),l(.001,-.117),l(-.268,-.257),l(.04,-.141),l(.013,-.14),l(-.048,-.188),l(-.197,-.396),l(-.379,-.42),l(-.347,-.257),l(.163,-.046),l(.205,.093),l(.358,-.047),l(.131,-.093),l(.084,.28),l(-.149,.187),l(.186,.303),l(.177,.21),l(.167,.116),l(.228,.164),l(.041,-.141),l(.269,.023),l(.519,.257),l(.42,.117),l(.274,.07),l(.128,.257),l(-.011,.141),l(.185,.023),l(.146,-.188),l(.185,.023),l(-.022,.164),l(.227,.351),l(.249,.187),l(.233,.28),l(-.18,.023),l(-.076,.164),l(.093,.163),l(-.242,-.023),l(-.175,-.047),l(.143,.117),l(.251,.188),l(.23,.233),l(.352,.28),l(.063,.234),l(.019,.21),l(-.261,-.047),l(.096,.164),l(.239,.351),l(.256,.188),l(-.292,.023),l(-.226,0),l(-.205,-.047),l(-.006,.141),l(.306,.14),l(.324,.164),l(-.09,.211),l(.205,.046),l(.265,-.023),l(.226,0),l(.223,.141),l(-.114,.07),l(-.031,.141),l(.025,.141),l(.136,.06),M(782.939,297.694),l(-.088,.158),l(-.558,.13),l(-.309,.288),l(-.322,.101),l(-.246,.244),l(-.692,-.242),l(-.16,.086),l(.15,.216),l(.429,.415),l(-.141,.173),l(.02,.259),l(-.064,.431),l(-.218,-.071),l(-.976,-.099),l(.418,.229),l(.449,.244),l(-.278,.49),l(-.427,.896),l(-.212,.549),l(-.418,.318),l(-.673,.349),l(-.171,.246),l(-.259,.145),l(-.581,.233),l(-.593,.406),l(-.398,.015),l(-1.156,-.258),l(-.628,.112),l(-.585,-.442),l(-.812,-.158),l(-.373,-.066),l(-.162,-.308),l(-.467,-.098),l(-.24,.142),l(-.062,.168),l(-.78,.095),l(-.214,-.166),l(-.515,-.095),l(-.146,-.286),l(.432,-.089),l(-.223,-.216),l(.328,-.116),l(.322,-.001),l(-.452,-.482),l(.82,.266),l(-.464,-.576),l(.121,-.145),l(.946,.156),l(.082,-.13),l(-.141,-.173),l(-.201,-.216),l(-.06,-.288),l(.283,-.303),l(.569,-.246),l(.328,-.374),l(.561,-.375),l(.102,-.302),l(.998,-.575),l(1.106,-.275),l(.713,-.331),l(.544,-.36),l(.377,-.101),l(.685,-.575),l(.066,-.272),l(.48,-.302),l(.373,-.015),l(.787,-.331),l(.664,-.402),l(.126,-.215),l(-.008,-.172),l(.266,-.144),l(.448,-.302),l(-.109,-.501),l(.076,-.214),l(.166,-.44),l(.306,.048),l(.066,-.152),l(.58,-.259),l(.444,-.272),l(.137,-.285),l(.131,-1.187),l(.512,-.647),l(.372,.047),l(.365,.165),l(.032,.259),l(.337,.06),l(.187,.186),l(.231,.799),l(.312,.242),l(.973,-.645),l(.426,-.029),l(.367,.113),l(.222,.5),l(-.197,.399),l(.299,.429),l(.066,.271),l(-.611,.659),l(-.261,.401),l(-.476,.358),l(-.868,.746),l(-.578,.359),l(-.295,.13),l(-.236,.258),l(-.389,.159),l(-.271,.258),l(.416,.407),l(.428,.047),l(.421,.289),l(-.276,.113),l(-.484,.07),l(-.503,-.296),l(-.488,.131),l(-.352,.158),
-N(247.899,318.387),l(.008,-1.144),l(.821,.289),l(.06,.206),l(-.354,.312),l(-.534,.337),M(248.453,316.576),l(-.286,-.039),l(-1.385,-.36),l(-.841,-.217),l(-2.827,-.132),l(-1.41,.052),l(-.669,-.041),l(-.778,-.568),l(-.231,-2.285),l(-.187,-.248),l(-.654,.121),l(-.961,.283),l(-.218,-.043),l(-.508,-1.123),l(-.28,-1.309),l(.037,-.45),l(.271,-.292),l(1.729,-1.01),l(.307,-.263),l(.296,-1.218),l(.069,-.188),l(-.446,-.648),l(.249,-.781),l(.28,-.219),l(.598,-.161),l(.226,-.262),l(.212,-.434),l(.216,-.896),l(-.158,-1.035),l(.059,-1.094),l(.767,-.794),l(-.017,-.216),l(-.552,-.385),l(-.586,-.298),l(-.176,-.171),l(.757,-.146),l(.726,-.033),l(.322,-.13),l(.245,-.202),l(.007,-.186),l(-.302,-.17),l(-.789,-.11),l(-.26,-.185),l(-.252,-.585),l(.191,-1.458),l(-.088,-.655),l(-.555,-.111),l(-.125,-.128),l(-.094,-1.226),l(.106,-.271),l(.172,-.172),l(.596,-.317),l(-.012,-.427),l(-.231,-.867),l(-.123,-1.835),l(.1,-.37),l(.316,-.541),l(.511,-2.427),l(.053,-.312),l(.126,-.17),l(.951,-.529),l(.202,-.143),l(-.437,-.932),l(-.249,-1.103),l(-.014,-1.16),l(.142,-1.075),l(.231,-.312),l(1.334,-1.11),l(.078,-.325),l(-.189,-1.06),l(-.088,-.409),l(.319,-.595),l(1.083,-1.854),l(.075,-.41),l(-.055,-.69),l(-.784,-2.816),l(-.408,-1.154),l(-.285,-.633),l(.156,-.961),l(.388,-1.201),l(.292,-.34),l(.492,-.271),l(.124,-.185),l(-.054,-.762),l(-.167,-1.466),l(.823,-1.839),l(.282,-.439),l(.608,-.694),l(.464,-.835),l(.329,-.835),l(.791,-.089),l(.333,-.017),l(.152,-.311),l(-.011,-.227),l(-.53,-.477),l(-.114,-.507),l(.161,-.382),l(.273,-.369),l(-.03,-.226),l(-.34,-.449),l(-.113,-.437),l(.007,-.579),l(.421,-.722),l(-.25,-.817),l(.204,-.312),l(.819,-.372),l(1.346,-.53),l(.36,-.256),l(.541,-1.457),l(.093,-.636),l(-.161,-.154),l(-.212,-.14),l(-.107,-.056),l(2.026,-2.087),l(.292,-.27),l(.322,.181),l(.193,.169),l(.615,.194),l(.901,-.034),l(.527,-.045),l(.531,.067),l(.37,.195),l(.341,.309),l(.416,1.084),l(1.034,-1.784),l(.686,-.004),l(1.33,.077),l(.592,.109),l(.19,.056),l(.225,.337),l(.782,.913),l(1.271,1.376),l(.576,.562),l(.835,.588),l(.498,.237),l(1.173,.204),l(.671,.307),l(1.632,1.106),l(1.448,.697),l(.65,.18),l(.939,.503),l(-.018,.268),l(-.617,1.203),l(-.625,.851),l(-.048,.227),l(.21,.619),l(-.11,.198),l(-.486,.398),l(-.425,.426),l(-.064,.212),l(.19,.056),l(1.187,-.332),l(.607,.025),l(.992,.333),l(.564,.096),l(.71,-.005),l(.745,-.131),l(.387,-.172),l(.235,-.029),l(.35,.097),l(.609,.363),l(.352,-.51),l(.301,-.27),l(1.007,-.74),l(.375,-.468),l(.544,-1.57),l(-.02,-.239),l(.957,-.161),l(.462,-.017),l(.206,.196),l(.517,1.154),l(-.094,1.638),l(-.161,.467),l(-.521,.313),l(-1.754,.744),l(-.348,.242),l(-1.633,1.448),l(-1.435,1.363),l(-1.805,1.816),l(-.833,.88),l(-.214,.27),l(-.443,.524),l(-.065,.452),l(-.595,2.359),l(-.103,.522),l(.049,.847),l(.168,.986),l(-.118,.325),l(-.48,.524),l(-.24,.495),l(-.011,.522),l(.194,.577),l(-.054,.338),l(-.162,.273),l(-.26,.325),l(.015,.226),l(.924,.831),l(.68,.281),l(.715,.281),l(.283,.169),l(.281,.325),l(-.025,.325),l(-.362,.523),l(-.043,.396),l(.105,.339),l(.174,.269),l(.466,.325),l(.522,.168),l(.109,.113),l(.226,.892),l(-.308,.481),l(-.75,.937),l(-.729,.766),l(-.313,.737),l(-.368,.284),l(-.832,.342),l(-1.04,.342),l(-1.92,.401),l(-1.795,.188),l(-1.361,.116),l(-.945,.044),l(-1.175,-.11),l(-.934,-.226),l(-.128,.199),l(.036,.808),l(.322,.312),l(.308,.184),l(-.09,.298),l(-.381,.624),l(-.345,.498),l(-.069,.385),l(.392,.682),l(.066,.285),l(-.208,.214),l(-.105,.057),l(-1.251,.473),l(-1.137,.116),l(-.814,-.069),l(-.967,-.34),l(-1.47,-.396),l(-.246,.057),l(-.23,.271),l(.041,.598),l(.429,.684),l(.037,.398),l(-.242,.643),l(.092,.385),l(.773,.54),l(.796,.084),l(.369,-.2),l(-.387,-.398),l(.872,-.188),l(.383,-.043),l(.234,1.041),l(.052,.3),l(-.144,.157),l(-.299,.101),l(-.448,.072),l(-.261,-.157),l(-.104,-.299),l(-.115,-.071),l(-1.046,.073),l(-.67,.201),l(-.212,.101),l(.151,.214),l(.591,.07),l(.47,.113),l(.452,.113),l(.06,.028),l(-.864,.388),l(-.776,.287),l(-.577,.602),l(.003,.414),l(.161,.787),l(-.081,.258),l(-.815,.817),l(.022,.215),l(.423,.371),l(-.491,.116),l(-1.194,.088),l(-.48,.087),l(-.632,.246),l(-.619,.389),l(-.56,.548),l(-.549,.821),l(-.052,.389),l(.061,.375),l(.312,.591),l(.48,.446),l(.98,.633),l(.657,.244),l(.97,.143),l(.362,.086),l(.14,.274),l(-.151,.796),l(-.128,.348),l(-.342,.464),l(-.189,.145),l(-1.08,.524),l(-1.541,.814),l(-.712,.698),l(-.179,.276),l(-.093,.45),l(.111,.523),l(-.169,.451),l(-.239,.32),l(-.97,.454),l(-.969,.25),l(-.421,.221),l(-.323,.396),l(-.226,.791),l(-.054,.514),l(.2,.777),l(.547,.896),l(.699,.779),l(.235,.339),l(-.101,.032),M(247.899,318.387),l(.18,.182),l(.148,.073),l(.607,-.075),l(.344,.133),l(.648,.725),l(.908,.665),l(.993,.756),l(.525,.222),l(.73,.37),l(.246,.074),l(.42,-.001),l(.483,.163),l(1.283,.027),l(.142,-.016),l(-.006,.224),l(-.19,.209),l(-.492,.06),l(-1.198,.092),l(-.777,.196),l(-.364,0),l(-1.179,-.355),l(-.753,-.088),l(-1.15,-.027),l(-.814,-.014),l(-.831,.081),l(.098,-3.675),
-N(346.758,54.457),l(.127,-.162),l(.42,-.179),l(.894,.015),l(.674,-.098),l(-.354,-.227),l(-.405,-.34),l(.317,-.342),l(.277,0),l(.956,.42),l(.67,.048),l(.3,-.163),l(-.191,-.26),l(-.625,-.373),l(.366,-.245),l(1.037,.226),l(.957,.08),l(.746,.275),l(.446,.551),l(-.119,.405),l(-.441,.292),l(.922,.806),l(.553,-.356),l(.352,-.13),l(.63,-.114),l(.49,-.179),l(.061,-.21),l(-.169,-.778),l(.542,-.245),l(.501,.454),l(.426,.307),l(.489,.209),l(.215,.016),l(.185,-.13),l(-.264,-.454),l(.243,-.163),l(.27,-.033),l(.817,-.164),l(.683,.438),l(.536,.242),l(.542,.063),l(.05,-.178),l(-.358,-.535),l(1.006,.145),l(1.439,.079),l(.787,-.115),l(.427,-.229),l(-.021,-.716),l(1.167,.08),l(.635,.471),l(1.118,.323),l(.683,.015),l(.273,.243),l(-.252,.552),l(.786,.29),l(1.674,.159),l(.127,.145),l(.143,.548),l(-.07,.387),l(-.152,.256),l(-.152,.256),l(-.443,.129),l(-.815,.018),l(-.195,.096),l(-.04,.431),l(-.515,.463),l(-.497,.16),l(-.568,-.031),l(-.422,-.159),l(-.817,.495),l(-.539,.144),l(-1.46,.463),l(-.853,.113),l(-.726,.001),l(-.771,.097),l(-.784,.587),l(-.473,.127),l(-1.078,.097),l(-.709,-.03),l(-1.316,-.171),l(-.608,-.142),l(-1.283,-.489),l(-1.058,-.093),l(-.443,.064),l(-1.041,-.014),l(-1.834,-.124),l(-.297,-.206),l(.434,-.191),l(1.127,-.352),l(.701,-.59),l(-.818,-.015),l(-.51,-.126),l(-.428,-.398),l(-.253,-.095),l(-.358,.081),l(-1.564,.115),l(-.557,.033),l(-.37,-.223),l(.141,-.192),l(.388,-.129),l(.669,-.097),l(.794,-.017),l(.729,-.114),l(1.049,-.098),l(.376,-.194),l(.178,-.322),l(-.144,-.258),l(-.358,-.177),l(-.426,-.015),l(-.478,-.145),l(-1.005,-.047),l(-.821,.099),l(-.424,.162),l(-.676,.082),l(-1.041,-.272),l(-.16,-.21),
-N(462.829,67.958),l(.145,.053),l(.16,.131),l(-.043,.174),l(-.175,.044),l(-.189,0),l(-.116,0),l(-.088,.043),l(-.058,.131),l(-.175,.277),l(-.219,.204),l(-.319,.131),l(-.204,.131),l(-.088,.16),l(.029,.16),l(.131,.437),l(.073,.189),l(.029,.16),l(-.175,.131),l(0,.175),l(.175,.233),l(.203,.087),l(.088,.073),l(0,.073),l(.015,.087),l(.043,.146),l(.175,.043),l(.059,.059),l(-.175,.073),l(-.262,.043),l(-.16,.058),l(-.059,.102),l(-.087,.116),l(-.131,0),L(461.402,72),l(-.015,.087),l(-.116,.058),l(.081,.106),l(-.125,.025),l(-.087,-.015),l(-.306,-.043),l(-.16,-.058),l(-.175,-.073),l(-.204,-.044),l(-.131,.102),l(-.204,-.029),l(-.131,.044),l(-.16,.087),l(-.146,.014),l(-.146,-.087),l(-.116,-.029),l(-.175,0),l(-.204,-.117),l(-.116,-.174),l(-.203,-.117),l(-.146,-.043),l(-.072,-.117),l(-.189,0),l(-.247,-.043),l(-.204,-.117),l(-.029,0),l(-.276,-.014),l(-.102,-.102),l(-.248,-.043),l(-.116,-.102),l(-.189,-.087),l(0,.073),l(-.116,.087),l(-.131,-.058),l(-.015,-.073),l(-.087,-.029),l(-.103,0),l(-.276,.117),l(-.102,.029),l(-.131,.015),l(-.219,.015),l(-.146,.043),l(-.262,.029),l(-.276,.087),l(-.116,.102),l(-.087,0),l(.156,-.19),l(-.003,-.351),l(.183,-.238),l(-.368,-.21),l(-.605,.437),l(-.334,-.251),l(-.527,-.038),l(.043,-.942),l(-.396,.188),l(-.336,-.415),l(.158,-.202),l(-.209,-.254),l(.265,-.074),l(-.092,-.252),l(.344,-.042),l(1.026,-.084),l(-.006,-.132),l(.561,-.108),l(.133,-.188),l(.436,.101),l(.074,-.113),l(.317,.05),l(.083,-.215),l(1.104,.193),l(.446,-.294),l(.091,.165),l(.514,-.089),l(1.383,.029),l(1.152,.167),l(.305,.12),l(.592,-.045),l(.971,.09),l(.426,-.108),l(.271,-.24),l(-.006,-.009),
-N(461.353,72.251),l(.37,-.004),l(-.015,.116),l(0,.117),l(.232,.073),l(.204,.087),l(.087,.073),l(.204,.058),l(-.015,.087),l(-.029,.116),l(-.015,.087),l(-.102,.073),l(-.087,.015),l(-.103,.029),l(.131,.087),l(-.072,.131),l(.029,.117),l(-.073,.087),l(-.102,.073),l(-.044,.102),l(.204,-.059),l(.146,-.015),l(.131,.073),l(.087,.014),l(.073,.044),l(-.059,.087),l(-.043,.073),l(.116,.102),l(.131,.058),l(.029,.16),l(.146,.102),l(.16,.043),l(-.059,.087),l(.131,.117),l(-.015,.189),l(.088,.233),l(-.044,.087),l(-.015,.117),l(-.061,.042),l(-.241,.044),l(-.24,.051),l(-.12,.12),l(-.223,.034),l(-.137,.154),l(-.137,.085),l(-.069,.103),l(-.068,.206),l(-.188,.035),l(-.239,-.035),l(-.24,-.034),l(-.325,-.034),l(-.359,0),l(-.172,.068),l(-.103,.137),l(-.223,.085),l(-.154,0),l(-.103,-.017),l(-.086,.052),l(-.377,-.035),l(-.273,-.068),l(-.154,-.171),l(-.138,-.154),l(-.325,-.137),l(-.497,-.223),l(-.342,-.24),l(-.377,-.034),l(-.583,-.035),l(-.325,-.12),l(-.291,-.188),l(-.086,-.257),l(-.188,.017),l(-.171,.068),l(-.36,.171),l(-.394,.017),l(-.24,0),l(-.273,.085),l(-.24,-.085),l(-.309,-.103),l(-.6,-.017),l(-.291,.069),l(-.359,-.069),l(-.291,-.051),l(-.154,.034),l(-.274,.069),l(-.103,-.052),l(-.12,-.137),l(-.154,0),l(-.257,.068),l(-.188,0),l(-.754,-.017),l(-.445,-.085),l(-.754,.171),l(-.599,.154),l(-.429,.103),l(-.257,.137),l(-.052,.188),l(-.526,.026),l(-.065,-.059),l(.073,-.837),l(.035,-.302),l(.127,-.167),l(.672,-.379),l(.034,-.717),l(.267,-.162),l(.267,-.273),l(.217,-.203),l(.296,-.026),l(1.056,-.199),l(.166,-.046),l(.162,-.066),l(.29,0),l(.049,.237),l(.657,.388),l(.422,.162),l(.23,.473),l(.091,.15),l(.441,.196),l(.785,.059),l(.868,-.244),l(.24,-.122),l(.178,-.288),l(-.052,-.394),l(-.193,-.869),l(.198,-.243),l(.045,-.055),l(.087,0),l(.116,-.102),l(.276,-.087),l(.262,-.029),l(.146,-.043),l(.219,-.015),l(.131,-.015),l(.102,-.029),l(.276,-.117),l(.103,0),l(.087,.029),l(.015,.073),l(.131,.058),l(.116,-.087),l(0,-.073),l(.189,.087),l(.116,.102),l(.248,.043),l(.102,.102),l(.276,.014),l(.029,0),l(.204,.117),l(.247,.043),l(.189,0),l(.072,.117),l(.146,.043),l(.203,.117),l(.116,.174),l(.204,.117),l(.175,0),l(.116,.029),l(.146,.087),l(.146,-.014),l(.16,-.087),l(.131,-.044),l(.204,.029),l(.131,-.102),l(.204,.044),l(.175,.073),l(.16,.058),l(.306,.043),l(.087,.015),l(.125,-.025),
-N(451.02,79.165),l(-.029,-.038),l(-.034,-.137),l(-.018,-.171),l(.068,-.206),l(.068,-.154),l(.224,-.12),l(-.052,-.12),l(-.018,-.137),l(-.171,-.069),l(-.188,-.034),l(-.103,-.103),l(-.086,-.137),l(-.223,.017),l(-.257,0),l(-.445,0),l(-.223,.051),l(-.086,-.103),l(-.514,-.068),l(-.257,-.069),l(-.223,-.12),l(-.24,0),l(-.086,-.052),l(-.051,-.154),l(-.12,.034),l(-.353,.096),l(-.043,-.077),l(.128,-.012),l(.034,-.183),l(-.439,-.646),l(-.008,-.14),l(-.042,-.727),l(-.112,-.102),l(.526,-.026),l(.052,-.188),l(.257,-.137),l(.429,-.103),l(.599,-.154),l(.754,-.171),l(.445,.085),l(.754,.017),l(.188,0),l(.257,-.068),l(.154,0),l(.12,.137),l(.103,.052),l(.274,-.069),l(.154,-.034),l(.291,.051),l(.359,.069),l(.291,-.069),l(.6,.017),l(.309,.103),l(.24,.085),l(.273,-.085),l(.24,0),l(.394,-.017),l(.36,-.171),l(.171,-.068),l(.188,-.017),l(.086,.257),l(.291,.188),l(.325,.12),l(.583,.035),l(.377,.034),l(.342,.24),l(.497,.223),l(.325,.137),l(.138,.154),l(.154,.171),l(.273,.068),l(.377,.035),l(-.017,.171),l(-.086,.154),l(-.034,.12),l(-.12,.137),l(-.086,.137),l(.343,.034),l(.274,.052),l(.085,.051),l(-.119,.051),l(-.086,0),l(-.103,.154),l(-.018,.154),l(-.171,.017),l(-.12,-.086),l(-.12,.051),l(-.239,-.034),l(-.154,.034),l(-.086,.154),l(-.103,.154),l(-.257,.068),l(-.429,0),l(-.137,.137),l(-.12,.12),l(-.034,.154),l(-.086,.171),l(.103,.171),l(-.068,.137),l(-.239,.154),l(0,.137),l(-.068,.085),l(-.069,.137),l(.172,.034),l(.205,0),l(.138,.206),l(-.086,.188),l(-.274,.017),l(-.223,-.068),l(0,-.154),l(-.034,-.085),l(-.086,-.069),l(-.171,.051),l(-.12,.086),l(-.291,-.034),l(-.068,.137),l(-.24,.12),l(-.154,0),l(-.188,-.034),l(-.273,.103),l(.086,.171),l(-.069,.12),l(-.171,.034),l(-.137,-.034),l(-.206,.051),l(-.377,.154),l(-.291,0),l(-.068,-.103),l(-.12,-.051),l(-.239,.051),l(-.377,.017),l(-.24,.034),l(-.291,-.034),l(-.154,.034),l(-.093,-.035),l(-.09,-.171),l(-.016,-.029),l(-.099,-.186),l(-.284,-.487),l(-.679,-.243),l(-.04,-.014),l(-.641,.021),
-N(452.867,80.273),l(.093,.035),l(.154,-.034),l(.291,.034),l(.24,-.034),l(.377,-.017),l(.239,-.051),l(.12,.051),l(.068,.103),l(.291,0),l(.377,-.154),l(.206,-.051),l(.137,.034),l(.171,-.034),l(.069,-.12),l(-.086,-.171),l(.273,-.103),l(.188,.034),l(.154,0),l(.24,-.12),l(.068,-.137),l(.291,.034),l(.12,-.086),l(.171,-.051),l(.086,.069),l(.034,.085),l(0,.154),l(.223,.068),l(.274,-.017),l(.086,-.188),l(-.138,-.206),l(-.205,0),l(-.172,-.034),l(.069,-.137),l(.068,-.085),l(0,-.137),l(.239,-.154),l(.068,-.137),l(-.103,-.171),l(.086,-.171),l(.034,-.154),l(.12,-.12),l(.137,-.137),l(.429,0),l(.257,-.068),l(.103,-.154),l(.086,-.154),l(.154,-.034),l(.239,.034),l(.12,-.051),l(.12,.086),l(.171,-.017),l(.018,-.154),l(.103,-.154),l(.086,0),l(.119,-.051),l(-.085,-.051),l(-.274,-.052),l(-.343,-.034),l(.086,-.137),l(.12,-.137),l(.034,-.12),l(.086,-.154),l(.017,-.171),l(.086,-.052),l(.103,.017),l(.154,0),l(.223,-.085),l(.103,-.137),l(.172,-.068),l(.359,0),l(.325,.034),l(.24,.034),l(.239,.035),l(.188,-.035),l(.068,-.206),l(.069,-.103),l(.137,-.085),l(.137,-.154),l(.223,-.034),l(.12,-.12),l(.24,-.051),l(.241,-.044),l(.165,.147),l(.229,.066),l(.197,-.131),l(.181,.016),l(.312,.033),l(.132,.148),l(.082,.148),l(.197,-.033),l(.214,-.065),l(.361,-.049),l(.312,.049),l(.296,.065),l(.147,.017),l(0,.115),l(-.164,.099),l(-.017,.099),l(.065,.148),l(.164,.148),l(.197,0),l(.214,-.197),l(.279,-.016),l(.165,0),l(.147,-.099),l(.23,-.083),l(.131,.049),l(.099,.049),l(.247,-.049),l(.542,.115),l(.132,.131),l(.279,.099),l(.099,.099),l(.147,.099),l(.165,.033),l(.147,-.033),l(.049,.115),l(-.065,.115),l(0,.083),l(-.033,.164),l(-.131,.165),l(.197,.247),l(.147,.099),l(.05,.164),l(-.066,.131),l(-.114,0),l(0,.083),l(-.115,.082),l(-.099,.049),l(-.033,.165),l(-.049,.147),l(.345,.049),l(.132,.181),l(.082,.115),l(.181,-.049),l(.132,.033),l(-.099,.115),l(-.066,.131),l(.017,.099),l(.214,.017),l(.164,.263),l(.115,.23),l(.443,.213),l(.23,.066),l(.279,.082),l(.164,.099),l(.066,.148),l(-.099,.197),l(-.066,.181),l(.182,.066),l(.361,-.066),l(.378,.066),l(.361,.099),l(.263,.066),l(-.032,.065),l(-.066,.049),l(-.082,.017),l(.099,.181),l(.296,.148),l(.279,.066),l(.033,.131),l(-.065,.164),l(-.296,0),l(-.148,.083),l(-.049,.065),l(-.444,.247),l(-.525,.099),l(-.51,-.016),l(-.197,-.132),l(-.328,-.049),l(-.362,.017),l(-.131,.165),l(-.099,.131),l(.017,.164),l(.279,.263),l(.296,.164),l(0,.165),l(-.132,.066),l(.099,.148),l(.147,.131),l(-.082,.099),l(.033,.164),l(.033,.23),l(-.033,.099),l(.164,.082),l(.082,.115),l(.165,.066),l(.002,.142),l(-.519,-.005),l(-.522,.056),l(-.112,.131),l(-.205,-.056),l(-.187,-.037),l(-.336,.075),l(-.057,.13),l(-.111,.112),l(-.317,.187),l(-.188,.261),l(-.261,.224),l(-.057,.206),l(.243,.205),l(.056,.149),l(-.131,.206),l(-.261,-.019),l(-.149,-.056),l(-.149,-.206),l(-.112,-.056),l(-.187,-.075),l(-.224,-.037),l(-.225,.037),l(-.242,.075),l(-.299,.019),l(-.149,-.131),l(-.224,.075),l(-.188,.093),l(-.316,.056),l(-.188,-.056),l(-.037,-.205),l(-.112,-.131),l(-.168,-.131),l(-.13,.038),l(-.131,.075),l(-.168,0),l(-.299,.149),l(-.131,.149),l(-.168,0),l(-.094,-.187),l(-.13,-.075),l(-.206,0),l(-.224,.112),l(-.131,-.187),l(-.224,-.093),l(-.131,.112),l(-.354,.056),l(-.262,-.112),l(-.112,0),l(-.019,.205),l(-.168,.093),l(-.093,-.056),l(.056,-.224),l(-.243,-.038),l(-.187,-.056),l(-.541,.112),l(0,-.149),l(-.187,0),l(.019,-.224),l(-.28,-.037),l(-.242,.075),l(-.523,-.112),l(-.578,-.056),l(-.075,-.056),l(-.522,0),l(-.205,-.168),l(-.262,.019),l(-.522,-.093),l(-.467,.075),l(-.485,0),l(-.354,-.056),l(-.355,.056),l(-.354,.056),l(-.485,-.038),l(-.485,.019),l(-.205,.187),l(-.037,.168),l(-.374,.168),l(-.373,.206),l(-.112,-.112),l(-.261,0),l(-.374,-.019),l(-.037,.131),l(0,.045),l(-.126,-.137),l(.315,-.752),l(-.013,-.25),l(-.218,-.146),l(-.149,-.176),l(-.421,-.146),l(-.289,-.012),l(.128,-.292),l(.291,-.328),l(.571,-.244),l(.44,-.03),l(.263,-.208),l(.023,-.236),l(-.172,-.502),l(-.615,-1.5),l(-.16,-.302),
-N(400.125,81.146),l(.633,.305),l(.208,.207),l(.208,.37),l(-.038,.193),l(-.545,.563),l(.714,.176),l(.396,-.311),l(.527,-.119),l(.602,.028),l(.807,.176),l(.467,.354),l(.235,.752),l(-.077,.221),l(-.322,.414),l(-1.068,.473),l(-.767,.561),l(-.96,.237),l(1.223,.167),l(.501,.043),l(.354,-.104),l(.39,.117),l(-.066,.516),l(-.997,.308),l(.005,.199),l(-.479,-.084),l(-1.068,.443),l(-.879,-.142),l(-.293,-.048),l(-1.119,.211),l(-.587,-.211),l(-.598,.112),l(-1.584,.141),l(.137,.295),l(-.907,-.168),l(-.264,.168),l(-.911,-.337),l(-.334,.143),l(-.913,.089),l(-.093,.569),l(-.337,.316),l(-.37,.042),l(-.272,-.252),l(-.53,-.172),l(-.135,.151),l(-.527,-.077),l(-.948,.324),l(-.701,.552),l(-.326,-.231),l(-.775,-.147),l(1.2,-.472),l(.492,-.476),l(.447,-.097),l(.468,-.388),l(.118,-.485),l(.242,.063),l(.367,-.211),l(-.008,-.274),l(1.013,-.105),l(.76,.119),l(.927,.007),l(.073,-.338),l(.308,-.142),l(.321,-.556),l(-.939,.394),l(-.725,.016),l(-1.467,-.482),l(-1.866,-.055),l(-.399,-.191),l(-.156,-.162),l(.417,-.325),l(.983,-.194),l(.721,-.237),l(.38,-.384),l(.066,-.827),l(-.119,-.192),l(-.713,.046),l(-.34,-.044),l(.288,-.355),l(.387,-.223),l(.802,-.253),l(1.394,-.062),l(.922,-.076),l(-.316,-.548),l(.172,-.683),l(.253,-.461),l(-.045,-.312),l(-.834,.061),l(-.484,-.296),l(-.2,-.312),l(.309,-.507),l(.617,-.433),l(-.347,-.104),l(-.596,-.088),l(-.735,.3),l(-.476,.061),l(-.753,-.222),l(-.088,.194),l(-.222,.194),l(-.672,-.103),l(-.464,-.133),l(.1,-.343),l(.348,-.36),l(.604,-.706),l(-.293,-.134),l(-.305,-.39),l(.028,-.24),l(.304,-.106),l(.3,-.196),l(-.194,-.496),l(-.306,.076),l(-.636,.453),l(-.442,.031),l(-.526,.287),l(-.14,-.421),l(.302,-.527),l(.438,-.559),l(.065,-.257),l(-.417,-.195),l(-.196,-.045),l(-.218,.302),l(-.394,.257),l(-.493,-.165),l(.299,-.575),l(.54,-.455),l(.09,-.136),l(-.225,-.575),l(.366,-.092),l(.225,-.197),l(-.672,-.515),l(.432,-.351),l(.752,.151),l(.387,-.092),l(-.645,-.759),l(.975,-.169),l(-.457,-.502),l(.416,-.382),l(.924,.365),l(.824,-.093),l(.686,-.139),l(.867,-.047),l(.612,.014),l(.303,.259),l(-.307,.29),l(-1.726,.704),l(-.46,.274),l(-.218,.441),l(.222,.182),l(.784,.029),l(.877,-.078),l(.685,-.001),l(.53,.075),l(1.563,-.064),l(.458,.378),l(-.363,.425),l(-.212,.323),l(.098,.112),l(-.565,.66),l(-.226,.111),l(-.339,.437),l(-.696,.261),l(-.382,.038),l(.451,.186),l(.508,.167),l(-.116,.015),l(-.272,.19),l(-.61,.052),l(-.275,.196),l(-1.337,-.025),l(.404,.223),l(.302,0),l(.492,.093),l(.432,-.006),l(.519,-.223),l(.413,-.025),l(.449,.161),l(.656,.164),l(.673,.566),l(.496,.228),l(.118,.165),l(-.067,.238),l(.312,.78),l(.371,.536),l(.438,.189),l(.714,.107),l(.59,.549),l(.688,.593),l(.135,.52),l(-.188,.49),l(.257,.124),M(387.915,77.13),l(-.128,-.325),l(.149,-.335),l(.38,-.089),l(.079,.501),l(-.307,.251),l(-.173,-.003),M(386.786,80.184),l(-.178,-.272),l(-.967,.072),l(.123,-.256),l(-.364,-.15),l(-.26,-.257),l(-.335,-.107),l(-.253,.364),l(-.751,.257),l(-.778,-.192),l(-.401,-.278),l(-.101,-.278),l(.86,-.278),l(-.483,-.257),l(.817,-.107),l(.385,-.484),l(-.029,-.235),l(.449,-.09),l(.508,-.15),l(.781,-.077),l(.424,.044),l(.389,.104),l(.362,-.046),l(.218,.149),l(.519,.791),l(.047,.179),l(-.081,.298),l(.308,.446),l(-.155,.328),l(-.402,.328),l(-.354,.12),l(-.299,.038),
-N(578.943,106.217),l(-.41,-.375),l(-.466,-.098),l(-.663,0),l(-.196,-.27),l(-.27,-.147),l(-.147,-.344),l(-.564,.049),l(-.981,-.246),l(-.662,.074),l(-1.35,-.024),l(-.662,-.098),l(-.712,-.221),l(-.785,.147),l(-.761,0),l(-.858,.024),l(-.441,.27),l(-.54,-.098),l(-.908,-.196),l(-.735,-.246),l(-.761,-.27),l(-.589,-.074),l(-.688,.123),l(-.466,.368),l(-.245,.736),l(.024,.442),l(-.344,-.123),l(-.81,-.123),l(-.688,-.196),l(-.883,-.245),l(-.883,-.147),l(-.663,.098),l(-.736,.123),l(-.318,.368),l(-.393,.442),l(.044,.273),l(-.322,.031),l(-.377,.377),l(-.283,-.126),l(-.22,.063),l(-.346,.283),l(-.534,.471),l(-.755,.189),l(-.943,.377),l(-.282,.188),l(-.221,.472),l(-.439,.188),l(-.504,.44),l(.157,.409),l(-.125,.188),l(-.66,0),l(-.44,-.346),l(.062,-.283),l(-.062,-.283),l(-.44,-.314),l(-.346,0),l(-1.006,.094),l(-.691,.032),l(-.503,-.063),l(-.346,-1.069),l(-.221,-.817),l(-1.006,0),l(-.031,-.754),l(.188,-.409),l(.031,-1.038),l(-.66,.314),l(-.66,-1.006),l(-.597,-.22),l(-.724,-.723),l(-1.1,.409),l(-2.767,-.188),l(-2.578,.346),l(-2.012,-1.666),l(-5.722,-2.986),l(-5.658,1.289),l(-.056,8.174),l(-.158,-.014),l(-.341,.106),l(-.489,.043),l(-.447,-.255),l(-.638,-.703),l(-.256,-.511),l(-.617,-.383),l(-.681,-.383),l(-.512,-.234),l(-.979,.085),l(-1.277,.298),l(-.937,.532),l(-.529,.453),l(.092,-.399),l(-.06,-.18),l(-.12,-.12),l(.14,-.26),l(.2,-.2),l(.14,-.32),l(.04,-.3),l(.18,-.2),l(-.159,-.24),l(-.4,-.16),l(-.459,.06),l(-.18,-.16),l(-.3,.06),l(-.2,.04),l(-.199,-.18),l(-.221,-.32),l(-.319,-.28),l(-.34,0),l(-.359,.02),l(0,-.2),l(.08,-.28),l(-.2,-.379),l(-.239,-.12),l(-.2,-.24),l(-.399,-.799),l(-.08,-.28),l(-.56,-.12),l(-.699,-.08),l(-.14,-.16),l(.02,-.439),l(.16,-.12),l(.3,-.06),l(.399,.02),l(.34,.02),l(.479,.14),l(.539,.18),l(.18,-.08),l(.36,-.08),l(-.2,-.16),l(-.26,-.12),l(-.399,-.2),l(-.2,-.24),l(.26,-.36),l(.28,-.04),l(.08,-.26),l(.18,-.299),l(.12,-.14),l(.26,.04),l(.319,-.08),l(.16,-.1),l(.339,.12),l(.24,0),l(1.119,-.04),l(.999,.14),l(.499,.02),l(-.159,-.08),l(-.34,-.2),l(-.479,-.12),l(-.021,-.3),l(.2,-.2),l(.279,-.22),l(.221,-.28),l(.119,-.52),l(.12,-.28),l(-.16,-.24),l(-.14,-.16),l(.1,-.2),l(.26,-.2),l(-.119,-.12),l(-.101,-.3),l(-.359,-.12),l(-.359,-.04),l(-.68,-.1),l(-.2,.16),l(-.199,.08),l(-.52,.08),l(-.46,-.12),l(-.319,-.26),l(-.26,-.06),l(-.68,-.12),l(-.56,.06),l(-.659,.319),l(-.42,.02),l(-.799,.5),l(-.72,.28),l(-.499,.06),l(-.42,-.02),l(-.279,.24),l(-.213,.18),l(-.616,-.19),l(-.857,-.377),l(-.068,-.308),l(.343,-.103),l(.309,.103),l(.445,.103),l(.138,-.103),l(-.96,-1.131),l(-.343,-.514),l(-.479,-.206),l(-.515,-.445),l(-.514,-.034),l(-.343,.034),l(-.583,-.206),l(-.103,.343),l(-.514,-.514),l(.068,-.309),l(-.138,-.377),l(-1.37,-.343),l(.65,-1.165),l(.446,-.274),l(.239,-.206),l(-.239,-.274),l(-.343,-.171),l(.205,-1.303),l(.823,-.137),l(.343,-.549),l(.103,-.308),l(.411,-.069),l(.514,.24),l(.48,.548),l(.514,.411),l(.651,0),l(.411,-.24),l(.068,-.446),l(-.171,-.411),l(-.068,-.445),l(.479,-.206),l(.891,-.411),l(.172,-.24),l(.309,-.309),l(.514,-.171),l(.549,-.068),l(.788,-.377),l(.548,-.343),l(.515,-.309),l(.651,.069),l(.479,0),l(.309,.274),l(.651,-.137),l(.273,-.137),l(.617,-.24),l(.411,.069),l(.411,.514),l(.788,.035),l(.617,-.069),l(.96,.171),l(0,.343),l(.582,.206),l(.789,.343),l(.411,.274),l(.068,.583),l(.274,.137),l(.239,-.274),l(-.205,-.48),l(-.034,-.24),l(.72,.068),l(.582,.548),l(.686,.137),l(.411,.24),l(.686,-.171),l(.274,-.274),l(.377,-.343),l(.514,-.377),l(.823,.068),l(.65,.035),l(.651,.411),l(.617,-.068),l(.137,-.412),l(1.062,-.103),l(.754,.103),l(.274,.548),l(.926,.309),l(.754,.137),l(.411,.171),l(.651,-.343),l(.171,-.309),l(.24,0),l(.343,.343),l(.959,.034),l(1.577,-.411),l(.137,-.309),l(.138,-.686),l(-.24,-.24),l(-1.165,-.171),l(-.274,-.308),l(-.651,-.069),l(-.377,-.137),l(.068,-.171),l(-.377,-.137),l(-.239,0),l(-.164,-.274),l(.467,-.067),l(.735,-.368),l(.588,-.147),l(.331,-.294),l(-.441,-.478),l(-.146,-.257),l(.662,-.515),l(.698,-.184),l(1.103,.147),l(.515,-.073),l(.11,-.257),l(-.956,-.294),l(-1.065,-.11),l(0,-.331),l(.294,-.074),l(-.294,-.221),l(-.074,-.441),l(.185,-.515),l(.33,-.074),l(1.066,.147),l(.515,0),l(.772,0),l(.368,-.184),l(1.396,-.405),l(1.029,-.037),l(.735,-.11),l(1.545,-.11),l(.588,-.073),l(.331,.073),l(.221,-.331),l(.625,-.331),l(1.177,-.037),l(2.021,-.405),l(1.876,-.073),l(.625,-.074),l(.367,-.368),V(0,77.39),l(.515,-.037),l(.589,-.184),l(.11,-.221),l(.735,-.037),l(.919,.147),l(.515,.11),l(.772,.257),l(.625,-.11),l(.882,-.037),l(.368,.404),l(-.037,.331),l(.147,.221),l(.515,.22),l(-.11,.331),l(-.147,.257),l(.073,.331),l(-.33,.037),l(.184,.257),l(.478,.074),l(.295,-.147),l(.44,.11),l(.368,-.147),l(.367,.074),l(.331,-.221),l(.294,.11),l(.295,.368),l(.367,.221),l(.147,-.147),l(.184,-.147),l(.478,.037),l(.405,.294),l(.478,.11),l(.441,-.221),l(.367,0),l(-.146,.294),l(-.441,.184),l(-.331,.441),l(.331,.184),l(.441,-.11),l(.771,-.073),l(.441,.037),l(.552,.184),l(.294,-.294),l(.772,-.441),l(1.103,-.257),l(.956,-.515),l(.772,-.221),l(.515,-.22),l(.809,-.074),l(0,.441),l(-.515,.11),l(-.11,.368),l(1.104,.588),l(.809,.294),l(1.287,.772),l(1.066,1.029),l(1.69,2.133),l(.846,.882),l(1.104,1.434),l(.515,-.257),l(.331,-.257),l(.367,-.515),l(.92,0),l(.367,.331),l(0,.368),l(.478,0),l(.258,.257),l(.184,.184),l(.589,0),l(.992,0),l(.993,-.221),l(.771,-.221),l(.993,-.037),l(.698,.441),l(.772,.588),l(.331,.625),l(.956,.147),l(.588,.552),l(.662,.699),l(.882,.073),l(.993,.074),l(.478,-.368),l(.625,-.184),l(-.073,.331),l(.441,.331),l(.294,.478),l(.589,0),l(.064,.145),l(-.551,.034),l(-.542,.148),l(-.279,.262),l(-.011,.275),l(-.035,.478),l(-.306,.219),l(-.289,.06),l(-1.199,.093),l(-.428,.277),l(-.34,.581),l(.097,.75),l(.213,.707),l(-.157,.39),l(-.444,.392),l(-.417,.103),l(-.718,.062),l(-1.402,-.079),l(-.594,-.141),l(-.721,-.141),l(-1.096,-.254),l(-.427,.507),l(-.516,1.141),L(584.2,97.43),l(-.286,.605),l(-.137,.418),l(.622,.514),l(.126,.286),l(-.156,.245),l(-.231,.145),l(-.394,.074),l(-1.133,-.238),l(-.5,-.184),l(-.35,.06),l(-1.082,.207),l(-1.799,.254),l(-.393,.188),l(-.215,.302),l(-.068,.215),l(.232,.185),l(.366,-.06),l(.483,.141),l(.03,1.357),l(.345,.627),l(.29,.441),l(.119,.47),l(-.222,.33),l(-.705,.546),l(-.32,.401),l(-.02,.399),l(.139,.86),
-N(386.786,80.184),l(-.304,.038),l(-.223,.09),l(.241,.252),l(.361,.771),l(.287,1.213),l(-.061,.281),l(-.359,.341),l(-.242,.414),l(-.145,.473),l(-.185,.044),l(-.284,-.058),l(-.616,.031),l(-.15,.212),l(-.913,.042),l(-.84,.132),l(-.247,.144),l(-.661,.286),l(-.903,.498),l(-.628,.035),l(-.879,.283),l(-1.28,.084),l(.053,-.378),l(-.089,-.441),l(-.848,.1),l(-.171,-.487),l(.734,-.254),l(-1.186,-.021),l(.062,-.233),l(1.286,.027),l(.198,-.104),l(.039,-.222),l(.107,-.31),l(.515,-.134),l(.692,-.031),l(.13,-.281),l(-1.07,.099),l(.387,-.437),l(-.187,-.159),l(.481,-.468),l(.694,-.011),l(.163,-.089),l(-.174,-.311),l(-.348,.177),l(-.309,-.131),l(-.319,.03),l(-.391,-.177),l(-.414,.001),l(-.182,.106),L(378,81.478),l(.309,-.306),l(-.29,-.142),l(.759,-.126),l(-.139,-.301),l(.391,-.235),l(-.481,-.214),l(-.59,.128),L(378,79.792),l(.38,-.268),l(.215,-.16),l(.928,.187),l(.336,-.075),l(.527,.038),l(1.102,.123),l(-.214,-.358),L(382.132,79),l(.198,-.321),l(-1.373,0),l(.154,-.15),l(.569,-.107),l(.061,-.29),l(.291,-.479),l(.505,-.181),l(.804,-.169),l(.22,.302),l(.354,.149),l(.156,-.031),l(.029,.235),l(-.385,.484),l(-.817,.107),l(.483,.257),l(-.86,.278),l(.101,.278),l(.401,.278),l(.778,.192),l(.751,-.257),l(.253,-.364),l(.335,.107),l(.26,.257),l(.364,.15),l(-.123,.256),l(.967,-.072),l(.178,.272),
-N(452.998,85.535),V(0,85.49),l(.037,-.131),l(.374,.019),l(.261,0),l(.112,.112),l(.373,-.206),l(.374,-.168),l(.037,-.168),l(.205,-.187),l(.485,-.019),l(.485,.038),l(.354,-.056),l(.355,-.056),l(.354,.056),l(.485,0),l(.467,-.075),l(.522,.093),l(.262,-.019),l(.205,.168),l(.522,0),l(.075,.056),l(.578,.056),l(.523,.112),l(.242,-.075),l(.28,.037),l(-.019,.224),l(.187,0),l(0,.149),l(.541,-.112),l(.187,.056),l(.243,.038),l(-.056,.224),l(.093,.056),l(.168,-.093),l(.019,-.205),l(.112,0),l(.262,.112),l(.354,-.056),l(.131,-.112),l(.224,.093),l(.131,.187),l(.224,-.112),l(.206,0),l(.13,.075),l(.094,.187),l(.168,0),l(.131,-.149),l(.299,-.149),l(.168,0),l(.131,-.075),l(.13,-.038),l(.168,.131),l(.112,.131),l(.037,.205),l(.188,.056),l(.316,-.056),l(.188,-.093),l(.224,-.075),l(.149,.131),l(.299,-.019),l(.242,-.075),l(.225,-.037),l(.224,.037),l(.187,.075),l(.112,.056),l(.149,.206),l(.149,.056),l(.261,.019),l(.131,-.206),l(-.056,-.149),l(-.243,-.205),l(.057,-.206),l(.261,-.224),l(.188,-.261),l(.317,-.187),l(.111,-.112),l(.057,-.13),l(.336,-.075),l(.187,.037),l(.205,.056),l(.112,-.131),l(.522,-.056),l(.519,.005),l(.357,.089),l(.469,.022),l(.313,-.156),l(.179,-.291),l(.134,-.268),l(.536,.246),l(.536,-.022),l(.67,-.223),l(.692,.112),l(.514,-.134),l(.201,.268),l(.312,.134),l(.246,.335),l(.134,.201),l(.246,.156),l(.312,.156),l(0,.268),l(-.312,-.022),l(-.312,.134),l(.134,.291),l(.111,.357),l(.269,.29),l(.647,0),l(.156,.112),l(.514,-.067),l(.38,.022),l(0,.312),l(.402,0),l(0,.357),l(.224,.268),l(.089,.246),l(-.089,.179),l(.089,.224),l(.179,.089),l(.291,.29),l(.268,-.179),l(.47,-.067),l(.268,.067),l(.469,.291),l(.201,-.067),l(.179,.022),l(.179,.156),l(.425,-.112),l(.312,-.112),l(.269,0),l(.536,-.134),l(.357,-.067),l(.111,.156),l(.268,.179),l(0,.134),l(.201,.179),l(.022,.134),l(.402,.044),l(.179,.179),l(.224,.112),l(.29,-.134),l(.045,-.157),l(.224,-.067),l(.29,.268),l(.425,.067),l(.469,.112),l(.268,.112),l(.357,-.067),l(.201,.179),l(.291,.089),l(.469,.022),l(.111,.224),l(.357,.156),l(.269,0),l(.134,-.044),l(.201,-.089),l(.156,.089),l(-.089,.111),l(-.022,.179),l(.111,.089),l(.09,.179),l(-.045,.224),l(-.201,.089),l(-.156,.067),l(-.357,.201),l(-.312,.044),l(.223,.246),l(.269,.089),l(.29,.044),l(-.134,.156),l(-.312,0),l(-.246,0),l(-.045,.179),l(-.044,.224),l(.156,.067),l(.179,.067),l(.044,.134),l(.045,.179),l(.09,.201),l(.066,.067),l(-.156,.491),l(-.156,.291),l(0,.156),l(-.335,.134),l(-.805,-.157),l(-.736,.045),l(-.269,0),l(-.022,.179),l(-.223,.179),l(-.38,.134),l(-.357,.022),l(-.224,.089),l(-.09,.514),l(0,.224),l(-.021,.112),l(-.012,.126),l(-.779,.104),l(-.971,.06),l(-.511,.405),l(-.729,.189),l(-1.135,.075),l(-1.119,.248),l(-.502,.318),l(-.463,.059),l(-.453,-.316),l(-.369,.621),l(-.31,.188),l(-.477,.044),l(-.438,-.057),l(-.959,.031),l(-.5,.16),l(.641,.287),l(1.957,1.004),l(.053,.172),l(-.093,.188),l(.163,.244),l(.562,.042),l(.511,-.13),l(.675,-.146),l(1.052,.013),l(.439,.114),l(-.235,.259),l(-.106,.245),l(-.228,.144),l(-.578,.116),l(-.31,.029),l(-.591,-.157),l(-.473,.044),l(-.71,.489),l(-1.007,.045),l(-.538,.188),l(-.527,.488),l(-.269,.101),l(-.786,-.07),l(-.588,-.171),l(.364,-.746),l(-.096,-.416),l(-.264,-.287),l(-.854,-.286),l(-.193,-.014),l(-.629,.016),l(-.151,.043),l(-.16,-.187),l(.887,-.505),l(.644,-.261),l(.772,-.188),l(.221,-.116),l(-.246,-.46),l(-.435,-.071),l(-.799,.044),l(-1.015,.045),l(-.698,-.1),l(-.195,-.101),l(-.418,-.432),l(.584,-.405),l(-.528,-.605),l(-.378,.361),l(-.541,.001),l(-1.001,.146),l(-.565,.131),l(-.694,.722),l(-1.003,.867),l(-.754,.203),l(-.223,.044),l(-.287,.504),l(.079,.158),l(.178,.093),l(-.706,-.131),l(-.665,.261),l(-.457,0),l(-.033,.189),l(-.609,-.047),l(-.398,-.166),l(-.119,-.249),l(-.15,.02),l(.055,-.077),l(.102,-.025),l(.126,.013),l(.113,.013),l(.189,0),l(.088,-.114),l(0,-.088),l(-.063,-.113),l(.025,-.113),l(.126,-.063),l(.051,-.063),l(.075,-.013),l(.089,-.025),l(.088,-.063),l(.089,-.088),l(.024,-.126),l(-.013,-.114),l(.14,-.013),l(.29,-.063),l(.075,-.076),l(-.025,-.088),l(-.062,-.088),l(.126,-.114),l(.037,-.063),l(-.012,-.088),l(-.114,-.113),l(.051,-.101),l(-.088,-.151),l(-.063,-.101),l(.202,-.151),l(.239,-.025),l(.126,-.088),l(.113,.025),l(.013,.088),l(-.013,.214),l(.063,.013),l(.113,0),V(0,96.92),l(-.013,-.063),l(.101,.038),l(.063,.051),l(.025,-.076),l(.075,-.038),l(.139,-.012),l(0,.075),l(.089,.063),l(.075,0),l(.126,.164),l(.076,-.076),l(.075,-.076),l(.013,-.05),l(.101,-.025),l(.177,0),l(-.037,.189),l(.176,.025),l(.038,-.038),l(.038,-.038),l(.139,.013),l(.227,0),l(.038,-.025),l(.075,-.076),l(-.126,-.013),l(-.164,-.126),l(-.101,-.051),l(-.075,-.05),l(.013,-.038),l(.101,-.063),l(-.025,-.113),l(.038,-.101),l(-.013,-.126),l(-.051,-.139),l(-.101,-.063),l(-.177,-.076),l(-.075,0),l(-.151,-.126),l(-.151,-.063),l(-.151,-.038),l(.051,-.151),l(.037,-.088),l(-.037,-.051),l(-.127,.038),l(-.062,-.114),l(.113,-.038),l(-.013,-.189),l(.089,-.075),l(-.025,-.101),l(-.038,-.088),l(-.113,0),l(-.102,.05),l(-.088,.051),l(-.113,-.088),l(-.089,-.101),l(-.188,-.101),l(-.139,-.025),l(-.102,-.139),l(-.05,-.139),l(.177,-.139),l(0,-.189),l(.024,-.114),l(.051,-.05),l(-.126,-.063),l(.164,-.151),l(-.113,-.025),l(-.076,-.063),l(-.062,-.126),l(-.14,-.013),l(-.062,.101),l(-.126,-.025),l(-.215,-.025),l(-.126,-.189),l(-.05,-.189),l(-.417,-.075),l(-.277,.012),l(-.062,.051),l(-.076,.101),l(-.062,-.05),l(0,-.076),l(-.089,-.025),l(-.101,.038),l(.038,-.05),l(.088,-.101),l(-.025,-.063),l(-.113,0),l(-.177,.038),l(-.126,-.025),l(-.101,.013),l(-.076,-.076),l(-.05,-.063),l(-.101,-.063),l(-.151,-.013),l(-.139,-.05),l(-.14,-.126),l(-.214,-.088),l(-.038,-.013),l(-.126,.025),l(-.05,.025),l(-.114,-.051),l(-.088,-.025),l(-.139,.025),l(-.177,.051),l(-.177,-.025),l(-.062,.038),l(-.126,.114),l(-.202,0),l(-.265,-.038),l(-.126,.051),l(-.315,-.114),l(-.088,.101),l(.012,.113),l(-.126,0),l(-.075,-.063),l(-.126,.114),l(-.06,.052),l(-.634,.08),l(-.151,.311),l(-.278,.178),l(-1.992,.191),l(-.186,.215),l(-.243,.119),l(-.339,.06),l(-.188,-.227),l(-.327,.004),l(-.025,-.231),l(-.363,.045),l(-1.115,-.066),l(-.958,-.193),l(-.241,.107),l(-.787,-.121),l(-.136,.085),l(-.678,-.387),l(-.554,-.2),l(-.668,-.301),l(-.166,.015),l(1.047,-1.471),l(.653,.018),l(-.349,-.383),l(-.044,-.552),l(.082,-.306),l(1.509,-1.218),l(.599,-.398),l(.286,-.181),l(.429,-.013),l(.255,-.24),l(.009,-.314),l(-.328,-.302),l(.085,-.133),l(.298,-.048),l(-.316,-.193),l(-.816,-.835),l(.074,-.242),l(-.161,-.175),
-N(660.044,89.132),l(-.295,.31),l(-.687,1.207),l(-1.224,1.959),l(-.381,.58),l(.269,.836),l(.051,.029),l(.342,-.045),l(.929,-.395),l(.754,-.062),l(.576,-.018),l(.317,.085),l(.431,.416),l(.292,.07),l(1.191,-.786),l(.438,-.002),l(.928,.212),l(.538,.199),l(.797,.5),l(.879,.99),l(.599,.501),l(.048,.273),l(-.107,.217),l(-.414,.218),l(-.464,-.127),l(-1.074,-.008),l(-.432,-.099),l(-.854,.033),l(-.937,.221),l(-.539,.146),l(-.831,.278),l(-.353,.189),l(-.483,-.127),l(-.464,.045),l(-.47,.204),l(-.363,.333),l(-.312,.82),l(-.241,.216),l(-.347,.188),l(-.638,.248),l(-.896,.134),l(-.624,-.054),l(-.438,-.012),l(-.224,-.013),l(-1.192,.91),l(-.742,.433),l(-.744,.047),l(-.982,.005),l(-.592,-.125),l(-.668,-.382),l(-.718,-.154),l(-.316,.073),l(-.457,.231),l(-.539,.589),l(-.214,.401),l(.003,.343),l(.389,.569),l(.599,.411),l(.188,.228),l(-.123,.271),l(-.326,.259),l(-1.265,.292),l(-.67,.389),l(-1.111,1.046),l(-.265,.172),l(-1.941,.737),l(-.651,.061),l(-.987,-.08),l(-1.514,.065),l(-1.339,.007),l(-1.204,.349),l(-.816,.289),l(-.736,.274),l(-.303,.101),l(-1.44,.534),l(-.686,.289),l(-.481,.017),l(-.433,-.197),l(-.253,-.297),l(-.61,-.067),l(-.663,.061),l(-.929,-.123),l(-1.599,-.433),l(-1.006,-.365),l(-.815,-.551),l(-.521,-.168),l(-1.69,-.119),l(-1.164,-.022),l(-.937,-.023),l(-2.861,.059),l(-1.165,-.022),l(-.802,-.109),l(-1.241,-.207),l(-1.979,-.018),l(-.444,-.254),l(-.467,-.439),l(-1.571,-2.161),l(-.105,-.542),l(-.744,-.096),l(-.839,-.31),l(-1.645,-.806),l(-.632,-.268),l(-.998,-.224),l(-.668,-.083),l(-.995,-.038),l(-1.505,-.021),l(-1.062,-.181),l(-.724,-.312),l(-.233,-.229),l(-.105,-.43),l(.035,-.129),l(.369,-.347),l(.214,-.389),l(.237,-.75),l(.215,-.447),l(-.401,-.66),l(-1.07,-1.451),l(-.568,-.618),l(-.354,-.143),l(-.633,-.144),l(-.731,-.167),l(-.614,-.069),l(-.834,-.415),l(-1.301,-.745),l(-.371,-.433),l(-.24,-.563),l(-.131,-.405),l(-.062,-.145),l(.154,-.044),l(.799,-.425),l(.599,-.207),l(1.387,-.08),l(.603,-.148),l(.727,-.381),l(.017,-.012),l(.971,-.692),l(.787,-.398),l(1.143,-.341),l(1.512,-.476),l(.84,-.18),l(.953,.097),l(.932,.156),l(1.842,.122),l(.831,.083),l(.694,.755),l(.393,.406),l(.699,.113),l(1.458,-.008),l(.719,.083),l(.85,-.004),l(.875,.068),l(.312,.114),l(.576,.186),l(.562,-.018),l(.755,-.28),l(.31,-.162),l(.744,-.572),l(.163,-.526),l(-.116,-.204),l(-.396,-.304),l(-.409,-.86),l(.098,-.293),l(.905,-.839),l(1.269,-.96),l(.84,.201),l(1.028,.098),l(1.036,.185),l(1.748,.328),l(.702,.231),l(.989,.317),l(.767,.143),l(.145,.204),l(.004,.541),l(.182,.481),l(.408,.451),l(.421,.333),l(1.643,.531),l(.673,.113),l(2.48,-.538),l(.796,-.077),l(1.172,.037),l(1.423,.022),l(.769,.229),l(1.333,.75),l(.623,.331),l(1.132,.313),l(.812,.373),l(1.318,.254),l(.905,.241),l(.984,.082),l(.739,.039),l(1.602,-.11),l(1.018,-.063),l(.532,-.075),l(.867,-.106),l(1.147,-.136),l(.526,-.163),l(.604,-.264),l(.447,-.394),l(.755,-.498),l(1.165,-.487),l(.333,-.002),l(.609,-.047),l(.74,.156),l(.751,.506),l(.34,.129),l(.86,.169),l(1.228,-.297),l(.622,-.018),l(.431,.168),
-N(406.183,86.551),l(1.051,-.494),l(.485,-.089),l(.574,.087),l(.465,-.016),l(.209,-.147),l(.477,.098),l(.407,.042),l(.52,-.034),l(-.025,-.157),l(.307,.012),l(.307,0),l(.267,-.182),l(.313,.242),l(.173,-.121),l(.228,.061),l(.292,.375),l(.535,-.109),l(.754,.375),l(-.11,.423),l(-.172,.097),l(.001,.338),l(.672,-.024),l(.344,.177),l(.282,.365),l(.038,.468),l(-.422,.376),l(-.225,-.072),l(-.142,.08),l(-.245,.147),l(-.213,.322),l(.017,.327),l(.31,.204),l(-.136,.348),l(-.079,-.114),l(-.694,.174),l(-.127,-.228),l(-.371,-.204),l(-.341,-.192),l(-.529,-.048),l(.039,-.228),l(-.146,-.18),l(.119,-.373),l(-.245,.072),l(-.193,.313),l(-.446,.035),l(-.406,.075),l(-.285,-.122),l(.072,-.198),l(-.091,-.175),l(.159,-.241),l(-.375,-.168),l(-.576,-.048),l(-.259,.012),l(-.159,-.301),l(-.518,.012),l(-.194,-.133),l(-.202,-.458),l(-.153,-.17),l(-.41,.208),l(-.141,.071),l(-.266,-.127),l(-.311,-.335),l(-.208,-.447),
-N(438.22,91.952),l(.039,-.044),l(.065,-.105),l(.014,-.131),l(.092,-.066),l(.146,-.119),l(.026,-.04),l(.171,-.053),l(.093,-.026),l(.092,.053),l(.132,.053),l(.158,0),l(.065,-.026),l(.093,0),l(.065,.026),l(.065,.026),l(.093,-.026),l(.145,-.04),l(.132,0),l(.118,-.053),l(.079,-.053),l(.066,-.026),l(.105,-.026),l(.039,0),l(.053,-.079),l(.04,-.092),l(.079,-.079),l(.092,.026),l(.105,-.04),l(.145,-.066),l(.053,-.105),l(.053,-.079),l(.026,-.132),l(.026,-.092),l(.053,-.092),l(.118,-.013),l(.105,-.013),l(.132,-.079),l(.119,-.053),l(.118,-.092),l(.053,-.079),l(.132,-.066),l(.065,-.04),L(442,89.998),l(.145,.013),l(.105,.026),l(.066,-.04),l(.065,-.066),l(.071,.012),l(.285,.041),l(.03,.228),l(.43,-.048),l(.183,-.24),l(.193,.016),l(.062,-.112),l(.261,-.024),l(.194,.24),l(.073,.169),l(.331,-.025),l(.066,.18),l(-.026,.083),l(.003,.204),l(.389,-.083),l(.18,.12),l(.149,-.135),l(.104,-.177),l(.558,-.204),l(.168,.056),l(.483,-.046),l(.46,.254),l(.373,-.18),l(.073,-.137),l(.508,.041),l(.561,-.076),l(.129,.13),l(.703,.186),l(.104,.216),l(.424,.101),l(.831,.33),l(-1.047,1.471),l(-.629,.076),l(-.437,-.143),l(-.534,-.359),l(-1.062,.035),l(-.717,.047),l(-1.024,.759),L(444.857,93),l(-.59,-.072),l(-.499,.061),l(-.761,.134),l(-.255,.001),l(-.334,.568),l(-1.651,-.036),l(-.414,-.027),l(-.617,-.17),l(-.399,-.172),l(-.245,.146),l(-.761,-.547),l(-.155,-.26),l(.097,-.581),l(-.053,-.093),
-N(442.391,98.111),l(-.589,.203),l(-.433,.031),l(-.668,.047),l(-.58,-.098),l(-1.116,-.671),l(-1.412,-.612),l(-.215,-.197),l(-.364,-.333),l(-.304,-.59),l(.346,-.299),l(.154,-.294),l(-.204,-.188),l(.04,-.375),l(.409,-.062),l(.157,-.206),l(-.136,-.196),l(-.452,-.063),l(.223,-.197),l(.325,0),l(.164,.134),l(.701,-.054),l(.019,-.367),l(.636,-.291),l(.245,-.146),l(.399,.172),l(.617,.17),l(.414,.027),l(1.651,.036),l(.334,-.568),l(.255,-.001),l(.761,-.134),l(.499,-.061),l(.59,.072),l(.427,-.063),l(1.024,-.759),l(.717,-.047),l(1.062,-.035),l(.534,.359),l(.437,.143),l(.629,-.076),l(.166,-.015),l(.668,.301),l(.554,.2),l(.678,.387),l(-.45,.338),l(-1.125,.267),l(-.581,.408),l(-.968,1.451),l(-.63,.84),l(-.753,.567),l(-.361,.16),l(-.724,.047),l(-.264,.103),l(-.176,-.002),l(-.907,-.067),l(-.889,.077),l(-1.535,.529),
-N(459.717,92.836),l(.06,-.052),l(.126,-.114),l(.075,.063),l(.126,0),l(-.012,-.113),l(.088,-.101),l(.315,.114),l(.126,-.051),l(.265,.038),l(.202,0),l(.126,-.114),l(.062,-.038),l(.177,.025),l(.177,-.051),l(.139,-.025),l(.088,.025),l(.114,.051),l(.05,-.025),l(.126,-.025),l(.038,.013),l(.214,.088),l(.14,.126),l(.139,.05),l(.151,.013),l(.101,.063),l(.05,.063),l(.076,.076),l(.101,-.013),l(.126,.025),l(.177,-.038),l(.113,0),l(.025,.063),l(-.088,.101),l(-.038,.05),l(.101,-.038),l(.089,.025),l(0,.076),l(.062,.05),l(.076,-.101),l(.062,-.051),l(.277,-.012),l(.417,.075),l(.05,.189),l(.126,.189),l(.215,.025),l(.126,.025),l(.062,-.101),l(.14,.013),l(.062,.126),l(.076,.063),l(.113,.025),l(-.164,.151),l(.126,.063),l(-.051,.05),l(-.024,.114),l(0,.189),l(-.177,.139),l(.05,.139),l(.102,.139),l(.139,.025),l(.188,.101),l(.089,.101),l(.113,.088),l(.088,-.051),l(.102,-.05),l(.113,0),l(.038,.088),l(.025,.101),l(-.089,.075),l(.013,.189),l(-.113,.038),l(.062,.114),l(.127,-.038),l(.037,.051),l(-.037,.088),l(-.051,.151),l(.151,.038),l(.151,.063),l(.151,.126),l(.075,0),l(.177,.076),l(.101,.063),l(.051,.139),l(.013,.126),l(-.038,.101),l(.025,.113),l(-.101,.063),l(-.013,.038),l(.075,.05),l(.101,.051),l(.164,.126),l(.126,.013),l(-.075,.076),l(-.038,.025),l(-.227,0),l(-.139,-.013),l(-.038,.038),l(-.038,.038),l(-.176,-.025),l(.037,-.189),l(-.177,0),l(-.101,.025),l(-.013,.05),l(-.075,.076),l(-.076,.076),l(-.126,-.164),l(-.075,0),l(-.089,-.063),l(0,-.075),l(-.139,.012),l(-.075,.038),l(-.025,.076),l(-.063,-.051),l(-.101,-.038),l(.013,.063),l(0,.088),l(-.113,0),l(-.063,-.013),l(.013,-.214),l(-.013,-.088),l(-.113,-.025),l(-.126,.088),l(-.239,.025),l(-.202,.151),l(.063,.101),l(.088,.151),l(-.051,.101),l(.114,.113),l(.012,.088),l(-.037,.063),l(-.126,.114),l(.062,.088),l(.025,.088),l(-.075,.076),l(-.29,.063),l(-.14,.013),l(.013,.114),l(-.024,.126),l(-.089,.088),l(-.088,.063),l(-.089,.025),l(-.075,.013),l(-.051,.063),l(-.126,.063),l(-.025,.113),l(.063,.113),l(0,.088),l(-.088,.114),l(-.189,0),l(-.113,-.013),l(-.126,-.013),l(-.102,.025),l(-.055,.077),l(-.03,.004),l(-.062,-.237),l(-.218,-.106),l(.16,-.071),l(-.021,-.267),l(-.104,-.561),l(.323,-.978),l(.027,-.404),l(-.353,-.856),l(-.604,-.286),l(-1.037,-1.119),L(460.567,93),l(-.626,-.191),l(-.225,.028),
-N(445.722,97.573),l(.176,.002),l(.264,-.103),l(.724,-.047),l(.361,-.16),l(.753,-.567),l(.63,-.84),l(.968,-1.451),l(.581,-.408),l(1.125,-.267),l(.45,-.338),l(.136,-.085),l(.787,.121),l(.241,-.107),l(.958,.193),l(1.115,.066),l(.363,-.045),l(.025,.231),l(.327,-.004),l(.188,.227),l(.339,-.06),l(.243,-.119),l(.186,-.215),l(1.992,-.191),l(.278,-.178),l(.151,-.311),l(.634,-.08),l(.225,-.028),L(460.567,93),l(.767,1.17),l(1.037,1.119),l(.604,.286),l(.353,.856),l(-.027,.404),l(-.323,.978),l(.104,.561),l(.021,.267),l(-.16,.071),l(.218,.106),l(.062,.237),l(.03,-.004),l(.15,-.02),l(.119,.249),l(.398,.166),l(.609,.047),l(.033,-.189),l(.457,0),l(.665,-.261),l(.706,.131),l(.149,.079),l(.062,.259),l(-.293,.446),l(-.27,.316),l(-.436,.044),l(-.382,.043),l(-.382,.245),l(-.515,.617),l(-.252,.645),l(-.096,.787),l(-.044,.223),l(-.671,-.12),l(-1.346,-.336),l(-.514,-.226),l(-.295,-.042),l(-.671,-.369),l(-.562,-.04),l(-.618,.218),l(-1.904,.771),l(-.38,.059),l(-1.385,-.35),l(-.3,-.013),l(-.69,.261),l(-.34,.031),l(-1.151,-.395),l(-.506,-.002),l(-.771,.189),l(-.266,.023),l(-.048,-.189),l(.234,-.318),l(-.352,-.106),l(-.392,-.204),l(-.418,-.186),l(-.146,-.33),l(.32,-.201),l(.351,.012),l(-.114,-.13),l(-.625,-.248),l(-.253,.13),l(-.215,.283),l(-.147,.118),l(-.414,-.239),l(-.194,-.139),l(-.594,-.059),l(-.02,-.189),l(-.234,0),l(-.245,-.036),l(-.052,-.165),l(.178,-.094),l(.271,-.071),l(-.239,-.083),l(-.183,-.059),l(.124,-.146),l(.19,-.127),l(-.069,-.142),l(-.306,-.118),l(-.555,-.141),l(-.712,-.471),l(.058,-.088),l(-.104,-.119),l(.075,-.356),l(-.202,-.036),l(-.19,-.237),l(-.569,-.178),l(-.054,-.309),
-N(420.177,113.472),l(-.274,-.042),l(-.253,-.155),l(-.367,-.325),l(-.096,-.213),l(.202,-.738),l(.097,-.681),l(-.046,-.583),l(-.133,-.569),l(-.503,-.44),l(-.094,-.271),l(.181,-.157),l(.366,-.015),l(.801,-.001),l(.339,-.172),l(.861,-.543),l(.633,.625),l(.451,.754),l(-.014,.271),l(-.204,.285),l(-.145,.484),l(.149,.894),l(-.11,.525),l(-.377,.695),l(-.405,-.198),l(-.52,.03),l(-.143,.1),l(-.149,.27),l(-.248,.17),M(433.783,118.446),l(-.712,-.084),l(-.902,-.607),l(-.772,-.239),l(-1.904,-.817),l(-.833,-.126),l(-.232,-.127),l(-.173,-.283),l(.139,-.34),l(.328,-.34),l(.264,-.1),l(.629,.112),l(.569,-.341),l(.68,.424),l(.403,.141),l(.722,-.016),l(1.403,-.187),l(1.38,-.329),l(.148,.085),l(.043,.127),l(-.112,.127),l(-.536,.823),l(-.153,.497),l(.009,.382),l(.411,.509),l(-.179,.128),l(-.43,.567),l(-.188,.015),M(431.244,98.829),l(-.281,-.329),l(-.242,-.027),l(-.281,.196),l(-.156,-.125),l(-.47,-.071),l(-.114,.32),l(-.458,.054),l(-1.001,.364),l(.078,-.151),l(-.452,.133),l(-.063,.249),l(-.157,.044),l(-.01,.125),l(.303,.08),l(.021,.302),l(.193,.119),l(.253,.236),l(-.104,.213),l(-.449,.254),l(.016,.272),l(.143,.554),l(.783,.814),l(2.008,.889),l(.29,.357),l(.134,.558),l(.274,.557),l(.395,.585),l(.694,.57),l(.254,.274),l(.446,.195),l(.041,.21),l(.408,.167),l(1.17,.255),l(1.254,-.105),l(.388,.141),l(.024,.212),l(-.465,.247),l(-.258,.294),l(.262,.213),l(.954,.283),l(1.168,.411),l(.829,.366),l(1.589,.739),l(.058,.185),l(.719,.458),l(.31,.475),l(-.198,.435),l(-.152,.337),l(-.455,-.281),l(-.318,-.167),l(-.109,-.486),l(-.263,-.17),l(-.512,-.099),l(-.483,-.009),l(-.439,-.236),l(.086,-.217),l(-.353,-.065),l(-.301,.098),l(-.232,.262),l(-.259,.399),l(-.273,.208),l(.043,.271),l(-.197,.303),l(-.007,.298),l(.76,.342),l(.611,.271),l(-.093,.314),l(.03,.432),l(.133,.142),l(-.191,.238),l(-.659,-.024),l(-.41,.219),l(-.202,.228),l(.11,.595),l(-.536,.303),l(-.617,.866),l(-.595,.048),l(-.167,-.071),l(-.184,-.14),l(-.002,-.508),l(.364,-.141),l(.317,-.542),l(-.236,-.184),l(.361,-.249),l(.361,.074),l(.133,-.17),l(-.077,-.34),l(-.211,-.181),l(-.206,-.924),l(-.367,-.516),l(-.15,-.607),l(-.201,-.352),l(-.334,.058),l(-.187,.171),l(-.899,-.496),l(-.286,-.065),l(.208,-.291),l(-.092,-.398),l(-.461,-.34),l(-.909,.247),l(.034,-.109),l(.322,-.194),l(-.276,-.27),l(-.29,-.003),l(-.42,.19),l(-.242,-.512),l(-.198,-.207),l(-.124,-.228),l(-.663,-.241),l(-.505,-.027),l(-.654,-.127),l(-.745,-.355),l(-.548,-.441),l(-.959,-.612),l(-1.036,-.826),l(-.872,-.384),l(-.805,-.67),l(-.566,-.856),l(-.434,-1.043),l(-.347,-.443),l(-.505,-.457),l(-.483,-.243),l(-1.188,-.341),l(-.579,-.142),l(-.5,.044),l(-1.078,.647),l(-.46,.359),l(-.646,.173),l(-.303,.043),l(.146,-.469),l(-.062,-.281),l(-.849,.07),l(-.754,-.391),l(-.193,-.442),l(.315,-.371),l(.175,-.01),l(-.135,-.331),l(-.616,-.191),l(-.352,-.358),l(.437,-.186),l(.183,.111),l(.541,-.353),l(.199,-.272),l(-.43,-.192),l(-.025,-.292),l(-.532,-.344),l(.624,-.301),l(.599,.062),l(.627,-.204),l(.629,.168),l(.275,-.16),l(.349,-.432),l(-.103,-.212),l(.777,-.404),l(.016,.415),l(.534,.363),l(.311,.071),l(-.098,.182),l(.385,.312),l(.285,-.151),l(.018,-.535),l(.425,-.384),l(-.019,-.333),l(.371,-.081),l(.143,.354),l(.23,.142),l(.216,-.03),l(.071,-.122),l(.469,-.05),l(.244,.333),l(.228,-.415),l(-.244,-.131),l(.081,-.273),l(.283,-.091),l(.176,.162),l(.315,.051),l(.038,-.192),l(-.112,-.212),l(.126,-.309),l(.631,.171),l(.597,.034),l(.329,-.411),l(.366,-.096),l(.183,.083),l(.445,-.11),l(.301,.103),l(.856,-.227),l(.023,.363),l(.318,.096),l(.32,.391),l(1.311,.247),l(.894,.082),l(.478,.112),l(.116,.199),l(-.614,.303),l(.098,.151),l(.297,.002),l(.187,.185),l(-.367,.285),l(.336,.089),l(-.127,.361),l(.36,.11),l(.284,.198),l(-.056,.214),
-N(430.73,96.731),l(1.04,.065),l(.179,.107),l(.612,-.009),l(.287,.152),l(.646,-.5),l(.566,-.107),l(.85,.08),l(.298,-.196),l(.89,.116),l(-.082,-.393),l(.693,-.157),l(.304,.59),l(.364,.333),l(-.035,-.009),l(-.1,-.073),l(-.145,-.036),l(-.172,0),l(-.145,.009),l(-.055,.063),l(0,.072),l(.019,.09),l(.009,.082),l(-.063,.009),l(-.136,-.009),l(-.108,-.036),l(-.091,.063),l(-.045,.082),l(-.081,.063),l(-.082,.045),l(-.081,.009),l(-.163,.036),l(-.117,.036),l(-.108,.036),l(-.055,.045),l(-.153,-.009),l(-.127,.072),l(-.063,.054),l(-.018,.082),l(.036,.072),l(.081,.054),l(.063,.055),l(.045,.045),l(.019,.063),l(.018,.09),l(-.036,.108),l(-.018,.063),l(-.046,.1),l(-.108,0),l(-.081,-.009),l(-.091,.027),l(-.108,.009),l(-.117,.054),l(-.091,.018),l(-.081,.027),l(-.1,.045),l(-.055,.063),l(-.036,.027),l(.055,.018),l(.063,.009),l(.026,.027),l(.037,.072),l(-.046,.063),l(-.027,.009),l(-.081,.027),l(-.009,.045),l(.045,.081),l(0,.072),l(.045,.1),l(-.054,.072),l(-.063,-.018),l(-.1,.045),l(-.117,.018),l(-.127,-.036),l(-.063,-.027),l(-.1,-.063),l(-.099,0),l(-.063,-.027),l(-.118,-.045),l(-.018,.045),l(-.027,.045),l(-.1,.027),l(-.136,0),l(-.054,-.045),l(-.072,-.063),l(-.127,-.018),l(-.019,-.09),l(-.026,-.018),l(-.063,-.054),l(-.055,-.027),l(-.018,-.054),l(-.01,-.054),l(-.036,-.009),l(-.063,.018),l(-.036,.054),l(-.009,.027),l(-.054,.063),l(-.019,.018),l(-.018,.081),l(-.063,.045),l(-.046,.018),l(-.062,.054),l(-.036,.009),l(-.254,0),l(-.108,-.027),l(-.108,.027),l(-.145,.009),l(-.1,-.009),l(-.1,-.036),l(-.045,-.019),l(-.055,0),l(0,.037),l(0,.036),l(-.045,.027),l(-.045,.018),l(-.136,-.009),l(-.027,-.036),l(-.108,.018),l(-.019,.018),l(-.136,.018),l(-.063,.018),l(-.126,.018),l(-.272,-.063),l(.428,-.077),l(.113,-.16),l(.056,-.214),l(-.284,-.198),l(-.36,-.11),l(.127,-.361),l(-.336,-.089),l(.367,-.285),l(-.187,-.185),l(-.297,-.002),l(-.098,-.151),l(.614,-.303),l(-.116,-.199),
-N(439.573,104.709),l(-1.051,-.672),l(-.185,-.222),l(-.783,-.149),l(-.203,-.159),l(-.403,-.115),l(-.683,.177),l(-.326,-.486),l(-1.112,-.627),l(-.584,-.678),l(.277,.007),l(.608,.016),l(-.583,-.221),l(-.659,-.469),l(-.183,-.407),l(.086,-.452),l(-.289,-.336),l(-.646,-.418),l(-.378,-.126),l(-.258,.579),l(-.142,.116),l(.03,.15),l(-.284,.106),l(-.154,.248),l(-.213,.053),l(-.496,-.647),l(-.063,-.286),l(-.259,-.612),l(.065,-.012),l(.272,.063),l(.126,-.018),l(.063,-.018),l(.136,-.018),l(.019,-.018),l(.108,-.018),l(.027,.036),l(.136,.009),l(.045,-.018),l(.045,-.027),l(0,-.036),l(0,-.037),l(.055,0),l(.045,.019),l(.1,.036),l(.1,.009),l(.145,-.009),l(.108,-.027),l(.108,.027),l(.254,0),l(.036,-.009),l(.062,-.054),l(.046,-.018),l(.063,-.045),l(.018,-.081),l(.019,-.018),l(.054,-.063),l(.009,-.027),l(.036,-.054),l(.063,-.018),l(.036,.009),l(.01,.054),l(.018,.054),l(.055,.027),l(.063,.054),l(.026,.018),l(.019,.09),l(.127,.018),l(.072,.063),l(.054,.045),l(.136,0),l(.1,-.027),l(.027,-.045),l(.018,-.045),l(.118,.045),l(.063,.027),l(.099,0),l(.1,.063),l(.063,.027),l(.127,.036),l(.117,-.018),l(.1,-.045),l(.063,.018),l(.054,-.072),l(-.045,-.1),l(0,-.072),l(-.045,-.081),l(.009,-.045),l(.081,-.027),l(.027,-.009),l(.046,-.063),l(-.037,-.072),l(-.026,-.027),l(-.063,-.009),l(-.055,-.018),l(.036,-.027),l(.055,-.063),l(.1,-.045),l(.081,-.027),l(.091,-.018),l(.117,-.054),l(.108,-.009),l(.091,-.027),l(.081,.009),l(.108,0),l(.046,-.1),l(.018,-.063),l(.036,-.108),l(-.018,-.09),l(-.019,-.063),l(-.045,-.045),l(-.063,-.055),l(-.081,-.054),l(-.036,-.072),l(.018,-.082),l(.063,-.054),l(.127,-.072),l(.153,.009),l(.055,-.045),l(.108,-.036),l(.117,-.036),l(.163,-.036),l(.081,-.009),l(.082,-.045),l(.081,-.063),l(.045,-.082),l(.091,-.063),l(.108,.036),l(.136,.009),l(.063,-.009),l(-.009,-.082),l(-.019,-.09),l(0,-.072),l(.055,-.063),l(.145,-.009),l(.172,0),l(.145,.036),l(.1,.073),l(.035,.009),l(.215,.197),l(1.412,.612),l(1.116,.671),l(.58,.098),l(.668,-.047),l(.433,-.031),l(.589,-.203),l(.201,.142),l(.056,.089),l(.022,.112),l(-.022,.078),l(.045,.044),l(.011,.067),l(-.078,.056),l(-.011,.146),l(.078,.067),l(.145,-.034),l(.101,.034),l(.045,.089),l(-.078,.011),l(-.056,-.022),l(-.022,.078),l(.033,.1),l(-.045,.034),l(-.044,.022),l(.066,.111),l(.168,-.022),l(.033,.078),l(.123,.1),l(.122,0),l(.101,0),l(.09,.078),l(.122,.011),l(.134,0),l(.012,.078),l(-.033,.056),l(-.135,-.011),l(-.089,-.034),l(-.067,.022),l(-.078,-.011),l(-.066,-.045),l(-.056,-.011),l(-.045,.011),l(.033,.067),l(-.101,.089),l(-.078,0),l(0,.156),l(.045,.067),l(-.033,.078),l(.022,.078),l(.011,.078),l(-.089,.033),l(-.09,-.033),l(-.056,.067),l(.078,.089),l(-.078,.011),l(-.189,.022),l(-.201,-.022),l(-.145,-.123),l(.056,-.101),l(-.045,-.089),l(-.123,-.011),l(-.022,-.112),l(-.145,-.056),l(-.146,-.045),l(-.101,.089),l(-.1,-.011),l(-.156,-.078),l(-.067,-.022),l(-.146,0),l(-.156,-.045),l(-.111,.067),l(-.134,.045),l(-.134,-.045),l(-.111,-.067),l(-.112,0),l(-.122,.089),l(-.168,.078),l(-.156,-.067),l(-.268,-.089),l(-.179,.011),l(-.156,.011),l(-.189,-.056),l(-.168,-.011),l(-.156,-.089),l(-.089,.078),l(-.111,.022),l(-.057,-.056),l(-.234,-.078),l(-.156,-.056),l(-.134,-.045),l(-.089,-.011),l(-.134,.123),l(-.112,-.011),l(-.223,-.022),l(-.168,-.033),l(-.212,.022),l(-.101,.111),l(-.145,.145),l(-.123,.201),l(-.201,-.022),l(-.256,-.134),l(-.156,-.19),l(-.101,-.111),l(-.312,-.034),l(-.123,.044),l(-.089,.179),l(-.045,.167),l(.045,.134),l(0,.078),l(.033,.212),l(-.123,.067),l(.022,.089),l(.134,.078),l(.09,.089),l(.122,.034),l(.101,.033),l(.179,.179),l(.146,.234),l(.089,.134),l(.022,.123),l(.156,.111),l(-.078,.056),l(-.012,.1),l(.022,.146),l(.168,-.011),l(.089,.111),l(.056,.123),l(.112,.111),l(.167,.045),l(.167,.033),l(.369,.357),l(.021,.167),l(.078,.044),l(.213,.078),l(.379,.357),l(.224,.123),l(.223,.067),l(.101,.056),l(0,.112),l(.078,.279),l(.201,.078),l(.189,.167),l(.146,.112),l(.245,.123),l(.067,.212),l(-.284,.083),M(439.792,104.833),l(.132,-.118),l(.134,.011),l(.123,.034),l(.045,.078),l(.066,.089),l(.146,.089),l(.179,.078),l(.212,.011),l(.312,.257),l(.045,.067),l(.134,-.033),l(.123,.022),l(.089,.034),l(.062,.063),l(.005,.004),l(-.022,.089),l(.033,.078),l(.082,.072),l(.029,.092),l(-.002,.1),l(-.589,-.367),l(-.549,-.371),l(-.789,-.378),
-N(451.009,101.725),l(-.328,.346),l(-.383,.374),l(-.18,.302),l(.056,.271),l(1.326,1.122),l(.028,.2),l(-.302,.302),l(-.762,.333),l(-.246,.301),l(-.008,.514),l(-.013,.208),l(-.058,-.017),l(-.072,.029),l(-.16,.022),l(-.145,.021),l(-.116,.022),l(-.058,.015),l(-.102,-.051),l(-.087,.043),l(-.088,.021),l(-.102,-.043),l(-.064,-.021),l(-.131,.116),l(-.087,.08),l(-.152,-.015),l(-.196,-.007),l(-.064,.007),l(-.175,-.043),l(-.152,.087),l(-.151,.102),l(-.109,.058),l(.059,.072),l(-.029,.058),l(-.116,0),l(-.094,-.109),l(-.131,-.058),l(-.087,-.073),l(-.08,.065),l(-.116,.058),l(-.246,.058),l(-.225,.058),l(-.088,.058),l(-.058,.167),l(.029,.13),l(-.029,.072),l(-.072,.087),l(-.188,0),l(-.14,-.049),l(-.018,-.109),l(-.733,-.866),l(-.382,-.369),l(-.058,-.004),l(.109,-.286),l(0,-.067),l(-.078,-.067),l(-.101,0),l(-.056,-.056),l(.022,-.089),l(.111,-.033),l(.146,.011),l(.167,.033),l(.057,-.033),l(.021,-.067),l(.09,-.044),l(.134,-.022),l(.089,-.011),l(-.011,-.089),l(-.101,-.101),l(-.167,-.067),l(-.134,-.045),l(-.057,-.044),l(-.111,.022),l(-.078,-.045),l(-.033,-.067),l(-.123,-.101),l(-.078,-.1),l(-.066,-.022),l(-.067,.044),l(-.078,-.011),l(-.101,-.056),l(-.279,-.078),l(-.078,-.022),l(-.056,-.033),l(-.167,-.134),l(-.101,-.146),l(-.111,-.111),l(-.168,-.078),l(-.156,-.101),l(-.223,-.056),l(0,-.101),l(.179,-.101),l(.089,-.111),l(.078,-.011),l(.067,.034),l(.078,.044),l(.1,.022),l(.045,-.022),l(.012,-.134),l(.011,-.19),l(-.134,-.145),l(-.179,-.19),l(-.212,-.134),l(-.101,-.145),l(.101,.022),l(.101,.011),l(.145,.056),l(.224,.044),l(.134,-.078),l(.089,-.056),l(.067,-.078),l(-.089,-.044),l(-.135,-.022),l(-.089,-.089),l(-.123,-.078),l(-.156,-.089),l(-.033,-.101),l(-.045,-.1),l(-.212,.011),l(-.167,-.056),l(-.078,-.1),l(-.022,-.134),l(.078,-.067),l(0,-.089),l(-.033,-.1),l(.056,-.056),l(.066,-.078),l(.156,-.156),l(.156,-.223),l(.034,-.167),l(.056,-.1),l(-.022,-.067),l(-.123,-.022),l(-.179,-.011),l(-.156,0),l(-.212,.112),l(-.078,-.089),l(.056,-.067),l(.09,.033),l(.089,-.033),l(-.011,-.078),l(-.022,-.078),l(.033,-.078),l(-.045,-.067),l(0,-.156),l(.078,0),l(.101,-.089),l(-.033,-.067),l(.045,-.011),l(.056,.011),l(.066,.045),l(.078,.011),l(.067,-.022),l(.089,.034),l(.135,.011),l(.033,-.056),l(-.012,-.078),l(-.134,0),l(-.122,-.011),l(-.09,-.078),l(-.101,0),l(-.122,0),l(-.123,-.1),l(-.033,-.078),l(-.168,.022),l(-.066,-.111),l(.044,-.022),l(.045,-.034),l(-.033,-.1),l(.022,-.078),l(.056,.022),l(.078,-.011),l(-.045,-.089),l(-.101,-.034),l(-.145,.034),l(-.078,-.067),l(.011,-.146),l(.078,-.056),l(-.011,-.067),l(-.045,-.044),l(.022,-.078),l(-.022,-.112),l(-.056,-.089),l(-.201,-.142),l(1.535,-.529),l(.889,-.077),l(.907,.067),l(.054,.309),l(.569,.178),l(.19,.237),l(.202,.036),l(-.075,.356),l(.104,.119),l(-.058,.088),l(.712,.471),l(.555,.141),l(.306,.118),l(.069,.142),l(-.19,.127),l(-.124,.146),l(.183,.059),l(.239,.083),l(-.271,.071),l(-.178,.094),l(.052,.165),l(.245,.036),l(.234,0),l(.02,.189),l(.594,.059),l(.194,.139),l(.414,.239),l(.147,-.118),l(.215,-.283),l(.253,-.13),l(.625,.248),l(.114,.13),l(-.351,-.012),l(-.32,.201),l(.146,.33),l(.418,.186),
-N(551.198,117.997),l(-.351,-.48),l(-.236,-.126),l(-1.217,-.05),l(-.646,-.011),l(-.096,-.016),l(.091,-.726),l(-.062,-.503),l(.157,-.251),l(.062,-.22),l(-.503,-.094),l(-.534,-.283),l(-.566,-.189),l(-.471,.063),l(-.378,-.251),l(-1.132,-.597),l(-.565,-.22),l(-.943,-.597),l(-.314,.063),l(-1.006,-.503),l(-.377,-.44),l(-1.194,-.597),l(-1.384,-.975),l(0,-.283),l(-.188,-.44),l(-.283,-.188),l(-.408,-.597),l(-.126,-.566),l(-.22,-.377),l(-.881,-.251),l(-.188,.157),l(-.439,.063),l(-.535,-.126),l(-.439,.032),l(-.503,.094),l(-.314,-.157),l(-.691,-.314),l(.094,-.22),l(.157,-.188),l(-.188,-.22),l(.031,-.188),l(.188,-.157),l(-.439,-.283),l(0,-.22),l(-.032,-.22),l(-.251,-.22),l(-.534,-.094),l(-.692,-.095),l(-.22,-.314),l(-.346,-.032),l(-.629,-.377),l(-.472,-.095),l(-.188,.063),l(-.565,.157),l(.251,.251),l(.188,.377),l(-.597,-.283),l(-.283,0),l(-.126,.126),l(-.22,.346),l(-.283,.126),l(-.629,0),l(-.503,.251),l(-.503,.409),l(-.062,.628),l(.314,.409),l(-.126,.314),l(-1.383,.032),l(-1.03,-.063),l(.056,-8.174),l(5.658,-1.289),l(5.722,2.986),l(2.012,1.666),l(2.578,-.346),l(2.767,.188),l(1.1,-.409),l(.724,.723),l(.597,.22),l(.66,1.006),l(.66,-.314),l(-.031,1.038),l(-.188,.409),l(.031,.754),l(1.006,0),l(.221,.817),l(.346,1.069),l(.503,.063),l(.691,-.032),l(1.006,-.094),l(.346,0),l(.44,.314),l(.062,.283),l(-.062,.283),l(.44,.346),l(.66,0),l(.125,-.188),l(-.157,-.409),l(.504,-.44),l(.439,-.188),l(.221,-.472),l(.282,-.188),l(.943,-.377),l(.755,-.189),l(.534,-.471),l(.346,-.283),l(.22,-.063),l(.283,.126),l(.377,-.377),l(.322,-.031),l(.349,-.126),l(.441,.246),l(-.368,.172),l(-.368,.171),l(-.221,.049),l(-.073,.196),l(-.295,.049),l(-.294,.172),l(-.196,.147),l(-.441,.295),l(-.172,.098),l(-.024,.123),l(.294,.049),l(.295,.074),l(.146,.123),l(.418,-.147),l(.098,.221),l(.172,.221),l(.368,.27),l(.589,0),l(.393,0),l(.049,-.393),l(.221,.049),l(.196,-.196),l(.024,-.245),l(.196,.098),l(.196,.172),l(.172,.294),l(.049,.147),l(.393,.024),l(.147,-.024),l(.073,.246),l(.025,.098),l(.343,-.025),l(.319,.147),l(.245,.196),l(.516,.074),l(.466,.024),l(.172,.123),l(-.49,.221),l(-.197,.147),l(-.221,.147),l(-.49,-.024),l(-.245,-.049),l(.049,.171),l(0,.147),l(-.319,0),l(-.172,.049),l(-.343,.196),l(-.221,.196),l(-.271,.049),l(-.221,.196),l(-.245,-.147),l(-.319,-.098),l(-.294,-.098),l(-.221,.025),l(-.246,.073),l(-.318,-.073),l(-.042,.098),l(-.345,-.005),l(-.409,.031),l(-.188,-.283),l(-.251,-.063),l(-.126,-.188),l(.251,-.126),l(.409,-.346),l(.188,-.22),l(-.252,-.251),l(-.439,-.377),l(-.221,.251),l(-.471,.346),l(-.692,.188),l(-.22,.157),l(-.252,-.22),l(-.22,-.157),l(-.346,0),l(.031,.22),l(-.283,.314),l(.189,.314),l(-.032,.346),l(-.062,.126),l(-.472,-.095),l(-.565,.095),l(-.503,.094),l(.251,.125),l(.534,-.031),l(.126,.094),l(-.251,.063),l(-.188,.063),l(-.032,.346),l(-.188,0),l(-.251,.157),l(-.063,.409),l(-.282,.188),l(-1.069,-.094),l(-.629,-.126),l(-.472,.283),l(-.125,.471),l(.251,.283),l(.346,.188),l(.157,.157),l(.44,.032),l(.346,0),l(.126,.22),l(-.126,.22),l(-.031,.472),l(.126,.409),l(.471,.314),l(.126,.283),l(-.157,.22),l(-.503,.346),l(-.283,.503),l(-.377,.377),l(.063,.377),l(-.375,.843),
-N(439.792,104.833),l(-.113,-.054),l(-.105,-.07),l(.284,-.083),l(-.067,-.212),l(-.245,-.123),l(-.146,-.112),l(-.189,-.167),l(-.201,-.078),l(-.078,-.279),l(0,-.112),l(-.101,-.056),l(-.223,-.067),l(-.224,-.123),l(-.379,-.357),l(-.213,-.078),l(-.078,-.044),l(-.021,-.167),l(-.369,-.357),l(-.167,-.033),l(-.167,-.045),l(-.112,-.111),l(-.056,-.123),l(-.089,-.111),l(-.168,.011),l(-.022,-.146),l(.012,-.1),l(.078,-.056),l(-.156,-.111),l(-.022,-.123),l(-.089,-.134),l(-.146,-.234),l(-.179,-.179),l(-.101,-.033),l(-.122,-.034),l(-.09,-.089),l(-.134,-.078),l(-.022,-.089),l(.123,-.067),l(-.033,-.212),l(0,-.078),l(-.045,-.134),l(.045,-.167),l(.089,-.179),l(.123,-.044),l(.312,.034),l(.101,.111),l(.156,.19),l(.256,.134),l(.201,.022),l(.123,-.201),l(.145,-.145),l(.101,-.111),l(.212,-.022),l(.168,.033),l(.223,.022),l(.112,.011),l(.134,-.123),l(.089,.011),l(.134,.045),l(.156,.056),l(.234,.078),l(.057,.056),l(.111,-.022),l(.089,-.078),l(.156,.089),l(.168,.011),l(.189,.056),l(.156,-.011),l(.179,-.011),l(.268,.089),l(.156,.067),l(.168,-.078),l(.122,-.089),l(.112,0),l(.111,.067),l(.134,.045),l(.134,-.045),l(.111,-.067),l(.156,.045),l(.146,0),l(.067,.022),l(.156,.078),l(.1,.011),l(.101,-.089),l(.146,.045),l(.145,.056),l(.022,.112),l(.123,.011),l(.045,.089),l(-.056,.101),l(.145,.123),l(.201,.022),l(.189,-.022),l(.078,-.011),l(.212,-.112),l(.156,0),l(.179,.011),l(.123,.022),l(.022,.067),l(-.056,.1),l(-.034,.167),l(-.156,.223),l(-.156,.156),l(-.066,.078),l(-.056,.056),l(.033,.1),l(0,.089),l(-.078,.067),l(.022,.134),l(.078,.1),l(.167,.056),l(.212,-.011),l(.045,.1),l(.033,.101),l(.156,.089),l(.123,.078),l(.089,.089),l(.135,.022),l(.089,.044),l(-.067,.078),l(-.089,.056),l(-.134,.078),l(-.224,-.044),l(-.145,-.056),l(-.101,-.011),l(-.101,-.022),l(.101,.145),l(.212,.134),l(.179,.19),l(.134,.145),l(-.011,.19),l(-.012,.134),l(-.045,.022),l(-.1,-.022),l(-.078,-.044),l(-.067,-.034),l(-.078,.011),l(-.089,.111),l(-.179,.101),l(-.056,-.033),l(-.156,.056),l(-.112,-.022),l(-.066,-.044),l(-.112,.033),l(-.078,.056),l(.012,.078),l(.089,.1),l(.123,.167),l(.056,.101),l(-.056,.101),l(-.111,0),l(-.09,-.056),l(-.056,-.089),l(-.056,-.044),l(-.123,-.011),l(-.122,.056),l(-.168,.078),l(-.045,.101),l(-.044,.089),l(-.112,.101),l(.034,.089),l(.011,.1),L(442,104.458),l(-.134,.011),l(-.111,.022),l(-.101,.089),l(-.012,.134),l(.012,.112),l(.011,.145),l(.012,.044),l(.066,.112),l(.078,.089),l(.045,.101),l(-.09,.089),l(-.183,.108),l(-.062,-.063),l(-.089,-.034),l(-.123,-.022),l(-.134,.033),l(-.045,-.067),l(-.312,-.257),l(-.212,-.011),l(-.179,-.078),l(-.146,-.089),l(-.066,-.089),l(-.045,-.078),l(-.123,-.034),l(-.134,-.011),l(-.132,.118),
-N(450.198,105.998),l(.013,-.208),l(.008,-.514),l(.246,-.301),l(.762,-.333),l(.302,-.302),l(-.028,-.2),l(-1.326,-1.122),l(-.056,-.271),l(.18,-.302),l(.383,-.374),l(.328,-.346),l(.392,.204),l(.352,.106),l(-.234,.318),l(.048,.189),l(.266,-.023),l(.771,-.189),l(.506,.002),l(1.151,.395),l(.34,-.031),l(.69,-.261),l(.3,.013),l(1.385,.35),l(.38,-.059),l(1.904,-.771),l(.618,-.218),l(.562,.04),l(.671,.369),l(.295,.042),l(.514,.226),l(1.346,.336),l(.671,.12),l(-.066,.335),l(-.077,.258),l(-.261,.086),l(-.313,-.028),l(-.339,.129),l(-.327,.73),l(-.039,.586),l(-.075,.143),l(-.404,.115),l(-.338,.372),l(-.017,.257),l(.252,-.036),l(.255,.224),l(.033,.154),l(.391,.375),l(.01,.223),l(-1.333,-.005),l(-.527,-.111),l(-.497,.045),l(-.629,.374),l(-.498,.445),l(-.363,-.026),l(-.344,.216),l(.097,.327),l(-.086,.257),l(-1.117,.277),l(-.388,.031),l(-.619,-.21),l(-1.473,-.505),l(-.584,.06),l(-.799,.261),l(-1.855,.195),l(-.09,.029),l(-.047,-.199),l(.104,-.3),l(.006,-.499),l(-.225,-.469),l(-.358,-.383),l(-.666,-.296),l(-.134,-.213),l(.007,-.106),
-N(381.009,107),l(-.121,-.278),l(.138,-.4),l(.343,-.5),l(-.358,-.471),l(-.304,-.428),l(-.514,-.07),l(-.164,-.1),l(-.053,-.329),l(.163,-.243),l(.409,-.272),l(.365,-.101),l(.563,-.03),l(.634,-.03),l(.133,-.172),l(.068,-.415),l(.535,-.273),l(.763,.042),l(1.078,.37),l(.763,.07),l(.756,-.087),l(.577,-.173),l(.508,-.144),l(.354,-.001),l(.629,.285),l(.694,.156),l(.939,.084),l(1.538,.04),l(.583,.027),l(.957,.141),l(.491,-.158),l(.419,-.229),l(.531,.027),l(.891,.47),l(.67,-.016),l(.335,.062),l(.472,.243),l(.469,-.03),l(.058,.122),l(-.205,.243),l(.094,.106),l(.15,.03),l(.112,-.106),l(1.088,.334),l(.15,-.061),l(.507,.395),l(.056,-.076),l(.262,.03),l(.131,-.076),l(.431,.152),l(.028,.038),l(.084,.114),l(.767,-.03),l(.037,.122),l(.337,-.061),l(.542,.015),l(-.017,-.319),l(.355,0),l(1.252,.304),l(.091,.213),l(.035,.289),l(.187,.076),l(.374,-.076),l(.206,-.03),l(.335,.091),l(.036,.152),l(.261,.015),l(.395,-.167),l(.427,.197),l(.485,.015),l(.039,-.136),l(.75,-.137),l(.334,.091),l(-.001,.088),l(-.001,.463),l(.156,.1),l(-.062,.485),l(-1.112,.528),l(-.95,.385),l(-.267,.328),l(-1.046,.198),l(-.664,.116),l(-.96,.301),l(-.323,.326),l(-.053,.2),l(.261,.128),l(-.088,.157),l(-.628,.143),l(-.594,.783),l(-.886,.787),l(-.096,.192),l(-.18,.361),l(-.245,.45),l(.353,.827),l(.072,.111),l(.084,.13),l(.648,.295),l(.103,.185),l(-.621,.327),l(-.215,.105),l(-.515,.252),l(-.286,.479),l(-.224,.085),l(-.461,.926),l(.155,.322),l(-.257,.099),l(-.992,.049),l(-.581,.242),l(-.425,.327),l(-.274,.757),l(-.663,.496),l(-.258,-.213),l(-.599,.028),l(-.305,.27),l(-.342,0),l(-.121,-.113),l(-3.282,.042),l(-.69,.524),l(-1.021,.17),l(-.35,.382),l(-.028,.283),l(-.083,.085),l(-.073,-.212),l(-.068,-.014),l(.005,.241),l(-.389,.127),l(-.421,-.142),l(-.788,-.467),l(-.224,-.382),l(.036,-.262),l(-.345,-.113),l(-.125,-.213),l(.175,-.163),l(-.468,-.51),l(-.702,-.284),L(385,117.498),l(-.484,-.135),l(-.586,.039),l(.008,-.018),l(.304,-.951),l(.242,-.37),l(.884,-.643),l(-.408,-.31),l(-.812,-.123),l(.17,-.455),l(.506,-.655),l(.347,-.371),l(-.163,-.198),l(-.455,-.551),l(-.488,-.494),l(.288,-.129),l(.482,-.045),l(.458,-.229),l(.043,-.199),l(-.057,-.938),l(.132,-.983),l(-.072,-.456),l(.051,-.442),l(.084,-.072),l(1.234,-.506),l(.288,-.216),l(-.062,-.242),l(-.842,-.495),l(-.15,-.242),l(-.272,-.227),l(-.335,-.055),l(-.531,.26),L(382.981,107),l(-.531,-.439),l(-.55,.188),L(381.009,107),
-N(489.685,103.693),l(.112,-.309),l(.26,-.166),l(.284,.047),l(.07,.047),l(.402,.023),l(.449,.023),l(.283,.095),l(.284,.142),l(.188,.094),l(.189,.047),l(.331,0),l(.213,0),l(.212,.166),l(.261,.095),l(.307,.071),l(.355,.047),l(.307,0),l(.426,-.095),l(.544,0),l(.401,.166),l(.189,0),l(.283,-.047),l(.354,.166),l(.095,.142),l(.284,.213),l(.52,.118),l(.354,.071),l(.236,.118),l(.308,.119),l(-.142,.118),l(-.048,.118),l(.261,.118),l(.212,.071),l(.261,-.118),l(.283,0),l(.166,-.166),l(.094,-.095),l(.213,-.071),l(.354,0),l(.261,.071),l(.188,.142),l(.142,-.166),l(.095,-.071),l(.118,0),l(.236,.118),l(.143,.094),l(.212,0),l(.189,.118),l(.213,.166),l(.378,0),l(.354,.024),l(.118,.142),l(-.118,.189),l(-.118,.307),l(.354,.284),l(.284,.166),l(.26,.094),l(.284,.047),l(.236,-.023),l(.236,.071),l(.126,.189),l(-.268,.189),l(-.143,.142),l(-.095,.071),l(.143,.26),l(.213,.307),l(.614,.166),l(.118,.213),l(-.095,.331),l(-.236,.095),l(-.236,.047),l(-.26,-.189),l(-.143,-.071),l(-.188,-.023),l(-.284,.047),l(-.638,-.189),l(-.189,-.213),l(-.331,-.189),l(-.473,-.024),l(-.236,0),l(-.418,.308),l(-.291,.094),l(-.378,.047),l(-.591,.095),l(-.592,-.047),l(-.401,.118),l(-.426,.023),l(-.308,.095),l(-.307,-.024),l(-.377,.108),l(-.031,-.028),l(-1.326,-1.018),l(-.41,-.041),l(-.761,.36),l(-.226,.072),l(-.491,-.068),l(-1.212,-.082),l(.083,-.065),l(.322,-.585),l(.032,-.143),l(-.064,-.728),l(-.331,-1.084),l(-.206,-.399),l(-.639,-.513),l(-.341,-.128),l(-.916,-.155),l(-.679,-.271),l(-.341,-.243),
-N(443.617,107.095),l(-.065,-.035),l(-.435,-.156),l(-.017,-.15),l(-.501,-.485),l(-.848,-.3),l(-.033,-.021),l(.002,-.1),l(-.029,-.092),l(-.082,-.072),l(-.033,-.078),l(.022,-.089),l(-.005,-.004),l(.183,-.108),l(.09,-.089),l(-.045,-.101),l(-.078,-.089),l(-.066,-.112),l(-.012,-.044),l(-.011,-.145),l(-.012,-.112),l(.012,-.134),l(.101,-.089),l(.111,-.022),l(.134,-.011),l(.056,-.056),l(-.011,-.1),l(-.034,-.089),l(.112,-.101),l(.044,-.089),l(.045,-.101),l(.168,-.078),l(.122,-.056),l(.123,.011),l(.056,.044),l(.056,.089),l(.09,.056),l(.111,0),l(.056,-.101),l(-.056,-.101),l(-.123,-.167),l(-.089,-.1),l(-.012,-.078),l(.078,-.056),l(.112,-.033),l(.066,.044),l(.112,.022),l(.156,-.056),l(.056,.033),l(0,.101),l(.223,.056),l(.156,.101),l(.168,.078),l(.111,.111),l(.101,.146),l(.167,.134),l(.056,.033),l(.078,.022),l(.279,.078),l(.101,.056),l(.078,.011),l(.067,-.044),l(.066,.022),l(.078,.1),l(.123,.101),l(.033,.067),l(.078,.045),l(.111,-.022),l(.057,.044),l(.134,.045),l(.167,.067),l(.101,.101),l(.011,.089),l(-.089,.011),l(-.134,.022),l(-.09,.044),l(-.021,.067),l(-.057,.033),l(-.167,-.033),l(-.146,-.011),l(-.111,.033),l(-.022,.089),l(.056,.056),l(.101,0),l(.078,.067),l(0,.067),l(-.109,.286),l(-.361,-.022),l(-.727,-.11),l(-.273,.273),l(-.279,.515),l(.133,.427),l(-.002,.342),
-N(558.52,110.652),l(.042,-.098),l(.318,.073),l(.246,-.073),l(.221,-.025),l(.294,.098),l(.319,.098),l(.245,.147),l(.221,-.196),l(.271,-.049),l(.221,-.196),l(.343,-.196),l(.172,-.049),l(.319,0),l(0,-.147),l(-.049,-.171),l(.245,.049),l(.49,.024),l(.221,-.147),l(.197,-.147),l(.49,-.221),l(-.172,-.123),l(-.466,-.024),l(-.516,-.074),l(-.245,-.196),l(-.319,-.147),l(-.343,.025),l(-.025,-.098),l(-.073,-.246),l(-.147,.024),l(-.393,-.024),l(-.049,-.147),l(-.172,-.294),l(-.196,-.172),l(-.196,-.098),l(-.024,.245),l(-.196,.196),l(-.221,-.049),l(-.049,.393),l(-.393,0),l(-.589,0),l(-.368,-.27),l(-.172,-.221),l(-.098,-.221),l(-.418,.147),l(-.146,-.123),l(-.295,-.074),l(-.294,-.049),l(.024,-.123),l(.172,-.098),l(.441,-.295),l(.196,-.147),l(.294,-.172),l(.295,-.049),l(.073,-.196),l(.221,-.049),l(.368,-.171),l(.368,-.172),l(-.441,-.246),l(-.349,.126),l(-.044,-.273),l(.393,-.442),l(.318,-.368),l(.736,-.123),l(.663,-.098),l(.883,.147),l(.883,.245),l(.688,.196),l(.81,.123),l(.344,.123),l(-.024,-.442),l(.245,-.736),l(.466,-.368),l(.688,-.123),l(.589,.074),l(.761,.27),l(.735,.246),l(.908,.196),l(.54,.098),l(.441,-.27),l(.858,-.024),l(.761,0),l(.785,-.147),l(.712,.221),l(.662,.098),l(1.35,.024),l(.662,-.074),l(.981,.246),l(.564,-.049),l(.147,.344),l(.27,.147),l(.196,.27),l(.663,0),l(.466,.098),l(.41,.375),l(.031,.194),l(-.051,.157),l(-.325,.187),l(-.97,.219),l(-1.338,.349),l(-.445,.145),l(-.405,.301),l(-.638,.701),l(-.646,.345),l(-.478,.102),l(-.459,.017),l(-1.248,-.235),l(-.238,.03),l(-.467,.472),l(-.463,.784),l(-.268,.243),l(-.885,.132),l(-.507,.145),l(-.344,-.055),l(-.183,-.567),l(-.06,-.071),l(-.359,.03),l(-1.737,.734),l(-1.422,.704),l(-.274,.186),l(-.129,.213),l(-.139,.739),l(-.196,-.073),l(-.344,.098),l(-.344,.171),l(-.539,0),l(-.663,-.073),l(-.834,.221),l(-.172,.147),l(-.196,0),l(-.172,-.319),l(-.368,.024),l(-.318,.172),l(-.074,-.221),l(-.049,-.172),l(-.122,.024),l(-.319,-.123),l(-.049,-.147),l(-.221,-.024),l(-.442,.123),l(-.343,.049),l(.024,.221),l(-.295,.049),l(-.393,-.074),l(-.073,-.196),l(-.147,-.123),l(-.368,-.098),l(-.49,.147),l(-.196,-.073),l(-.688,.024),l(-.564,0),l(-.589,.024),l(-.122,-.098),l(-.049,-.147),l(-.099,-.27),l(.099,-.245),l(.196,-.196),l(.098,.221),l(.196,-.074),l(-.049,-.196),l(.098,-.27),l(.123,0),l(.981,-.196),l(.515,.147),l(.516,.196),l(.099,.172),l(.196,0),l(.024,-.246),l(.441,-.196),l(.302,-.147),
-N(685.343,114.455),l(-.571,.678),l(-.309,.115),l(-.511,-.096),l(-.579,-.068),l(-.595,-.011),l(-.315,.157),l(-.633,.738),l(-.283,.256),l(-.235,.171),l(-.268,-.206),l(-.35,.34),l(-.319,.199),l(-.373,-.608),l(-.398,-.112),l(-.649,.78),l(-.195,-.382),l(-.232,-.254),l(-.683,-.367),l(-.169,-.453),l(.095,-.312),l(.429,-.411),l(.754,-.229),l(.056,-.269),l(-.591,-.282),l(.407,-.879),l(.189,-.34),l(-.199,-.269),l(-.632,-.296),l(-.139,0),l(-.381,.029),l(-.312,.143),l(-.234,-.07),l(-.52,-.368),l(-.167,-.233),l(.379,-.528),l(.415,-.442),l(.52,-.329),l(1.533,-.604),l(1.032,-.545),l(.636,-.543),l(.686,-1.027),l(.386,-.13),l(.448,-.017),l(.273,.396),l(.493,.253),l(.508,.153),l(.975,-.048),l(.527,-.159),l(-.046,-.113),l(-.508,-.765),l(.025,-.342),l(.273,-.243),l(.392,-.059),l(.333,.126),l(.452,.054),l(.538,-.017),l(.62,-.259),l(.955,-.532),l(.23,-.713),l(.383,-.358),l(.253,-.129),l(.247,-.001),l(.579,.68),l(.298,.439),l(.167,.393),l(-1.356,.923),l(-.408,.457),l(-.112,.414),l(.09,.427),l(-.154,.456),l(-.187,.868),l(-.668,.115),l(-.36,.229),l(-.497,.385),l(-.766,.641),l(-.468,.214),l(-.678,.03),l(-.577,.199),l(-.265,.228),l(-.248,.312),l(-.364,.893),l(.284,.326),l(1.225,.847),l(.419,.354),
-N(536.625,121.017),l(-.078,-.028),l(-.15,-.692),l(-.01,-.565),l(-.038,-.848),l(-.185,-.211),l(-.787,.075),l(-.696,-.01),l(-.655,-.506),l(-1.803,-1.362),l(-.597,-.336),l(-.66,-.167),l(-.5,-.054),l(-.788,-.066),l(-.822,-.335),l(-.708,-.251),l(-.402,-.437),l(-1.055,-.107),l(-.519,-.054),l(-.343,.129),l(-.517,.343),l(-.333,.03),l(-.78,-.038),l(-.609,.032),l(-.413,.144),l(-.476,.328),l(-.621,.654),l(-.466,.3),l(-.562,.13),l(-.441,-.025),l(-.066,-.376),l(-.128,-.681),l(-.106,-.447),l(.128,-.298),l(0,-.383),l(0,-.532),l(.106,-.191),l(.106,-.298),l(.085,-.234),l(-.085,-.212),l(-.256,-.128),l(-.319,-.191),l(-.213,-.255),l(-.042,-.149),l(-.171,0),l(-.191,-.042),l(-.361,-.106),l(-.191,.192),l(-.086,-.234),l(.086,-.106),l(.148,-.255),l(.128,.106),l(.383,-.042),l(.426,.085),l(.128,.021),l(.043,-.128),l(-.319,-.213),l(-.256,-.021),l(-.085,-.277),l(.17,-.255),l(.213,-.191),l(-.404,-.042),l(-.319,.085),l(-.383,0),l(-.319,-.085),l(-.128,.149),l(-.17,-.255),l(-.149,-.298),l(0,-.34),l(-.042,-.298),l(.17,-.213),l(.106,-.319),l(.043,-.255),l(.105,-.277),l(.086,-.234),l(.213,.34),l(.063,.128),l(.17,.17),l(.405,-.085),l(.383,.128),l(.106,-.149),l(-.021,-.149),l(.106,0),l(.148,.021),l(.064,.319),l(.106,.191),l(.298,-.021),l(.298,-.063),l(.256,-.106),l(.233,.085),l(.192,.064),l(.085,-.128),l(-.149,-.191),l(-.042,-.213),l(.191,-.042),l(.106,.149),l(.233,.085),l(.256,-.085),l(.213,-.064),l(.021,-.234),l(-.171,-.341),l(-.34,-.234),l(-.532,-.319),l(-.426,-.213),l(-.063,-.319),l(-.043,-.34),l(-.213,-.17),l(0,-.213),l(0,-.213),l(-.085,-.127),l(-.554,-.064),l(-.617,.085),l(-.426,.021),l(-.446,.127),l(-.192,.277),l(-.085,.298),l(.128,.192),l(-.063,.276),l(-.086,.405),l(.064,.234),l(.021,.298),l(-.256,-.553),l(-.361,-.319),l(.042,-.17),l(-.063,-.191),l(-.274,-.143),l(.529,-.453),l(.937,-.532),l(1.277,-.298),l(.979,-.085),l(.512,.234),l(.681,.383),l(.617,.383),l(.256,.511),l(.638,.703),l(.447,.255),l(.489,-.043),l(.341,-.106),l(.158,.014),l(1.03,.063),l(1.383,-.032),l(.126,-.314),l(-.314,-.409),l(.062,-.628),l(.503,-.409),l(.503,-.251),l(.629,0),l(.283,-.126),l(.22,-.346),l(.126,-.126),l(.283,0),l(.597,.283),l(-.188,-.377),l(-.251,-.251),l(.565,-.157),l(.188,-.063),l(.472,.095),l(.629,.377),l(.346,.032),l(.22,.314),l(.692,.095),l(.534,.094),l(.251,.22),l(.032,.22),l(0,.22),l(.439,.283),l(-.188,.157),l(-.031,.188),l(.188,.22),l(-.157,.188),l(-.094,.22),l(.691,.314),l(.314,.157),l(.503,-.094),l(.439,-.032),l(.535,.126),l(.439,-.063),l(.188,-.157),l(.881,.251),l(.22,.377),l(.126,.566),l(.408,.597),l(.283,.188),l(.188,.44),l(0,.283),l(1.384,.975),l(1.194,.597),l(.377,.44),l(1.006,.503),l(.314,-.063),l(.943,.597),l(.565,.22),l(1.132,.597),l(.378,.251),l(.471,-.063),l(.566,.189),l(.534,.283),l(.503,.094),l(-.062,.22),l(-.157,.251),l(.062,.503),l(-.091,.726),l(-1.454,-.244),l(-.565,-.294),l(-.445,.356),l(-.417,.2),l(-1.135,.205),l(-.432,.809),l(-.203,.991),l(-.103,.128),l(-.508,.243),l(-1.985,.689),l(-.568,.159),l(-.119,.199),l(-.001,.466),l(-.22,.199),l(-.636,.3),l(-.534,.031),l(-.573,-.082),l(-.999,-.348),l(-.937,-.193),l(-.193,-.112),
-N(445.294,112.196),l(-.07,-.115),l(-.138,-.469),l(-.5,-.452),l(-.966,-.541),l(.024,-.141),l(.23,.062),l(.023,-.237),l(-.345,-.414),l(.418,-.616),l(-.182,-.22),l(.188,-.563),l(-.251,-.282),l(.182,-.396),l(.268,-.079),l(-.027,-.45),l(-.331,-.081),l(-.2,-.107),l(.002,-.342),l(-.133,-.427),l(.279,-.515),l(.273,-.273),l(.727,.11),l(.361,.022),l(.058,.004),l(.382,.369),l(.733,.866),l(.018,.109),l(.035,.218),l(-.132,.429),l(.074,.641),l(.298,.668),l(.722,.608),l(-.09,.029),l(-.449,.842),l(-.402,.386),l(-.496,.472),l(-.583,.884),
-N(451.512,108.463),l(-.507,.16),l(-.532,.245),l(-.622,-.054),l(-.361,-.041),l(-.365,.159),l(-.395,.429),l(-.606,.146),l(-.809,.076),l(-.722,-.608),l(-.298,-.668),l(-.074,-.641),l(.132,-.429),l(-.035,-.218),l(.14,.049),l(.188,0),l(.072,-.087),l(.029,-.072),l(-.029,-.13),l(.058,-.167),l(.088,-.058),l(.225,-.058),l(.246,-.058),l(.116,-.058),l(.08,-.065),l(.087,.073),l(.131,.058),l(.094,.109),l(.116,0),l(.029,-.058),l(-.059,-.072),l(.109,-.058),l(.151,-.102),l(.152,-.087),l(.175,.043),l(.064,-.007),l(.196,.007),l(.152,.015),l(.087,-.08),l(.131,-.116),l(.064,.021),l(.102,.043),l(.088,-.021),l(.087,-.043),l(.102,.051),l(.058,-.015),l(.116,-.022),l(.145,-.021),l(.16,-.022),l(.072,-.029),l(.058,.017),l(-.007,.106),l(.134,.213),l(.666,.296),l(.358,.383),l(.225,.469),l(-.006,.499),l(-.104,.3),l(.047,.199),
-N(383.93,117.402),l(-.249,.101),l(-.517,.291),l(-.439,.052),l(-.548,-.178),l(-.58,0),l(-.28,-.073),l(-.719,.292),l(-.058,-.177),l(.389,-1.012),l(-.021,-.856),l(-.182,-.115),l(.244,-.542),l(-.054,-.397),l(.13,-.114),l(-.144,-.141),l(-.375,.085),l(-.476,.097),l(-.108,-.449),l(.48,-.052),l(.283,-.22),l(-.042,-.17),l(-.178,-.226),l(-.3,.417),l(-.413,.136),l(-.357,-.042),l(-.059,-.188),l(.198,-.397),l(.138,-.616),l(-.039,-.303),l(.258,-.114),l(.403,-.503),l(.45,-1.098),l(-.12,-.115),l(.612,-1.783),l(-.35,-.924),l(-.007,-.42),l(-.146,-.378),l(.255,-.271),l(.891,-.251),l(.55,-.188),l(.531,.439),l(1.822,.047),l(.531,-.26),l(.335,.055),l(.272,.227),l(.15,.242),l(.842,.495),l(.062,.242),l(-.288,.216),l(-1.234,.506),l(-.084,.072),l(-.051,.442),l(.072,.456),l(-.132,.983),l(.057,.938),l(-.043,.199),l(-.458,.229),l(-.482,.045),l(-.288,.129),l(.488,.494),l(.455,.551),l(.163,.198),l(-.347,.371),l(-.506,.655),l(-.17,.455),l(.812,.123),l(.408,.31),l(-.884,.643),l(-.242,.37),l(-.304,.951),l(-.008,.018),
-N(500.121,117.572),l(-.407,-.016),l(-.433,.388),l(-.164,.126),l(-.318,-.105),l(-.102,-.269),l(.03,-.259),l(-.274,-.151),l(-.366,-.082),l(-.244,.234),l(-.343,-.023),l(-.811,-.153),l(-.364,.032),l(-.304,-.16),l(-.437,.094),l(-.266,.143),l(-.23,.043),l(-.064,-.245),l(-.207,-.023),l(-.24,.292),l(-.693,.304),l(-1.185,.224),l(-.711,-.039),l(-.747,-.123),l(-.439,.073),l(-1.498,.673),l(-.567,.13),l(-1.104,.176),l(-.556,-.153),l(-1.532,-.444),l(-.278,.03),l(-.929,.373),l(-.746,.075),l(-.575,-.025),l(-.777,-.166),l(-.222,.001),l(-.142,-.035),l(-.055,.319),l(.102,.452),l(.243,.423),l(-.627,.127),l(-.156,.374),l(-.2,.169),l(-.171,-.041),l(-.114,.127),l(-.39,-.125),l(-.311,.001),l(-.245,-.459),l(-.119,-.093),l(.097,-.175),l(.242,-.197),l(.617,-.403),l(.021,-.175),l(-.049,-.134),l(-.279,-.28),l(-.146,-.053),l(-.487,.368),l(-.23,.041),l(-.137,.064),l(.092,.041),l(-.118,.216),l(-.172,.023),l(-.063,-.047),l(-.076,.088),l(-.297,.058),l(-.332,-.222),l(-.447,-.198),l(-.461,-.157),l(-.395,.046),l(-.849,.548),l(-.337,.286),l(.006,.204),l(-.141,.046),l(-.122,.07),l(-.005,.082),l(-.179,-.169),l(-.604,.206),l(-.689,.185),l(-.594,-.013),l(-.587,-.07),l(-.678,-.267),l(-.963,-.819),l(-1.181,-.479),l(-1.034,-.182),l(-.692,.072),l(-.119,.255),l(-.097,.609),l(-.053,.411),l(-.173,.156),l(-.256,0),l(-.253,-.155),l(-1.12,.243),l(-.423,-.027),l(-.386,-.183),l(-.657,-1.159),l(-.42,.354),l(-.764,-.451),l(-.451,.057),l(-.562,.412),l(-.227,-.382),l(.066,-.127),l(.242,-.17),l(-.116,-.17),l(-.989,-.012),l(-.545,-.013),l(-.088,-.269),l(.571,-.199),l(-.074,-.241),l(-.284,-.198),l(-.454,-.07),l(-.084,-.297),l(.041,-.34),l(.087,-.284),l(-.089,-.255),l(-.396,-.126),l(-.627,-.353),l(-.371,.086),l(-.265,-.084),l(-.004,-.255),l(.171,-.501),l(.131,.059),l(.478,.311),l(.567,-.271),l(-.396,-.283),l(.021,-.124),l(-.296,-.128),l(.03,-.128),l(.571,-.159),l(.152,-.113),l(-.068,-.142),l(-.149,-.088),l(-.337,-.035),l(.01,-.187),l(.18,-.07),l(-.163,-.164),l(-.198,-.117),l(-.009,-.152),l(-.227,-.012),l(.263,-.181),l(.296,-.275),l(.161,-.035),l(.07,-.16),l(-.341,-.042),l(-.573,.12),l(-.905,.164),l(-.166,-.035),l(.046,-.33),l(.127,-.125),l(-.003,-.199),l(-.029,-.286),l(.13,-.264),l(.299,.012),l(.184,-.41),l(.175,-.023),l(.63,-.422),l(.514,.012),l(.133,-.129),l(.479,-.047),l(.128,.211),l(.268,.102),l(.169,.028),l(.529,.022),l(.147,-.129),l(-.067,-.129),l(-.269,-.129),l(.286,-.094),l(.324,.036),l(.117,.082),l(-.219,.223),l(.213,-.026),l(1.053,-.073),l(.619,.042),l(.379,.046),l(.279,.047),l(.155,-.176),l(-.086,-.094),l(-.468,-.035),l(-.212,-.118),l(.275,-.212),l(1.386,-.151),l(.417,-.012),l(.377,-.117),l(-.442,-.012),l(-.592,.023),l(-.215,0),l(-.068,-.146),l(-.611,-.382),l(.325,-.528),l(.926,.14),l(1.244,.048),l(.264,-.117),l(1.086,.321),l(1.051,-.031),l(.414,-.243),l(-.041,-.27),l(.624,-.244),l(.455,-.214),l(1.218,-.573),l(.598,-.215),l(1.039,-.23),l(.889,-.073),l(.758,.07),l(.905,.126),l(.798,.041),l(.753,-.372),l(.216,.527),l(.416,.298),l(.278,.099),l(.592,.013),l(.622,-.144),l(.453,.74),l(.492,.255),l(.574,-.172),l(.391,.056),l(.968,.582),l(1.265,.04),l(1.094,.197),l(.749,-.001),l(1.084,-.272),l(.514,-.044),l(.651,.141),l(.764,.098),l(.787,-.016),l(.554,-.144),l(1.518,-.573),l(.424,-.335),l(1.212,.082),l(.491,.068),l(.226,-.072),l(.761,-.36),l(.41,.041),l(1.326,1.018),l(.031,.028),l(.795,.722),l(.026,.199),l(-.421,.813),l(.033,.412),l(.284,.211),l(1.413,.12),l(.492,.451),l(-.072,.211),l(-.409,-.023),l(-.231,.141),l(-.009,.433),l(-.584,.267),l(-.039,.27),l(.264,.67),l(-.122,.375),l(.224,.492),l(.09,.117),l(.106,-.105),l(.288,.203),l(.039,.207),l(-.229,.281),l(-.287,.535),l(-.06,.128),l(.213,.14),l(.424,.111),l(-.145,.245),l(.099,.421),l(.42,.374),l(.275,.035),l(.023,.308),M(462.617,106.804),l(.241,.211),l(-.019,.287),l(.115,.285),l(.077,.071),l(.593,.355),l(.819,.241),l(.605,.155),l(.152,.121),L(464.943,109),l(-.304,.166),l(-.515,-.072),l(-.94,-.246),l(-.326,.07),l(-.209,.152),l(-1.019,-.012),l(-.357,.384),l(-.109,.273),l(-.833,.316),l(-.612,.282),l(-.222,.258),l(-.307,.152),l(-.268,.293),l(-.255,.082),l(.164,-.258),l(.019,-.141),l(-.062,-.176),l(.584,-.293),l(.22,-.141),l(-.226,-.191),l(-.082,.015),l(-.653,-.056),l(-.229,-.148),l(.326,-.546),l(.387,-.558),l(.678,-.631),l(-.127,-.227),l(-.427,-.197),l(-.105,0),l(.498,-.445),l(.629,-.374),l(.497,-.045),l(.527,.111),l(1.333,.005),
-N(509.077,114.955),l(-.72,-.317),l(-.268,.016),l(-.356,-.433),l(-.374,-.105),l(-.13,-.363),l(.532,-.27),l(.095,-.222),l(-.43,-.176),l(-.027,-.188),l(.63,-.129),l(.094,-.155),l(-.061,-.113),l(-.487,-.21),l(-.351,-.281),l(-.306,-.166),l(-.456,.234),l(-1.058,.492),l(-.374,.445),l(-.642,.188),l(-.254,.255),l(-.014,-.027),l(.094,-.118),l(-.094,-.213),l(-.189,-.071),l(.26,-.095),l(.166,-.047),l(-.261,-.189),l(-.236,-.236),l(.236,-.118),l(.095,-.189),l(-.283,-.047),l(-.354,-.024),l(-.284,-.118),l(-.213,-.212),l(-.236,-.024),l(-.26,-.354),l(-.283,-.142),l(-.048,-.094),l(.166,0),l(.378,0),l(.165,-.236),l(0,-.236),l(-.213,-.024),l(-.188,-.142),l(-.544,-.331),l(-.283,-.354),l(.047,-.284),l(.402,-.142),l(-.119,-.236),l(-.212,-.166),l(-.426,-.071),l(-.284,-.095),l(.071,-.094),l(.071,-.118),l(-.284,-.095),l(-.087,-.212),l(.418,-.308),l(.236,0),l(.473,.024),l(.331,.189),l(.189,.213),l(.638,.189),l(.284,-.047),l(.188,.023),l(.143,.071),l(.26,.189),l(.236,-.047),l(.236,-.095),l(.095,-.331),l(-.118,-.213),l(-.614,-.166),l(-.213,-.307),l(-.143,-.26),l(.095,-.071),l(.143,-.142),l(.268,-.189),l(.229,-.023),l(.023,.166),l(.213,-.047),l(.189,0),l(.142,.189),l(.473,.284),l(.095,.118),l(.118,0),l(.283,.284),l(0,.308),l(.591,.094),l(.449,.142),l(.379,-.047),l(.165,-.213),l(.308,-.331),l(.283,-.094),l(.496,-.284),l(.292,-.449),l(.465,.331),l(.236,.378),l(.26,.189),l(.284,.307),l(.095,.52),l(.142,.236),l(.283,.26),l(.284,.165),l(0,.166),l(.449,.236),l(.473,-.047),l(.378,.071),l(.284,.166),l(.236,.189),l(.095,.189),l(0,.142),l(-.355,-.142),l(-.401,-.047),l(-.213,0),l(-.26,.047),l(-.142,.118),l(-.402,.071),l(-.213,.142),l(-.047,.189),l(-.023,.473),l(-.118,.26),l(-.095,.236),l(-.095,.378),l(.213,.236),l(-.023,.189),l(-.237,-.071),l(-.094,.095),l(-.071,.331),l(-.071,.26),l(-.118,-.047),l(-.094,-.236),l(-.143,-.095),l(-.165,.095),l(-.047,.307),l(.07,.166),l(-.118,.118),l(-.118,.095),l(.095,.26),l(-.363,.91),M(499.844,111.738),l(.709,.061),l(.142,-.047),l(.26,-.071),l(.236,.236),l(.071,.166),l(.378,.142),l(.213,.071),l(.308,-.118),l(.52,0),l(-.071,.213),l(.024,.236),l(.118,.023),l(.331,.166),l(-.071,.236),l(.421,.763),l(-.009,.001),l(-.253,-.133),l(-.416,.038),l(-.512,-.025),l(-.421,-.125),l(-.335,-.211),l(-.294,-.402),l(-.551,-.223),l(-.281,-.417),l(-.265,-.381),l(-.252,-.197),
-N(455.452,122.442),l(.049,-.209),l(-.057,-.128),l(-.812,-.256),l(-.691,-.006),l(-.506,-.116),l(-.484,.017),l(-.121,-.046),l(-.103,-.093),l(.139,-.56),l(.315,-.005),l(-.005,-.088),l(-.009,-.122),l(.069,-.07),l(.083,.157),l(.021,.146),l(.303,.021),l(.172,.055),l(.184,-.076),l(-.014,-.082),l(.108,-.029),l(.157,.105),l(-.037,.093),l(-.099,.006),l(-.04,.053),l(.088,.023),l(.144,.035),l(.094,.046),l(.021,.128),l(.353,.041),l(.846,-.122),l(.509,.016),l(.035,.13),l(.192,.035),l(.608,.064),l(.307,.051),l(.358,-.121),l(.09,.05),l(-.101,.312),l(.163,.11),l(.105,0),l(.325,-.169),l(.286,-.058),l(.078,.052),l(.154,-.07),l(.232,-.146),l(-.083,.187),l(.015,.186),l(-.183,.268),l(-.582,-.046),l(-.349,.081),l(-.335,-.017),l(-1.994,.169),M(445.294,112.196),l(.583,-.884),l(.496,-.472),l(.402,-.386),l(.449,-.842),l(.09,-.029),l(.809,-.076),l(.606,-.146),l(.395,-.429),l(.365,-.159),l(.361,.041),l(.622,.054),l(.532,-.245),l(.507,-.16),l(.09,-.029),l(1.855,-.195),l(.799,-.261),l(.584,-.06),l(1.473,.505),l(.619,.21),l(.388,-.031),l(1.117,-.277),l(.086,-.257),l(-.097,-.327),l(.344,-.216),l(.363,.026),l(.105,0),l(.427,.197),l(.127,.227),l(-.678,.631),l(-.387,.558),l(-.326,.546),l(-.062,-.407),l(-.794,-.056),l(-.743,-.041),l(-.566,-.125),l(-.062,-.144),l(-.459,.186),l(-.248,.123),l(-.403,.012),l(-.031,-.247),l(-.335,.029),l(-.301,.314),l(-.431,.186),l(-.31,.03),l(-.306,-.159),l(-.252,.07),l(-.004,.133),l(.169,.185),l(.169,.34),l(.308,.059),l(.826,.609),l(-.166,.07),l(-.369,-.258),l(-.015,-.105),l(-.276,-.082),l(-.331,-.105),l(-.116,.099),l(-.211,.007),l(.069,.129),l(-.016,.129),l(.338,.164),l(.145,-.012),l(.114,.234),l(-.03,.129),l(-.245,.023),l(-.445,-.457),l(-.341,-.141),l(-.207,-.059),l(-.128,-.012),l(.003,.094),l(-.075,.035),l(.138,.164),l(.102,.105),l(.154,.141),l(.193,.059),l(.153,.035),l(.103,.094),l(-.093,.058),l(-.494,-.046),l(-.253,-.035),l(.035,-.176),l(-.137,-.293),l(-.164,-.188),l(-.401,-.108),l(-.472,-.373),l(.258,-.118),l(.025,-.136),l(-.053,-.122),l(-.182,-.035),l(-.153,.199),l(-.465,.176),l(.245,.224),l(-.25,.371),l(-.05,.249),l(.13,.121),l(.065,.172),l(.311,.338),l(.133,.036),l(.131,.479),l(.579,.421),l(.359,.467),l(-.172,.14),l(-.237,.082),l(.106,-.187),l(-.121,-.187),l(-.142,-.128),l(-.139,-.035),l(-.151,-.047),l(-.29,.175),l(.102,.188),l(.153,.081),l(.08,.316),l(-.193,.187),l(-.652,.141),l(.248,.046),l(.27,.14),l(.391,.058),l(.188,.222),l(.257,-.012),l(.155,.012),l(.048,.126),l(.367,.269),l(.306,.014),l(.138,.292),l(.282,.012),l(.27,0),l(.348,.303),l(.015,.128),l(-.193,.082),l(.238,.782),l(-.153,.175),l(-.185,0),l(-.226,-.385),l(-.222,-.047),l(-.207,-.278),l(-.101,-.142),l(-.17,0),l(-.496,.14),l(-.479,.105),l(-.184,.128),l(.315,.093),l(.013,.188),l(.007,.291),l(.229,.117),l(.153,-.026),l(.225,-.079),l(-.021,.198),l(.235,.175),l(-.519,.093),l(.002,.117),l(-.169,.062),l(-.309,-.086),l(.121,-.21),l(-.186,-.086),l(-.508,-.056),l(-.158,-.092),l(-.008,.206),l(.194,.453),l(.193,.17),l(-.045,.163),l(.209,.204),l(.213,.96),l(-.688,-.31),l(-.331,.071),l(-.298,.439),l(-.442,-.735),l(-.46,-.367),l(-.452,.44),l(-.428,-.353),l(-.127,-.297),l(.212,-.425),l(-.028,-.241),l(-.215,-.269),l(-.491,-.424),l(-.167,-.226),l(.017,-.17),l(.471,-.61),l(.609,.098),l(.425,-.298),l(.202,.042),l(1.668,.663),l(.337,-.1),l(.483,-.355),l(-.266,-.049),l(-.27,-.056),l(-1.204,-.493),l(-1.127,-.083),l(-.367,.058),l(-.66,.058),l(-.427,.143),l(-.89,-1.118),l(.269,-.1),l(.253,.056),l(.218,-.114),l(.122,-.185),l(-.339,-.24),l(-.235,.114),l(-.496,-.042),l(-1.035,-.721),l(-.199,-.325),
-N(504.136,113.458),l(-.327,.328),l(-.377,.03),l(-.421,-.763),l(.071,-.236),l(-.331,-.166),l(-.118,-.023),l(-.024,-.236),l(.071,-.213),l(-.52,0),l(-.308,.118),l(-.213,-.071),l(-.378,-.142),l(-.071,-.166),l(-.236,-.236),l(-.26,.071),l(-.142,.047),l(-.709,-.061),l(-.492,-.451),l(-1.413,-.12),l(-.284,-.211),l(-.033,-.412),l(.421,-.813),l(-.026,-.199),l(-.795,-.722),l(.377,-.108),l(.307,.024),l(.308,-.095),l(.426,-.023),l(.401,-.118),l(.592,.047),l(.591,-.095),l(.378,-.047),l(.291,-.094),l(.087,.212),l(.284,.095),l(-.071,.118),l(-.071,.094),l(.284,.095),l(.426,.071),l(.212,.166),l(.119,.236),l(-.402,.142),l(-.047,.284),l(.283,.354),l(.544,.331),l(.188,.142),l(.213,.024),l(0,.236),l(-.165,.236),l(-.378,0),l(-.166,0),l(.048,.094),l(.283,.142),l(.26,.354),l(.236,.024),l(.213,.212),l(.284,.118),l(.354,.024),l(.283,.047),l(-.095,.189),l(-.236,.118),l(.236,.236),l(.261,.189),l(-.166,.047),l(-.26,.095),l(.189,.071),l(.094,.213),l(-.094,.118),l(.014,.027),
-N(566.651,117.4),l(-.565,-.153),l(-.496,-.054),l(-.264,-.151),l(-.564,.227),l(-.974,.147),l(-.137,-.059),l(.129,-.176),l(-.198,-.077),l(-.678,.03),l(-.739,.315),l(-.592,.486),l(-.589,.064),l(-.745,.495),l(-.351,.03),l(-.368,-.026),l(-.128,-.084),l(-.164,-.409),l(-.199,-.521),l(.185,-.444),l(.099,-.775),l(.029,-.255),l(-.17,-.187),l(-.484,.093),l(.156,-.597),l(-.576,-.45),l(-.153,-.056),l(-.384,.016),l(-.286,.162),l(-.134,.363),l(-.435,.428),l(-.049,.425),l(.006,.255),l(-.208,.228),l(-.442,.158),l(-.133,-.013),l(-.587,-.152),l(-.292,.058),l(-.073,.185),l(.007,.311),l(-.3,.313),l(-.21,.128),l(-.381,.016),l(-.63,-.237),l(-.325,.001),l(-.581,.286),l(-.58,.343),l(-.485,.144),l(-.245,-.041),l(-.129,-.141),l(-.04,-.055),l(.375,-.843),l(-.063,-.377),l(.377,-.377),l(.283,-.503),l(.503,-.346),l(.157,-.22),l(-.126,-.283),l(-.471,-.314),l(-.126,-.409),l(.031,-.472),l(.126,-.22),l(-.126,-.22),l(-.346,0),l(-.44,-.032),l(-.157,-.157),l(-.346,-.188),l(-.251,-.283),l(.125,-.471),l(.472,-.283),l(.629,.126),l(1.069,.094),l(.282,-.188),l(.063,-.409),l(.251,-.157),l(.188,0),l(.032,-.346),l(.188,-.063),l(.251,-.063),l(-.126,-.094),l(-.534,.031),l(-.251,-.125),l(.503,-.094),l(.565,-.095),l(.472,.095),l(.062,-.126),l(.032,-.346),l(-.189,-.314),l(.283,-.314),l(-.031,-.22),l(.346,0),l(.22,.157),l(.252,.22),l(.22,-.157),l(.692,-.188),l(.471,-.346),l(.221,-.251),l(.439,.377),l(.252,.251),l(-.188,.22),l(-.409,.346),l(-.251,.126),l(.126,.188),l(.251,.063),l(.188,.283),l(.409,-.031),l(.345,.005),l(-.302,.147),l(-.441,.196),l(-.024,.246),l(-.196,0),l(-.099,-.172),l(-.516,-.196),l(-.515,-.147),l(-.981,.196),l(-.123,0),l(-.098,.27),l(.049,.196),l(-.196,.074),l(-.098,-.221),l(-.196,.196),l(-.099,.245),l(.099,.27),l(.049,.147),l(.122,.098),l(.589,-.024),l(.564,0),l(.688,-.024),l(.196,.073),l(.49,-.147),l(.368,.098),l(.147,.123),l(.073,.196),l(.393,.074),l(.295,-.049),l(-.024,-.221),l(.343,-.049),l(.442,-.123),l(.221,.024),l(.049,.147),l(.319,.123),l(.122,-.024),l(.049,.172),l(.074,.221),l(.318,-.172),l(.368,-.024),l(.172,.319),l(.196,0),l(.172,-.147),l(.834,-.221),l(.663,.073),l(.539,0),l(.344,-.171),l(.344,-.098),l(.196,.073),l(-.011,.069),l(.023,1.031),l(-.207,.223),l(.077,.305),l(.325,.394),l(.463,-.045),l(.229,-.162),l(.22,.06),l(.692,.039),l(.273,.154),l(.295,.494),l(-.009,.284),l(.028,.246),l(.152,.012),l(.049,.123),l(-.126,.428),l(.245,.237),l(-.152,.36),l(.2,.163),l(-.181,.185),l(-.08,.249),l(-.354,.136),
-N(500.121,117.572),l(-.023,-.308),l(-.275,-.035),l(-.42,-.374),l(-.099,-.421),l(.145,-.245),l(-.424,-.111),l(-.213,-.14),l(.06,-.128),l(.287,-.535),l(.229,-.281),l(-.039,-.207),l(-.288,-.203),l(-.106,.105),l(-.09,-.117),l(-.224,-.492),l(.122,-.375),l(-.264,-.67),l(.039,-.27),l(.584,-.267),l(.009,-.433),l(.231,-.141),l(.409,.023),l(.072,-.211),l(.252,.197),l(.265,.381),l(.281,.417),l(.551,.223),l(.294,.402),l(.335,.211),l(.421,.125),l(.512,.025),l(.416,-.038),l(.253,.133),l(.009,-.001),l(.377,-.03),l(.327,-.328),l(.254,-.255),l(.642,-.188),l(.374,-.445),l(1.058,-.492),l(.456,-.234),l(.306,.166),l(.351,.281),l(.487,.21),l(.061,.113),l(-.094,.155),l(-.63,.129),l(.027,.188),l(.43,.176),l(-.095,.222),l(-.532,.27),l(.13,.363),l(.374,.105),l(.356,.433),l(.268,-.016),l(.72,.317),l(.015,.007),l(-.05,.707),l(-.143,.581),l(.205,.48),l(.494,.252),l(.925,.235),l(.827,.052),l(.424,.097),l(.162,.282),l(.312,.451),l(.687,.463),l(1.902,.513),l(.841,.052),l(.438,-.059),l(1.354,-.262),l(1.192,-.148),l(1.469,-.079),l(.41,-.229),l(.185,-.354),l(-.131,-.905),l(.015,0),l(.441,.025),l(.562,-.13),l(.466,-.3),l(.621,-.654),l(.476,-.328),l(.413,-.144),l(.609,-.032),l(.78,.038),l(.333,-.03),l(.517,-.343),l(.343,-.129),l(.519,.054),l(1.055,.107),l(.402,.437),l(.708,.251),l(.822,.335),l(.788,.066),l(.5,.054),l(.66,.167),l(.597,.336),l(1.803,1.362),l(.655,.506),l(.696,.01),l(.787,-.075),l(.185,.211),l(.038,.848),l(.01,.565),l(.15,.692),l(.078,.028),l(-.145,.241),l(-.084,.339),l(-.246,.807),l(-.49,1.272),l(-.222,.297),l(-.596,.384),l(-.016,.141),l(.119,.663),l(.096,.098),l(.738,.235),l(.026,.183),l(-.661,.935),l(-.034,.155),l(.254,1.085),l(.167,1.283),l(.143,.775),l(.191,.21),l(.209,.041),l(1.198,.275),l(.401,.167),l(.144,.366),l(.046,.437),l(-.425,.553),l(-.853,.795),l(-.853,1.034),l(.802,1.083),l(.71,1.068),l(.353,.464),l(.695,.391),l(1.144,.388),l(.409,.224),l(.168,.38),l(.111,1.34),l(.185,.394),l(.652,.053),l(.186,.281),l(-.036,.974),l(-.188,.255),l(-.209,.072),l(-1,.077),l(-.697,.258),l(-.794,.47),l(-.285,.383),l(-.31,.792),l(-.049,.354),l(-.182,.954),l(-.502,.028),l(-1.079,-.153),l(-.236,-.197),l(-.605,-.253),l(-.403,-.056),l(-1.43,.003),l(-.783,-.041),l(-.602,.072),l(-.475,-.38),l(-.163,-.126),l(-.835,-.026),l(-.576,.001),l(-.465,.014),l(-.212,-.239),l(-.756,-.125),l(-.305,-.183),l(-.162,-.014),l(-.021,-.5),l(-.295,-.128),l(-.103,-.514),l(-.292,-.349),l(-.013,-.639),l(-.309,-.493),l(-.237,.012),l(-.035,-.181),l(-.526,-.126),l(-.807,-.013),l(-.374,.017),l(-.209,.222),l(-.329,.018),l(-.517,.075),l(-.188,.364),l(-.538,.138),l(-.383,.443),l(-.368,.283),l(-.253,.043),l(-1.292,-.689),l(-.958,-.104),l(-.562,-.359),l(-1.088,-.317),l(-.247,-.301),l(-.324,-.282),l(-.497,-.592),l(-.997,-.436),l(-.584,-.083),l(-.194,-.028),l(-.58,-.465),l(-.596,-1.058),l(-.635,-1.114),l(-.209,-.268),l(.005,-.593),l(-.767,-.761),l(-.506,-.719),l(-.921,.143),l(-.46,-.042),l(-.13,-.126),l(-.291,-.056),l(-.191,-.268),l(-.029,-.565),l(-.448,.1),l(-.166,.099),l(-.32,.678),l(-.195,.184),l(-.355,.012),l(-.014,-.12),l(-.351,-.224),l(-.686,-.546),l(.064,-.212),l(-.007,-.395),l(-.164,-.465),l(-.215,-.013),l(-.551,.003),l(-.034,-.325),l(.055,-.579),l(.197,-.622),l(.014,-.508),l(-.112,-.239),l(-.29,-.28),l(-.774,-.603),l(-.436,-.209),l(-1.242,-.925),l(-.533,-.025),l(-.321,.115),L(503,127.106),l(.033,-.819),l(-1.02,-.954),l(-.312,-.351),l(-.002,-.184),l(.133,-.875),l(.235,-.763),l(1.142,-.98),l(-.422,-.761),l(.013,-.254),l(.468,-.596),l(-1.067,-.107),l(-.761,-.208),l(-.065,-.198),l(-.563,-1.086),l(-.69,-1.397),
-N(535.734,133.791),l(.853,-1.034),l(.853,-.795),l(.425,-.553),l(-.046,-.437),l(-.144,-.366),l(-.401,-.167),l(-1.198,-.275),l(-.209,-.041),l(-.191,-.21),l(-.143,-.775),l(-.167,-1.283),l(-.254,-1.085),l(.034,-.155),l(.661,-.935),l(-.026,-.183),l(-.738,-.235),l(-.096,-.098),l(-.119,-.663),l(.016,-.141),l(.596,-.384),l(.222,-.297),l(.49,-1.272),l(.246,-.807),l(.084,-.339),l(.145,-.241),l(.193,.112),l(.937,.193),l(.999,.348),l(.573,.082),l(.534,-.031),l(.636,-.3),l(.22,-.199),l(.001,-.466),l(.119,-.199),l(.568,-.159),l(1.985,-.689),l(.508,-.243),l(.103,-.128),l(.203,-.991),l(.432,-.809),l(1.135,-.205),l(.417,-.2),l(.445,-.356),l(.565,.294),l(1.454,.244),l(.096,.016),l(.646,.011),l(1.217,.05),l(.236,.126),l(.351,.48),l(.04,.055),l(.129,.141),l(.245,.041),l(.485,-.144),l(.58,-.343),l(.581,-.286),l(.325,-.001),l(.63,.237),l(.381,-.016),l(.21,-.128),l(.3,-.313),l(-.007,-.311),l(.073,-.185),l(.292,-.058),l(.587,.152),l(.133,.013),l(.442,-.158),l(.208,-.228),l(-.006,-.255),l(.049,-.425),l(.435,-.428),l(.134,-.363),l(.286,-.162),l(.384,-.016),l(.153,.056),l(.576,.45),l(-.156,.597),l(.484,-.093),l(.17,.187),l(-.029,.255),l(-.099,.775),l(-.185,.444),l(.199,.521),l(.164,.409),l(.128,.084),l(.368,.026),l(.351,-.03),l(.745,-.495),l(.589,-.064),l(.592,-.486),l(.739,-.315),l(.678,-.03),l(.198,.077),l(-.129,.176),l(.137,.059),l(.974,-.147),l(.564,-.227),l(.264,.151),l(.496,.054),l(.565,.153),l(-.192,.145),l(-.574,-.059),l(.01,.269),l(.236,.012),l(.048,.088),l(-.148,.142),l(-.358,.004),l(-.455,.297),l(-.332,-.005),l(-.338,.179),l(-.647,-.144),l(-1.345,.012),l(-1.148,.152),l(-.53,.292),l(-.272,.19),l(-.559,.395),l(-.246,-.023),l(-.258,.214),l(-.464,.413),l(.01,.32),l(.411,.271),l(.01,.336),l(.232,.171),l(-.119,.483),l(.198,.477),l(-.324,.426),l(-.524,.355),l(-.4,.341),l(-.13,.283),l(.223,.478),l(.033,.31),l(-.289,.255),l(-.513,.215),l(-.698,-.039),l(-.997,-.122),l(-.355,.129),l(.35,.336),l(.365,.407),l(.129,.281),l(.088,.437),l(-.199,.255),l(-.315,.115),l(-.513,.031),l(-.416,.115),l(-.292,.228),l(-.224,.424),l(-.288,.834),l(-.139,1.214),l(-.021,.084),l(-.34,.383),l(-.237,.086),l(-1.001,-.375),l(-.562,-.025),l(-.559,.243),l(-.362,.271),l(-.321,.693),l(-.254,.086),l(-.516,-.082),l(-.644,-.039),l(-.283,.072),l(-.597,.441),l(-.412,.369),l(-.188,.34),l(-.232,.876),l(-.099,.903),l(-.069,.184),l(-.247,.156),l(-1.066,.274),l(-1.183,.19),l(-.964,.175),l(-1.234,.12),l(-1.005,-.135),l(-.349,.002),l(-1.187,.218),l(-.742,-.024),l(-.541,-.039),l(-.854,-.235),l(-1.069,-.248),l(-.63,-.194),l(-.887,-.32),
-N(486.696,126.295),l(5.257,-2.711),l(.589,-2.701),l(-.024,-.467),l(-.187,-.508),l(.009,-.255),l(.23,-.355),l(.31,-.214),l(.866,-.174),l(.457,-.371),l(.944,-.883),l(-.059,-.24),l(.23,-.043),l(.266,-.143),l(.437,-.094),l(.304,.16),l(.364,-.032),l(.811,.153),l(.343,.023),l(.244,-.234),l(.366,.082),l(.274,.151),l(-.03,.259),l(.102,.269),l(.318,.105),l(.164,-.126),l(.433,-.388),l(.407,.016),l(.69,1.397),l(.563,1.086),l(.065,.198),l(.761,.208),l(1.067,.107),l(-.468,.596),l(-.013,.254),l(.422,.761),l(-1.142,.98),l(-.235,.763),l(-.133,.875),l(.002,.184),l(.312,.351),l(1.02,.954),L(503,127.106),l(.075,.155),l(.321,-.115),l(.533,.025),l(1.242,.925),l(.436,.209),l(.774,.603),l(.29,.28),l(.112,.239),l(-.014,.508),l(-.197,.622),l(-.055,.579),l(.034,.325),l(.551,-.003),l(.215,.013),l(.164,.465),l(.007,.395),l(-.064,.212),l(.686,.546),l(.351,.224),l(.014,.12),l(-.096,.003),l(-.664,.101),l(-.408,-.056),l(-.157,.057),l(-.103,.127),l(-1.271,.044),l(-.518,.13),l(-.343,.693),l(-.463,.609),l(-.521,.568),l(-4.048,-.132),l(-1.557,-.697),l(-.812,-.277),l(-.118,-.253),l(-.047,-.818),l(.118,-.396),l(-.135,-.366),l(-.973,.048),l(-.141,-.07),l(-.399,-.633),l(-.258,-.196),l(-2.44,-1.101),l(-1.14,-.473),l(-2.034,-.934),l(-.757,-.222),l(-1.129,-.459),l(-.093,-.056),l(-.093,-.056),l(-.311,-.69),l(-.87,-1.632),
-N(479.916,127.377),l(-.082,-.085),l(.047,-.122),l(-.021,-.183),l(-.201,-.128),l(-.183,-.346),l(.398,-.209),l(.041,-.099),l(.526,-.396),l(-.048,-.058),l(-.223,-.099),l(.077,-.151),l(.298,-.25),l(.599,-.006),l(-.14,-.146),l(-.035,-.046),l(.078,-.111),l(.177,-.163),l(.169,-.116),l(.299,-.239),l(-.068,-.058),l(.023,-.163),l(-.09,-.047),l(-.031,-.221),l(-.241,-.157),l(-.222,-.058),l(.204,-.204),l(-.125,-.052),l(-.053,-.116),l(-.12,.058),l(-.335,.052),l(-.388,-.023),l(-.225,-.564),l(.129,-.593),l(.072,-.064),l(-.1,-.507),l(-.42,-.326),l(.126,-.093),l(.036,-.152),l(.117,-.128),l(-.093,-.222),l(.107,-.012),l(.259,-.32),l(-.061,-.112),l(.311,-.001),l(.39,.125),l(.114,-.127),l(.171,.041),l(.2,-.169),l(.156,-.374),l(.627,-.127),l(-.243,-.423),l(-.102,-.452),l(.055,-.319),l(.142,.035),l(.222,-.001),l(.777,.166),l(.575,.025),l(.746,-.075),l(.929,-.373),l(.278,-.03),l(1.532,.444),l(.556,.153),l(1.104,-.176),l(.567,-.13),l(1.498,-.673),l(.439,-.073),l(.747,.123),l(.711,.039),l(1.185,-.224),l(.693,-.304),l(.24,-.292),l(.207,.023),l(.064,.245),l(.059,.24),l(-.944,.883),l(-.457,.371),l(-.866,.174),l(-.31,.214),l(-.23,.355),l(-.009,.255),l(.187,.508),l(.024,.467),l(-.589,2.701),l(-5.257,2.711),l(-.161,.071),l(-2.96,1.541),l(-1.139,.656),l(-.253,.016),l(-.365,-.167),l(-1.902,-1.034),
-N(426.068,126.434),l(-.093,.981),l(.064,.564),l(-.093,.269),l(-.802,.428),l(-.579,.314),l(-1.473,1.138),l(-.126,.354),l(.274,.973),l(-.147,.537),l(-.155,.227),l(-.864,.598),l(-.22,.143),l(-.564,-1.536),l(-.699,-2.242),l(-.323,-.464),l(-.363,-.252),l(-.432,-.181),l(-.484,-.831),l(-.225,-.465),l(-.363,-.28),l(-.452,-.097),l(-.336,-.774),l(-.301,-.888),l(.112,-.509),l(1,-.853),l(.414,-.355),l(.163,-.411),l(.048,-.537),l(-.052,-.594),l(-.026,-.892),l(-.012,-1.429),l(.114,-.439),l(.685,-.627),l(.012,-.184),l(.508,-.185),l(.633,-.455),l(.591,-.228),l(.703,-.016),l(.643,.183),l(.247,.212),l(.059,.241),l(.25,.538),l(.27,.084),l(.417,-.171),l(.584,-.44),l(.401,-.17),l(.034,.354),l(-.265,.567),l(-.638,.511),l(-.275,.468),l(.005,.283),l(.202,.438),l(.508,.466),l(.351,.127),l(.303,.848),l(-.094,.212),l(-.541,.764),l(-.59,.34),l(-1.017,.92),l(-.216,.339),l(.287,.451),l(.587,.55),l(.528,.295),l(.284,.056),l(.396,-.227),l(.316,.084),l(.244,.635),l(.582,.239),
-N(381.402,139.704),l(-.027,-.876),l(.069,-2.006),l(.037,-.382),l(.686,-.314),l(1.512,-.998),l(.963,-.542),l(1.265,.078),l(.397,-.059),l(.181,-.693),l(.864,-.033),l(.777,-.174),l(.527,-.229),l(.524,-.356),l(.484,-.652),l(1.109,-.332),l(1.52,-.701),l(.129,-.227),l(-.296,-.62),l(-.025,-.396),l(.079,-.227),l(.265,-.114),l(1.186,-.12),l(.381,-.186),l(.309,-.553),l(1.022,.022),l(.67,-.018),l(1.826,.004),l(.34,-1.033),l(-.07,-.211),l(-.507,-.322),L(397,126.646),l(-.158,-.465),l(.016,-1.271),l(.022,-.833),l(-.165,-.889),l(-.189,-.211),l(-.563,-.279),l(-.259,-.508),l(.351,0),l(.66,-.143),l(.541,-.256),l(.369,-.566),l(.405,-.312),l(.509,-.086),l(.407,-.157),l(.679,-.27),l(.324,.226),l(.176,.017),l(.249,.024),l(.238,-.142),l(.407,-.51),l(.613,-.426),l(.682,-.355),l(.614,-.171),l(1.16,-.116),l(1.587,-.06),l(.513,-.072),l(.634,-.312),l(.578,.211),l(.564,-.072),l(.585,-.313),l(.343,-.1),l(.939,.012),l(.513,-.015),l(.307,.056),l(.221,.042),l(.322,.113),l(.816,.168),l(.529,-.015),l(.772,-.171),l(.705,-.2),l(.612,-.554),l(.994,.508),l(.339,.099),l(.312,-.143),l(.314,-.241),l(.228,-.156),l(.528,.042),l(.388,.197),l(.162,.269),l(.269,.126),l(.516,-.086),l(1.093,-.158),l(-.012,.184),l(-.685,.627),l(-.114,.439),l(.012,1.429),l(.026,.892),l(.052,.594),l(-.048,.537),l(-.163,.411),l(-.414,.355),l(-1,.853),l(-.112,.509),l(.301,.888),l(.336,.774),l(.452,.097),l(.363,.28),l(.225,.465),l(.484,.831),l(.432,.181),l(.363,.252),l(.323,.464),l(.699,2.242),l(.564,1.536),l(-.204,.156),l(-.241,.383),l(.88,1.605),l(.147,.833),l(.052,.691),l(-.1,.862),l(.101,.748),l(-.16,.622),l(-.158,.495),l(.457,1.156),l(-.061,.664),l(-.086,.17),l(-.666,.47),l(-.249,.128),l(-.152,.283),l(1.272,1.702),l(.249,.917),l(.562,.873),l(.244,.154),l(.544,-.201),l(.702,.165),l(1.028,.347),l(.178,.168),l(.86,1.506),l(.098,.07),l(-.265,.186),l(-1.632,.843),l(-4.012,2.241),l(-1.607,.956),l(-2.308,1.454),l(-.834,.655),l(-3.084,2.617),l(-1.82,.364),l(-1.672,.321),l(-2.176,.408),l(-.146,-.564),l(.161,-.679),l(-.099,-.522),l(-.277,-.352),l(-.309,-.111),l(-.748,-.024),l(-.375,-.167),l(-.588,-.562),l(-.47,.314),l(-.229,-.027),l(-1.111,-1.039),l(-.393,-.28),l(-.082,-.183),l(.096,-.396),l(-.181,-.253),l(-2.472,-1.469),l(-.397,-.253),l(-1.292,-.824),l(-1.924,-1.26),l(-3.283,-2.241),l(-.811,-.575),l(-2.054,-1.344),l(-.895,-.531),l(-.1,-.084),l(-1.414,-.91),l(-4.12,-2.42),l(-2.829,-1.509),
-N(395.704,122.189),l(.259,.508),l(.563,.279),l(.189,.211),l(.165,.889),l(-.022,.833),l(-.016,1.271),l(.158,.465),l(.598,.788),l(.507,.322),l(.07,.211),l(-.34,1.033),l(-1.826,-.004),l(-.67,.018),l(-1.022,-.022),l(-.309,.553),l(-.381,.186),l(-1.186,.12),l(-.265,.114),l(-.079,.227),l(.025,.396),l(.296,.62),l(-.129,.227),l(-1.52,.701),l(-1.109,.332),l(-.484,.652),l(-.524,.356),l(-.527,.229),l(-.777,.174),l(-.864,.033),l(-.181,.693),l(-.397,.059),l(-1.265,-.078),l(-.963,.542),l(-1.512,.998),l(-.686,.314),l(-.037,.382),l(-.069,2.006),l(-1.42,.008),l(-1.718,-.004),l(-2.677,.001),l(-2.511,0),l(-1.635,.04),l(.141,-.28),l(.431,-.411),l(.427,-.085),l(1.296,-.285),l(1.143,-.455),l(.453,-.312),l(1.147,-.85),l(1.149,-.878),l(1.043,-1.104),l(.46,-.693),l(.133,-.509),l(-.05,-.494),l(-.427,-.776),l(-.09,-.678),l(.099,-.508),l(.396,-.636),l(.706,-.863),l(.211,-.65),l(-.063,-.367),l(.071,-.353),l(1.285,-1.203),l(.724,-.481),l(.916,-.327),l(1.266,-.469),l(.73,-.397),l(.558,-.552),l(.537,-.736),l(.466,-.905),l(.829,-1.925),l(.269,-.128),l(.54,-.171),l(.19,.127),l(.684,.848),l(.138,.099),l(1.148,.507),l(.661,-.001),l(.595,.042),l(1.304,-.074),l(.522,-.228),l(.437,-.27),l(.398,.551),l(.256,.099),l(.798,.097),l(.361,0),
-N(480.248,123.437),l(.388,.023),l(.335,-.052),l(.12,-.058),l(.053,.116),l(.125,.052),l(-.204,.204),l(.222,.058),l(.241,.157),l(.031,.221),l(.09,.047),l(-.023,.163),l(.068,.058),l(-.299,.239),l(-.169,.116),l(-.177,.163),l(-.078,.111),l(.035,.046),l(.14,.146),l(-.599,.006),l(-.298,.25),l(-.077,.151),l(.223,.099),l(.048,.058),l(-.526,.396),l(-.041,.099),l(-.398,.209),l(-.07,-.023),l(-.088,.041),l(-.067,.193),l(-.009,.167),l(-.355,.07),l(-.07,-.099),l(-.151,-.022),l(-.372,.051),l(.26,-.291),l(.097,-.361),l(.169,-.227),l(.328,-.681),l(-.017,-.232),l(.181,0),l(.138,-.192),l(.072,-.32),l(.018,-.32),l(.409,-.431),l(.232,-.07),l(.116,-.174),l(-.048,-.157),
-N(184.444,142.729),l(-.367,.82),l(-.518,.821),l(-.186,.763),l(-.179,1.159),l(.017,1.851),l(-.133,1.187),l(-.016,1.13),l(.564,1.737),l(.275,.805),l(.624,.945),l(.76,.903),l(.191,.452),l(.481,.521),l(.529,.974),l(.729,1.228),l(.375,.296),l(.677,.069),l(.436,-.015),l(.577,.154),l(.593,.451),l(.503,.508),l(.773,.069),l(1.016,-.242),l(1.55,-.456),l(1.396,-.3),l(.803,-.157),l(-.02,.542),l(.838,.223),l(.264,-.286),l(.293,-.199),l(-.104,-.247),l(-.393,-.175),l(1.073,-.62),l(.633,-.62),l(.086,-.827),l(.498,-.429),l(-.094,-.477),l(.092,-1.145),l(.254,-.699),l(.625,-.334),l(.164,-.043),l(.757,-.198),l(.701,-.1),l(1.088,-.229),l(1.016,-.37),l(.594,-.058),l(.499,.056),l(1.139,.181),l(.502,-.194),l(.378,.093),l(.62,.507),l(.047,.297),l(-.079,.424),l(-.298,.382),l(-.541,.496),l(-.433,.425),l(-.317,.445),l(-.02,.7),l(-.254,.297),l(-.188,.354),l(.155,.155),l(.337,-.138),l(-.101,.652),l(-.262,1.196),L(205.356,159),l(-.062,.24),l(-.34,-.534),l(-.167,-.452),l(-.072,-.155),l(-.386,.34),l(-.02,.549),l(-.437,.016),l(-.178,.447),l(-.599,.857),l(-.386,-.27),l(-.278,.095),l(.025,.329),l(-2.332,-.006),l(-1.792,-.005),l(-.04,1.24),l(-.999,.032),l(.396,.223),l(.495,.541),l(.624,.231),l(.359,.69),l(.532,.223),l(-.211,.683),l(-1.762,-.007),l(-1.06,.007),l(-1.076,1.812),l(.305,.397),l(-.207,.238),l(.054,.553),l(.044,.454),l(-.704,-.555),l(-.952,-.888),l(-.956,-.761),l(-1.069,-.859),l(-.534,-.352),l(-.053,-.071),l(-.639,-.252),l(-1.048,-.21),l(-.657,.044),l(-.817,.397),l(-1.1,.567),l(-.756,.256),l(-.931,-.069),l(-.724,-.21),l(-.48,-.197),l(-1.305,-.195),l(-.588,-.267),l(-.644,-.422),l(-.935,-.521),l(-.785,-.267),l(-1.711,-.392),l(-.963,-.365),l(-.722,-.366),l(-1.074,-.436),l(-.592,-.352),l(-1.123,-1),l(-.207,-.07),l(-.606,.058),l(-.689,-.14),l(-1.835,-.575),l(-.565,-.536),l(-.503,-.634),l(-.495,-.395),l(-1.049,-.577),l(-.619,-.267),l(-.5,-.494),l(-.742,-.987),l(-.363,-.55),l(-.038,-.113),l(.15,-.155),l(.504,-.086),l(.18,-.17),l(.047,-.184),l(-.331,-.367),l(.457,-.679),l(.041,-.381),l(-.172,-.466),l(-.744,-.959),l(.121,-.297),l(.146,-.17),l(-.07,-.268),l(-.665,-.62),l(-1.495,-1.777),l(-.546,-.493),l(-.963,-1.058),l(-.474,-.522),l(-.815,-.578),l(-.322,-.197),l(-.158,-.268),l(-.058,-.48),l(-.144,-.183),l(-.329,-.197),l(-.609,-.197),l(-.408,-.31),l(-.366,-.522),l(-.271,-.028),l(-.414,.114),l(-.238,-.155),l(-.163,-.367),l(-.005,-.325),l(.459,-.736),l(-.126,-.339),l(-.751,-.62),l(-.439,.255),l(-.375,-.621),l(-.118,-.353),l(-.359,-.211),l(-.61,-.168),l(-.319,-.296),l(-.125,-.254),l(.05,-.381),l(.084,-.269),l(-.185,-.226),l(-.561,-.21),l(-.46,-.098),l(-.46,-.253),l(-.935,-.86),l(-.478,-.706),l(-.281,-.551),l(-.646,-.832),l(-.736,-1.073),l(-.184,-.423),l(-.38,-.678),l(-.242,-.338),l(-.152,-.452),l(.042,-.509),l(.032,-.311),l(-.56,-.239),l(-.795,-.196),l(-.06,-.452),l(-.128,-.155),l(-.458,-.183),l(-.289,.326),l(-.251,.043),l(-1.43,-.647),l(-.285,1.004),l(-.045,.438),l(.033,.084),l(.265,.339),l(.264,.296),l(.028,1.046),l(.088,.509),l(.51,.677),l(.143,.169),l(.643,.267),l(.601,.536),l(.525,.663),l(.602,1.214),l(.44,.282),l(.328,.042),l(.237,.169),l(.325,1.398),l(.102,.169),l(.246,.155),l(.497,.056),l(.133,.056),l(.215,.438),l(.161,.65),l(.445,.79),l(.49,-.071),l(.223,-.142),l(.245,.452),l(.344,1.469),l(.531,1.059),l(.649,1.2),l(.069,.593),l(-.014,.522),l(.26,.353),l(.378,.154),l(.389,-.17),l(.234,-.198),l(.588,.804),l(.258,.579),l(.464,.253),l(.281,.014),l(.133,.311),l(-.196,.537),l(-.136,.127),l(-.691,.595),l(-.254,-.042),l(-.251,-.409),l(-.24,-.734),l(-.617,-.578),l(-.625,-.309),l(-.516,-.479),l(-.834,-.507),l(-1.143,-.986),l(-.416,-.451),l(-.162,-.269),l(.216,-.989),l(-.035,-.254),l(-.488,-1.002),l(-.238,-.381),l(-.327,-.282),l(-.44,-.098),l(-.5,-.31),l(-.675,-.677),l(-.305,.142),l(-.363,-.056),l(-1.262,-.746),l(-.722,-.31),l(-.896,-.973),l(-.139,-.127),l(-.246,-.254),l(.679,.15),l(.599,.013),l(.588,-.284),l(.244,-.326),l(.093,-.636),l(-.01,-.184),l(-.458,-.635),l(-.466,-.452),l(-1.1,-.888),l(-.986,-.493),l(-.402,-.338),l(-.203,-.522),l(-.272,-.649),l(-.091,-.155),l(-.447,-.126),l(-.15,-.353),l(-.026,-.594),l(-.203,-.395),l(-.623,-.734),l(-.434,-.706),l(-.003,-.254),l(.212,-.382),l(-.777,-.62),l(-.254,-.325),l(-.22,-.485),l(.34,-.017),l(2.367,-.155),l(2.381,-.084),l(.316,.31),l(.267,.154),l(1.186,.39),l(2.811,.933),l(3.516,1.112),l(.338,.055),l(1.662,.019),l(1.544,.02),l(.966,.037),l(1.867,-.011),l(.213,-.101),l(.096,-.892),l(1.858,.003),l(1.892,.046),l(.209,.112),l(.631,.662),l(.766,.632),l(.837,.519),l(.708,.491),l(.179,.226),l(.284,.678),l(.318,.847),l(.445,.549),l(1.092,.659),l(1.104,.503),l(.337,.069),l(.501,.011),l(.416,-.158),l(.283,-.37),l(.418,-.413),l(.576,-.541),l(.468,-.201),l(.643,-.018),l(.475,.082),l(.783,.321),l(.412,.252),l(.363,.366),l(.663,1.029),l(.744,1.227),l(.845,1.042),l(.657,.576),l(.268,.253),l(.078,.467),l(.332,.932),l(.336,.592),l(.375,.365),l(.921,.32),l(1.029,.56),l(.264,.069),l(.416,-.116),l(.296,-.001),l(.816,.377),l(.347,.119),
-N(507.047,133.665),l(.055,.197),l(.134,.691),l(-.336,-.028),l(-.513,.513),l(.421,.194),l(.418,-.206),l(.306,.021),l(.698,1.84),l(-.644,.044),l(-1.07,-.05),l(-.185,-.239),l(-.334,-.619),l(-.408,-.054),l(-1.657,-.259),l(.521,-.568),l(.463,-.609),l(.343,-.693),l(.518,-.13),l(1.271,-.044),
-N(606.155,150.953),l(.595,.152),l(.255,.14),l(.25,-.129),l(.273,-.368),l(.015,-.678),l(-.152,-.93),l(.228,-.185),l(.401,-.144),l(.191,-.354),l(-.146,-1.594),l(.133,-.283),l(.811,.32),l(.391,.11),l(.309,.013),l(.17,-.128),l(1.148,-2.25),l(0,-.324),l(-.192,-.408),l(.045,-.212),l(.938,-1.134),l(.136,-.382),l(-.057,-.761),l(.197,-.354),l(1.446,-.883),l(.719,-.512),l(.312,-.129),l(.558,.082),l(.853,.221),l(.295,-.058),l(-.184,-.718),l(.072,-.283),l(.596,-.582),l(.112,-.24),l(.018,-.508),l(.001,-.127),l(.306,-.34),l(.277,-.044),l(.504,.279),l(.397,.435),l(.243,.901),l(.217,.309),l(.287,.041),l(.504,-.031),l(.146,.14),l(.195,1.649),l(.02,.875),l(-.353,.862),l(-.429,.722),l(-.611,.525),l(-.487,.271),l(-.191,.198),l(-.617,.85),l(.075,.465),l(.163,.705),l(-.224,.58),l(0,.268),l(.216,.069),l(.312,-.086),l(.819,-.442),l(.771,-.089),l(.479,-.017),l(.156,.126),l(.277,1.762),l(.202,.324),l(.554,-.074),l(.521,.096),l(.033,.268),l(-.729,1.584),l(.117,.352),l(.228,.098),l(.507,-.003),l(.481,-.045),l(.291,.379),l(.341,.746),l(.378,.266),l(.246,.083),l(.647,-.159),l(.628,-.413),l(.111,.38),l(.153,.239),l(-.502,.355),l(-.53,.61),l(-.442,.581),l(-.582,.455),l(-.193,.185),l(-.08,.085),l(-.158,.071),l(-.645,.06),l(-.436,.172),l(-.528,.342),l(-.394,.595),l(-1.078,.316),l(-.62,.018),l(-.474,-.082),l(-.362,.411),l(-.143,.368),l(-.036,.819),l(-.114,.509),l(.064,.409),l(-.086,.24),l(-.163,.001),l(-.588,.131),l(.739,.884),l(.069,.183),l(.112,.875),l(.254,.14),l(1.091,.953),l(.148,.324),l(.646,1.041),l(.163,.338),l(-.194,.241),l(-.451,.229),l(-.128,.226),l(.231,1.185),l(-.171,.198),l(-.812,.428),l(.178,.38),l(.6,1.436),l(.54,.477),l(.606,.604),l(.203,.479),l(.088,.663),l(-.086,.636),l(.006,.254),l(.488,1.183),l(.586,1.225),l(-.077,.297),l(-1.011,1.559),l(-1.01,1.7),l(-.098,.374),l(-.359,-.181),l(-.075,-.805),l(.461,-.665),l(.174,-.495),l(.122,-.777),l(.287,-.466),l(-.512,-.027),l(-.104,-.084),l(-.004,-.282),l(.195,-.509),l(-.177,-1.524),l(-.246,-.832),l(-.639,-1.185),l(-.488,-1.312),l(-.347,-.846),l(-.179,-.875),l(-.174,-1.736),l(-.117,-.677),l(-.034,-.564),l(-.051,-.212),l(-.344,-.084),l(-.148,-.098),l(-.304,-.917),l(-.516,-.677),l(-.226,-.225),l(-.247,.029),l(-.081,.988),l(-.158,.424),l(-.43,.41),l(-.59,.284),l(-1.089,.511),l(-.359,.622),l(-.298,.297),l(-.196,.142),l(-.237,-.282),l(-.007,-.438),l(-.212,.015),l(-.338,.354),l(-.321,-.013),l(-.166,-.211),l(.147,-.495),l(-.001,-.113),l(-.621,.171),l(-.276,.127),l(-.247,.283),l(-.355,-.126),l(-.002,-.466),l(.553,-1.54),l(.162,-.791),l(.001,-.889),l(-.101,-1.059),l(-.384,-.973),l(-.431,-1.072),l(-.196,-.296),l(-.281,.537),l(-.32,-.126),l(-.526,-.366),l(.482,-.17),l(.312,-.015),l(-.149,-.479),l(-.054,-.268),l(-.684,-.775),l(-.182,-.183),l(-.19,-.028),l(-.407,.1),l(-.38,-.267),l(.086,-.438),l(-.026,-.141),l(-.209,-.112),l(-.365,.043),l(-.577,-.465),l(-.504,-.606),l(-.117,-.244),l(.252,-.341),l(.801,-.527),l(-.194,-1.607),
-N(605.297,153.429),l(-.126,-.264),l(-.269,-.55),l(-.223,-1.213),l(-.611,-1.41),l(-.357,-.395),l(-.73,.354),l(-.393,0),l(-.034,-.084),l(-.242,-.211),l(-.356,-.592),l(-.124,-.042),l(-.152,.127),l(-.026,.537),l(.374,.79),l(-.006,.424),l(-.143,.169),l(-.455,.086),l(-.235,.537),l(-.261,.1),l(-.255,-.437),l(-.311,-.395),l(-.073,-.057),l(-.163,.669),l(-.28,.249),l(-.203,.043),l(-.271,-.536),l(-.495,.636),l(-.359,-.265),l(-.147,-.532),l(-.402,-1.775),l(-.325,-1.409),l(-.352,-.45),l(-.04,-.254),l(.505,-.765),l(.029,-.269),l(-.193,-.21),l(-1.042,-.431),l(-.339,-.323),l(.548,-.61),l(.4,-.299),l(.502,-.13),l(.382,-.101),l(.047,-.155),l(-.126,-.112),l(-1.224,-.938),l(-.494,-.237),l(-.083,-.155),l(.124,-.283),l(.555,-.525),l(.234,-.171),l(1.252,.303),l(.339,.266),l(.372,.266),l(.489,-.06),l(.417,.054),l(.129,.324),l(.053,.479),l(.079,.719),l(.095,.099),l(.537,.109),l(.547,.053),l(.916,-.062),l(.559,-.003),l(2.473,.198),l(.111,.098),l(.057,.127),l(-.012,.79),l(-.159,.34),l(-.938,.767),l(-.498,.13),l(-.651,.356),l(-.131,.283),l(.009,.522),l(.001,.381),l(.23,.281),l(.249,.267),l(.529,.448),l(.224,-.354),l(.395,-1.159),l(.281,-.115),l(.4,-.044),l(.064,.578),l(.627,2.479),l(.037,.466),l(.194,1.607),l(-.801,.527),l(-.252,.341),
-N(627.408,186.411),l(-.086,.337),l(-.495,.35),l(-.11,.575),l(-.644,.089),l(-.05,-.478),l(-.309,-.163),l(-.279,.28),l(-.244,.394),l(-.204,-.083),l(-.118,-.239),l(.213,-.398),l(-.041,-.21),l(-.055,-.226),l(-.261,-.238),l(-.447,-.119),l(-.106,-.466),l(-.571,.013),l(-.448,.17),l(.013,-.104),l(.128,-.297),l(-.15,-.183),l(-.411,.212),l(-.301,-.07),l(-.38,-.38),l(-.116,-.508),l(.064,-.282),l(-.151,-.438),l(-.229,-.169),l(-.388,.043),l(-.39,-.719),l(-.209,-.508),l(-.3,-.324),l(-.311,-.155),l(-.456,-.395),l(-.343,.1),l(-.218,.142),l(-.216,-.381),l(-.04,-.607),l(.163,-.749),l(.559,-1.738),l(.29,-.848),l(-.087,-.044),l(.098,-.374),l(1.01,-1.7),l(1.011,-1.559),l(.077,-.297),l(-.586,-1.225),l(-.488,-1.183),l(-.006,-.254),l(.086,-.636),l(-.088,-.663),l(-.203,-.479),l(-.606,-.604),l(-.54,-.477),l(-.6,-1.436),l(-.178,-.38),l(.812,-.428),l(.171,-.198),l(-.231,-1.185),l(.128,-.226),l(.451,-.229),l(.194,-.241),l(-.163,-.338),l(-.646,-1.041),l(-.148,-.324),l(-1.091,-.953),l(-.254,-.14),l(-.112,-.875),l(-.069,-.183),l(-.739,-.884),l(.588,-.131),l(.163,-.001),l(.086,-.24),l(-.064,-.409),l(.114,-.509),l(.036,-.819),l(.143,-.368),l(.362,-.411),l(.474,.082),l(.62,-.018),l(1.078,-.316),l(.394,-.595),l(.528,-.342),l(.436,-.172),l(.645,-.06),l(.158,-.071),l(.08,-.085),l(.541,.166),l(.295,.182),l(.118,.168),l(.01,.423),l(-.106,.805),l(.066,.367),l(.186,.154),l(.423,-.003),l(.489,-.2),l(.414,-.045),l(.045,.113),l(.249,1.311),l(-.085,.41),l(-.528,1.569),l(-.117,.438),l(-.027,.494),l(.145,.324),l(.481,.138),l(.37,-.411),l(1.173,-1.178),l(.346,-.03),l(.835,.348),l(.59,.265),l(.223,-.072),l(.543,-.257),l(.2,-.538),l(.286,-.453),l(.403,.012),l(.893,.192),l(.266,.153),l(.052,.282),l(.285,.535),l(.688,.659),l(.435,.632),l(.058,1.524),l(.107,.366),l(.255,.464),l(.979,1.279),l(.419,.703),l(.157,.507),l(.002,.945),l(-.121,.438),l(-.808,.64),l(-.301,-.167),l(-.599,-.109),l(-.575,-.039),l(-.558,.074),l(-.798,-.066),l(-1.172,.091),l(-.383,.101),l(-.521,.441),l(-.92,1.233),l(-.146,.297),l(-.076,.382),l(.026,.635),l(.219,.648),l(.487,.717),l(.16,.479),l(-.146,.176),l(-.026,-.063),l(-.286,-.183),l(-.458,-.084),l(-.9,-.887),l(-.434,-.154),l(-.304,-.014),l(-.572,.227),l(-.391,-.112),l(-.29,-.141),l(-.337,-.014),l(0,-.282),l(.19,-1.243),l(-.107,-.184),l(-.719,-.055),l(-.248,-.084),l(-.521,.043),l(-.443,.212),l(-.244,.297),l(.207,.593),l(-.103,.339),l(-.318,.707),l(.083,.579),l(.054,.41),l(-.293,.664),l(-.583,1.187),l(-.7,1.682),l(-.255,1.314),l(.104,1.171),l(.172,.296),l(.229,.169),l(.55,-.072),l(.396,-.142),l(.252,.07),l(.135,.353),l(.009,.325),l(-.08,.466),l(.141,.282),l(.178,.211),l(.271,-.094),l(.17,.46),l(.209,.974),l(-.032,.254),l(.127,.737),l(.434,.871),l(.167,.155),l(.801,.281),l(.539,.112),l(.467,-.058),l(.294,.197),l(.266,.612),l(.664,.544),l(.212,.145),
-N(204.31,158.989),l(-.175,.412),l(.612,-.173),l(.026,.429),l(-.419,1.241),l(.178,.269),l(-.237,.795),l(.189,.318),l(-.092,.397),l(-.358,.875),l(-.3,.35),l(-.36,.032),l(-.054,.286),l(-.388,.238),l(0,.286),l(-.69,.016),l(.215,-4.297),l(-.025,-.329),l(.278,-.095),l(.386,.27),l(.599,-.857),l(.178,-.447),l(.437,-.016),
-N(200.276,169.481),l(-.151,-.056),l(-.928,-.342),l(-.614,.032),l(-.766,-.032),l(-.608,-.239),l(-.909,-.656),l(-.513,-.419),l(-.044,-.454),l(-.054,-.553),l(.207,-.238),l(-.305,-.397),l(1.076,-1.812),l(1.06,-.007),l(1.762,.007),l(.211,-.683),l(-.532,-.223),l(-.359,-.69),l(-.624,-.231),l(-.495,-.541),l(-.396,-.223),l(.999,-.032),l(.04,-1.24),l(1.792,.005),l(2.332,.006),l(-.215,4.297),l(.69,-.016),l(.303,.095),l(.311,.302),l(.14,-.191),l(-.066,-.381),l(.336,.157),l(.458,.367),l(-1.507,1.208),l(-.499,.238),l(-.177,.493),l(.162,.604),l(-.438,.302),l(-.467,.048),l(-.043,.254),l(.164,.159),l(-.351,.111),l(-.184,.302),l(-.22,-.016),l(-.565,.461),l(-.012,.223),
-N(204.413,165.093),l(.312,-.03),l(.612,-.27),l(.639,-.058),l(.743,.126),l(.478,.069),l(1.443,.04),l(.699,-.228),l(.379,-.199),l(.567,.267),l(.788,-.03),l(.763,-.101),l(.63,-.001),l(.5,.126),l(.564,.253),l(-.038,.353),l(-.102,.226),l(.228,.282),l(.787,.238),l(.557,.069),l(.244,.524),l(-1.425,.486),l(-.424,.229),l(-.248,.086),l(-.463,-.097),l(-.328,-.182),l(-.259,-.013),l(-.294,.242),l(-.503,.794),l(-1.207,.997),l(-.725,-.42),l(-.513,.583),l(-.882,.034),l(-.005,.961),l(-.293,.412),l(-.29,.143),l(-1.001,.125),l(-.311,-.661),l(-.025,-.085),l(-.478,-.3),l(.085,-.731),l(-.128,-.175),l(-.272,0),l(-.541,-.276),l(-.433,.34),l(-.365,-.016),l(-.066,-.271),l(-.565,-.35),l(-.409,-.08),l(-.208,-.418),l(-.677,-.17),l(.438,-.302),l(-.162,-.604),l(.177,-.493),l(.499,-.238),l(1.507,-1.208),
-N(205.532,170.085),l(.035,.076),l(-.203,.057),l(.01,.265),l(-.237,.334),l(-.68,-.046),l(-.853,-.139),l(-1.697,-.505),l(-1.305,-.435),l(-.325,-.21),l(.012,-.223),l(.565,-.461),l(.22,.016),l(.184,-.302),l(.351,-.111),l(-.164,-.159),l(.043,-.254),l(.467,-.048),l(.677,.17),l(.208,.418),l(.409,.08),l(.565,.35),l(.066,.271),l(.365,.016),l(.433,-.34),l(.541,.276),l(.272,0),l(.128,.175),l(-.085,.731),
-N(242.38,173.617),l(-.128,-.105),l(-.84,.171),l(-.534,.156),l(-.414,.2),l(-.056,.288),l(.048,.497),l(-.129,.396),l(-.227,-.027),l(-.381,.059),l(-.99,1.758),l(-.172,.722),l(-.241,.722),l(-.709,1.191),l(.402,.025),l(.234,-.1),l(.384,-.017),l(.31,.606),l(.855,1.45),l(.103,.395),l(-.226,1.132),l(.099,.353),l(.401,.309),l(.429,.548),l(.397,.252),l(.496,-.017),l(1.163,-.12),l(1.167,-.05),l(.521,.181),l(.64,.321),l(.188,.253),l(.847,.998),l(.554,.576),l(.144,0),l(.522,-.13),l(.76,-.174),l(1.99,-.224),l(.644,.081),l(-.409,.525),l(-.085,1.004),l(-.379,.511),l(-.147,.326),l(.026,.254),l(.035,.438),l(.048,.367),l(.162,.804),l(.447,.789),l(.256,.437),l(.486,.647),l(.121,.282),l(-.731,.612),l(-.479,.526),l(.51,.491),l(.797,1.182),l(-.52,.286),l(-.834,.57),l(-.412,.158),l(-.463,.017),l(-2.812,-.082),l(-.64,-.024),l(-.042,.325),l(-.013,1.031),l(.178,.154),l(.896,.122),l(.177,.084),l(.293,.408),l(.052,.367),l(-.384,-.04),l(-.417,-.11),l(-.687,.032),l(-.493,.187),l(-.111,.085),l(-.001,1.071),l(0,.554),l(.192,.197),l(.688,.363),l(.192,.183),l(-.031,.777),l(.399,.562),l(.031,.212),l(-.326,1.428),l(-.706,4.411),l(-.073,.382),l(-.133,.198),l(-.156,-.14),l(-.575,-.703),l(-.237,-.126),l(-.161,.058),l(-.448,.031),l(1.155,-1.956),l(.035,-.198),l(-.127,-.069),l(-1.299,-.84),l(-.509,-.209),l(-.708,.442),l(-.397,-.182),l(-.523,-.421),l(-.452,.427),l(-.337,.157),l(-.496,.031),l(-1.038,-.008),l(-.573,-.152),l(-.092,-.281),l(.004,-.396),l(-.173,-.296),l(-.479,-.039),l(-.366,-.14),l(-.078,-.282),l(-.251,-.761),l(-.988,-.672),l(-.526,-.364),l(-.208,-.62),l(-.208,-.324),l(-.513,-.435),l(-.897,-.418),l(-.927,-.107),l(-.081,-.112),l(-.269,-.162),l(-.197,-.118),l(-.709,-.631),l(-.128,-.056),l(-.89,.401),l(-.67,.061),l(-.977,-.277),l(-.355,-.309),l(-.166,-.493),l(-.227,-.225),l(-1.432,-.656),l(-1.496,-.803),l(.033,-.068),l(-.117,-.311),l(-.181,-.282),l(.108,-.212),l(.509,-.114),l(.465,.112),l(.186,-.325),l(-.348,-.564),l(.086,-.424),l(.314,-.227),l(.878,-.058),l(.193,.042),l(.41,-.227),l(.445,-.679),l(.45,-.961),l(.651,-1.061),l(-.122,-.268),l(-.56,-.408),l(-.071,-.184),l(.306,-.721),l(.089,-.523),l(-.149,-.861),l(-.371,-.86),l(.085,-.254),l(.49,-.143),l(.135,-.212),l(-.088,-.198),l(-.565,-.479),l(-.042,-.226),l(.103,-.198),l(.242,-.326),l(.036,-.254),l(-.173,-.282),l(-.739,-.719),l(-.364,-.396),l(.256,-.753),l(.228,-.082),l(-.045,-.45),l(.19,.082),l(.085,.307),l(.584,-.409),l(.094,-.43),l(.322,-.062),l(-.509,-1.038),l(-.228,-.149),l(-.084,-.327),l(.142,.075),l(.42,.338),l(.397,.507),l(.22,.508),l(.235,.197),l(.199,-.17),l(.147,-.241),l(-.332,-.776),l(.02,-.212),l(.176,-.297),l(.445,-.34),l(.399,-.297),l(.501,-.736),l(.327,-.156),l(.684,-.101),l(.217,-.382),l(-.104,-.381),l(.174,-.777),l(.067,-.65),l(.207,-.48),l(.498,-.439),l(.429,-.283),l(.592,-.242),l(.113,0),l(.374,.206),l(.22,.443),l(.281,-.34),l(.031,-.438),l(.199,-.551),l(.22,-.071),l(.267,.126),l(.855,.041),l(.562,-.001),l(.623,-.27),l(.237,-.254),l(.476,-.298),l(.848,-.256),l(.435,-.396),l(.278,-.551),l(.333,-.255),l(.469,-.17),l(.58,.013),l(.526,.338),l(.155,.126),l(.155,.339),l(-.285,.332),
-N(408.6,174.04),l(-.062,.777),l(.164,.762),l(.388,.718),l(-.316,.962),l(-.19,.566),l(-.223,.298),l(-.656,.414),l(-.095,.34),l(.116,.592),l(-.078,.368),l(-.433,.13),l(-.257,.03),l(-.237,.397),l(.002,.381),l(.003,.48),l(-.012,.876),l(-.09,.989),l(.217,1.439),l(-.121,1.188),l(.006,.234),l(-.333,.015),l(-1.232,.144),l(-.669,.052),l(-.106,-.205),l(-.295,-1.072),l(.188,-.708),l(.026,-.833),l(-.036,-.537),l(-.135,-.974),l(-.006,-.862),l(-.035,-.522),l(.013,-.579),l(-.442,-1.311),l(-.164,-.691),l(-.403,-.323),l(-.468,-.294),l(-.18,-.395),l(.141,-.594),l(.046,-.424),l(.062,-.142),l(.24,-.157),l(.366,-.553),l(.415,-.271),l(.418,-.045),l(.739,.095),l(.337,-.158),l(.415,-.468),l(.237,-.764),l(-.131,-.367),l(.577,-.3),l(.321,-.073),l(.339,.28),l(.727,.589),l(.902,.503),
-N(394.266,178.814),l(.191,-.17),l(-.02,-.41),l(-.261,-1.934),l(.125,-.34),l(.271,-.157),l(2.119,-.041),l(.867,.037),l(1.429,.006),l(.976,-.458),l(.161,.032),l(.595,.119),l(-.25,.849),l(.05,.254),l(.633,.915),l(.244,.451),l(-.188,.721),l(.02,.396),l(.265,1.114),l(.181,.592),l(.503,.788),l(.032,.155),l(-.286,.242),l(-.174,.382),l(.01,1.314),l(-.011,.72),l(.021,.551),l(.18,.479),l(.468,.577),l(.752,.608),l(-.503,.682),l(-.304,.099),l(-.593,-.013),l(-.992,.144),l(-.463,.185),l(-.188,.098),l(-.898,.469),l(-1.263,.398),l(-.942,.412),l(-.958,.567),l(-.578,-.324),l(-.945,-.436),l(-.074,-.124),l(-.066,-.741),l(-.554,-1.155),l(-.263,-.747),l(-.103,-.706),l(.327,-1.005),l(.437,-1.274),l(.521,-.851),l(.203,-.595),l(-.334,-1.438),l(-.189,-1.285),l(-.178,-.154),
-N(400.72,175.499),l(1.013,.163),l(.611,.166),l(.29,.041),l(-.046,.424),l(-.141,.594),l(.18,.395),l(.468,.294),l(.403,.323),l(.164,.691),l(.442,1.311),l(-.013,.579),l(.035,.522),l(.006,.862),l(.135,.974),l(.036,.537),l(-.026,.833),l(-.188,.708),l(.295,1.072),l(.106,.205),l(-.452,.035),l(-.479,.128),l(-.368,.212),l(-.023,.04),l(-.752,-.608),l(-.468,-.577),l(-.18,-.479),l(-.021,-.551),l(.011,-.72),l(-.01,-1.314),l(.174,-.382),l(.286,-.242),l(-.032,-.155),l(-.503,-.788),l(-.181,-.592),l(-.265,-1.114),l(-.02,-.396),l(.188,-.721),l(-.244,-.451),l(-.633,-.915),l(-.05,-.254),l(.25,-.849),
-N(383.772,190.418),l(.041,-.919),l(.105,-.565),l(.247,-.849),l(.059,-.452),l(-.131,-.282),l(-1.264,-1.334),l(-.592,.032),l(-.369,-.097),l(-.194,-.183),l(-.05,-.183),l(.501,-.865),l(.059,-.438),l(-.119,-.55),l(.062,-.17),l(.047,-.099),l(.602,-.554),l(.188,-.354),l(-.179,-.21),l(-.296,-.549),l(.03,-.127),l(.158,-.199),l(.304,-.03),l(.548,.223),l(.304,.012),l(.19,-.143),l(-.051,-.226),l(-.648,-.561),l(-.309,-.351),l(.332,-.37),l(.125,-.283),l(-.197,-.31),l(-.695,-.405),l(-.214,-.409),l(.264,-.623),l(.379,-.397),l(.522,-.54),l(.352,-.059),l(.566,.321),l(.455,.436),l(.35,-.228),l(.362,-.469),l(.571,-.483),l(.239,-.114),l(.257,.041),l(.147,.211),l(.004,.297),l(.117,.381),l(.148,.239),l(.352,-.059),l(.604,-.399),l(.159,-.1),l(.259,.168),l(.545,-.003),l(.308,.252),l(.15,.465),l(.52,.562),l(.452,.223),l(.354,.083),l(.368,-.115),l(.446,-.257),l(.608,-.159),l(.769,-.075),l(.644,.166),l(.63,.434),l(.178,.154),l(.189,1.285),l(.334,1.438),l(-.203,.595),l(-.521,.851),l(-.437,1.274),l(-.327,1.005),l(.103,.706),l(.263,.747),l(.554,1.155),l(.066,.741),l(-.119,-.201),l(-.289,-.197),l(-.208,.015),l(-.143,.24),l(-.096,.042),l(-.48,-.027),l(-.705,-.167),l(-.608,-.083),l(-2.352,.062),l(-1.279,.243),l(-.575,.199),l(-1.07,.369),l(-1.739,.781),l(-.701,.425),l(-.256,-.013),l(-.075,-.032),
-N(627.408,186.411),l(.035,.024),l(.523,.098),l(1.061,1.198),l(.693,.916),l(.506,.762),l(.081,.579),l(-.023,.805),l(-.134,.862),l(.07,1.073),l(-.07,.636),l(.097,.494),l(.196,.381),l(.53,.493),l(.338,.536),l(.705,1.608),l(.062,.127),l(-.366,-.069),l(-.895,-.055),l(-.401,.142),l(-.175,-.07),l(-.521,-.437),l(-.885,-.605),l(-.6,-.337),l(-1.231,-.675),l(-1.02,-.732),l(-.217,-.254),l(-.16,-.988),l(-.438,-.691),l(-.895,-.817),l(-.195,-.663),l(.039,-.494),l(.03,-.283),l(-.107,-.409),l(-.399,-.634),l(-.347,-1.849),l(-.188,-.72),l(.043,-.362),l(.448,-.17),l(.571,-.013),l(.106,.466),l(.447,.119),l(.261,.238),l(.055,.226),l(.041,.21),l(-.213,.398),l(.118,.239),l(.204,.083),l(.244,-.394),l(.279,-.28),l(.309,.163),l(.05,.478),l(.644,-.089),l(.11,-.575),l(.495,-.35),l(.086,-.337),M(643.95,196.042),l(.081,.044),l(.375,.408),l(.397,.141),l(.861,.083),l(.413,.168),l(.761,.436),l(.335,.042),l(.337,-.1),l(-.503,-.535),l(.169,-.551),l(.365,-.608),l(.528,-1.258),l(.584,-.27),l(1.481,-.342),l(1.018,-.299),l(.428,-.326),l(.524,-1.021),l(.523,-.323),l(.87,-1.117),l(.22,-.212),l(.244,-.147),l(.112,-.068),l(.084,.126),l(.062,.37),l(.234,-.012),l(.111,.259),l(.309,.271),l(.383,-.271),l(1.234,-.42),l(-.025,-.086),l(-.197,-.197),l(.013,-.247),l(.024,-.111),l(-.148,-.444),l(-.11,-.174),l(.167,-.042),l(.188,.143),l(.085,-.016),l(.449,-.084),l(.161,-.283),l(-.036,-.24),l(-.478,-.366),l(.197,-.396),l(.436,-.071),l(.511,.041),l(.154,-.605),l(.408,-.313),l(.284,-.48),l(.531,-.58),l(.498,-1.032),l(.075,-.17),l(.322,.465),l(.33,.098),l(.315,-.424),l(.305,.494),l(.351,.282),l(.402,.211),l(.075,.338),l(-.182,.354),l(-.234,.452),l(.037,.198),l(.631,-.128),l(.472,-.128),l(.115,.226),l(-.349,.495),l(.742,-.1),l(.357,-.085),l(.269,.056),l(1.035,.662),l(.345,.14),l(.1,.24),l(-.158,.269),l(-.201,.155),l(-.44,.143),l(-.594,.029),l(-.683,-.083),l(-.355,.311),l(.096,.254),l(.888,.69),l(-.161,.311),l(-.458,.199),l(-.646,.1),l(-.518,.114),l(-.067,.15),l(-.182,-.09),l(-.753,-.292),l(-.446,-.04),l(-.624,.018),l(-.651,-.081),l(-.748,-.081),l(-.464,.017),l(-.247,.157),l(-.381,.638),l(-.119,.565),l(.106,.988),l(-.22,.383),l(-.646,.244),l(-.218,.34),l(.076,.748),l(-.928,1.785),l(-.387,.299),l(-.864,.175),l(-.465,.172),l(-.467,.356),l(-.287,.03),l(-.559,-.152),l(-.524,-.223),l(-.557,-.251),l(-.431,-.11),l(-.479,.074),l(-.531,.441),l(-.403,.525),l(-.528,.342),l(-.399,.172),l(-.543,-.11),l(-.526,-.223),l(-.255,.001),l(-.928,.416),l(-.446,-.28),l(-.304,-.083),l(-1,-.983),l(-.253,-.295),l(-.288,-.792),
-N(274.556,195.884),l(.06,-.212),l(-.332,-.563),l(-.49,-1.127),l(-.246,-.832),l(-.185,-.295),l(-.561,-.067),l(-.532,-.675),l(-.571,-.831),l(.328,-.694),l(.095,-.467),l(-.078,-.777),l(.169,-.17),l(1.131,-.091),l(.183,-.27),l(.082,-.862),l(.142,-.496),l(.015,-.339),l(.326,-.312),l(.382,-.057),l(1.392,.463),l(.465,.042),l(.083,-.41),l(.141,-.085),l(.337,.027),l(.833,.012),l(.863,-.03),l(.723,.069),l(.63,.182),l(.999,.427),l(-.647,.876),l(-.391,.751),l(-.137,.594),l(.094,.381),l(.134,.635),l(.086,.664),l(.521,.844),l(.029,.438),l(-.424,1.472),l(-.489,.963),l(-1.05,-.488),l(-.319,.001),l(-.534,.385),l(-.398,.059),l(-.418,-.139),l(-.642,-.124),l(-.172,.156),l(-.2,.326),l(.611,1.014),l(-.528,-.054),l(-1.108,-.276),l(-.4,-.04),
-N(285.859,190.719),l(.015,.422),l(-1.102,1.646),l(-.427,.765),l(-.439,.992),l(-.464,.681),l(-.299,.214),l(-.56,-.025),l(-1.11,-.389),l(-.882,.613),l(-.225,-.069),l(-.649,-.505),l(.489,-.963),l(.424,-1.472),l(-.029,-.438),l(-.521,-.844),l(-.086,-.664),l(-.134,-.635),l(-.094,-.381),l(.137,-.594),l(.391,-.751),l(.647,-.876),l(.218,.093),l(1.033,.294),l(.55,.196),l(.799,.549),l(1.264,1.084),l(.545,.564),l(.317,.465),l(.193,.028),
-N(429.505,210.684),l(-.695,-.533),l(-.351,.13),l(-.68,.513),l(-.536,.414),l(-.112,-.177),l(-.392,-.86),l(-1.381,-1.344),l(.184,-.295),l(.413,-.229),l(.803,.307),l(.343,-.681),l(-.052,-.296),l(-.274,-.253),l(-.39,-.521),l(-.116,-.366),l(.058,-.495),l(.127,-.1),l(.909,-.146),l(.604,-.243),l(.125,-.213),l(.167,-.807),l(.174,-.185),l(.239,-.029),l(.193,.14),l(.341,.479),l(.405,.521),l(.386,.195),l(.287,-.016),l(.188,-.228),l(.362,-.482),l(.29,.253),l(.167,.578),l(.146,.112),l(.304,.068),l(.255,-.114),l(.184,-.68),l(.243,-1.089),l(.131,-1.229),l(.229,-1.047),l(-.114,-.338),l(-.161,-.127),l(-.384,-.082),l(-.528,-.208),l(-.242,-.31),l(-.132,-.437),l(.008,-.109),l(.021,-.3),l(.157,-.284),l(.492,-.398),l(.556,-.441),l(.094,-.354),l(-.389,-.902),l(-.369,-.322),l(-.592,-.067),l(-.939,.5),l(-.463,-.025),l(-.146,-.253),l(-.068,-.734),l(.077,-.679),l(.396,-.468),l(.56,.109),l(.863,.023),l(.878,-.076),l(.271,.055),l(.479,.04),l(.56,.124),l(.576,.194),l(.864,.334),l(.863,.292),l(.271,-.086),l(-.1,-.861),l(.159,-.185),l(.303,-.312),l(.365,-.497),l(.158,-.523),l(.222,-1.287),l(.255,-.228),l(.479,-.102),l(.975,-.175),l(.367,.054),l(.624,.138),l(.895,.093),l(.751,-.287),l(.128,.197),l(-.031,.156),l(-.398,1.203),l(-.558,.837),l(-.349,.821),l(-.094,.551),l(-.156,.764),l(-.196,2.021),l(-.254,1.342),l(-.115,.61),l(-.169,.708),l(-.139,.523),l(-.459,.427),l(-.525,.229),l(-.809,.599),l(-.41,.454),l(-.47,.836),l(-.343,.751),l(-.193,1.159),l(-.074,.396),l(.122,.72),l(-.086,.706),l(-1.025,.938),l(-.364,.229),l(-.931,.811),l(-.554,.399),l(-.57,.328),l(-.147,-.211),l(-.042,-.664),l(-.054,-.424),l(-1.495,.532),l(-.327,.581),l(-.443,.271),l(-.177,-.013),l(-.484,-.336),
-N(425.506,195.522),l(.045,-.495),l(.88,.093),l(1.773,.088),l(.831,.038),l(1.022,.149),l(-.396,.468),l(-.077,.679),l(.068,.734),l(.146,.253),l(.463,.025),l(.939,-.5),l(.592,.067),l(.369,.322),l(.389,.902),l(-.094,.354),l(-.556,.441),l(-.492,.398),l(-.157,.284),l(-.021,.3),l(-.008,.109),l(.132,.437),l(.242,.31),l(.528,.208),l(.384,.082),l(.161,.127),l(.114,.338),l(-.229,1.047),l(-.131,1.229),l(-.243,1.089),l(-.184,.68),l(-.255,.114),l(-.304,-.068),l(-.146,-.112),l(-.167,-.578),l(-.29,-.253),l(-.362,.482),l(-.188,.228),l(-.287,.016),l(-.386,-.195),l(-.405,-.521),l(-.341,-.479),l(-.193,-.14),l(-.239,.029),l(-.174,.185),l(-.167,.807),l(-.125,.213),l(-.604,.243),l(-.909,.146),l(-.127,.1),l(-.058,.495),l(.116,.366),l(.39,.521),l(.274,.253),l(.052,.296),l(-.343,.681),l(-.803,-.307),l(-.413,.229),l(-.184,.295),l(-.038,-.037),l(-.563,-.493),l(-.532,-.55),l(-.259,-.466),l(-1.318,-1.169),l(.286,-.312),l(-.369,-.281),l(-.528,-.056),l(-.918,-1.438),l(.382,-.297),l(.111,-.1),l(-.321,-.395),l(-.464,-.14),l(-.29,-.564),l(-.369,-.451),l(.319,-.17),l(.541,-.411),l(.223,-.396),l(.291,-.976),l(.089,-.295),l(.415,.07),l(.495,.013),l(-.064,-.211),l(-.56,-.352),l(-.561,-.451),l(.208,-.042),l(.271,-.128),l(.142,-.617),l(.83,-.043),l(.927,.008),l(1.245,.021),l(.575,-.032),l(-.001,-.155),l(-.02,-.551),l(-.026,-1.836),
-N(422.536,195.513),l(1.005,-.007),l(1.965,.017),l(.026,1.836),l(.02,.551),l(.001,.155),l(-.575,.032),l(-1.245,-.021),l(-.927,-.008),l(-.83,.043),l(.033,-.146),l(-.049,-.297),l(-.144,-.084),l(-.416,-.098),l(.287,-.467),l(.447,-.523),l(.335,-.58),l(.066,-.403),M(419.636,193.273),l(-.484,-.049),l(-.049,-.218),l(.049,-.291),l(.242,-.097),l(.024,-.146),l(0,-.291),l(.17,-.097),l(.169,-.121),l(.219,.048),l(.218,.048),l(.097,.194),l(-.193,.169),l(-.146,.243),l(-.17,.339),l(-.146,.267),
-N(222.291,207.801),l(.188,-.126),l(.264,-.312),l(.585,-1.061),l(.038,-.269),l(-.209,-.733),l(.058,-.391),l(-.478,.617),l(-.732,.623),l(-.333,-.098),l(-.601,-.324),l(-.408,-.408),l(.389,-.283),l(.1,-.24),l(-.167,-.579),l(.005,-.438),l(.133,-.466),l(-.109,-.282),l(-.362,-.649),l(.193,-.17),l(.48,-.198),l(.721,-.454),l(-.319,-.395),l(0,-.226),l(.175,-.354),l(.497,-.462),l(.157,-.146),l(.14,-.848),l(-.116,-.452),l(-.082,-.184),l(.11,-.226),l(.686,-.101),l(.891,-.341),l(.396,-.241),l(.474,-.382),l(.09,-.186),l(1.496,.803),l(1.432,.656),l(.227,.225),l(.166,.493),l(.355,.309),l(.977,.277),l(.67,-.061),l(.89,-.401),l(.128,.056),l(.709,.631),l(.197,.118),l(.269,.162),l(.081,.112),l(.387,.76),l(.321,.789),l(-.08,.255),l(-.352,.384),l(-.547,1.147),l(-.533,.779),l(-.71,.725),l(-1.001,.755),l(-.336,.087),l(-1.028,.303),l(-.901,.358),l(-.809,.499),l(-.59,.653),l(-.284,.51),l(-.987,2.506),l(-.267,.312),l(-.242,.072),l(-.398,-.068),l(-.398,-.491),l(-.191,-.479),l(-.312,-.252),l(-.815,.005),l(-.444,-.11),l(-.105,-.197),l(-.097,-.494),l(.233,-.34),l(.029,-.495),l(.005,-.569),
-N(245.934,224.314),l(1.109,1.843),l(.922,1.646),l(.08,.24),l(-.437,.736),l(-.15,.523),l(-.143,.848),l(.057,.522),l(.236,.902),l(-.156,.34),l(-.221,.34),l(-.532,.582),l(-.102,.452),l(.347,.845),l(-.21,.368),l(-.159,.34),l(.022,.48),l(.604,1.168),l(.015,.522),l(-.285,.439),l(-.723,.61),l(-.12,.227),l(.049,.48),l(.132,.295),l(.018,.142),l(-.586,.187),l(-.15,.199),l(-.228,.933),l(-.259,.298),l(-.852,.275),l(-.201,-.517),l(-.289,-.31),l(-1.422,-.618),l(-.313,-.239),l(-.233,-.678),l(-.315,-.38),l(-.559,-.225),l(-.504,-.281),l(-.489,-.254),l(-.616,-.309),l(-.873,-.464),l(-.673,-.366),l(-.866,-.379),l(-.838,-.337),l(-1.271,-.845),l(-1.354,-.985),l(-1.232,-1.099),l(-.594,-.705),l(-.42,-.677),l(.008,-.438),l(0,-.903),l(-.269,-.606),l(-.781,-1.043),l(-1.389,-2.778),l(-.285,-.268),l(-.467,-.211),l(-.074,-.085),l(.055,-.536),l(-.02,-.396),l(-.149,-.396),l(-1.208,-2.199),l(-.997,-1.961),l(-.688,-1.27),l(-1.365,-1.917),l(-.272,-.353),l(-.598,-.973),l(-.462,-.423),l(-.75,-.437),l(-.914,-.365),l(-.61,-.365),l(.119,-.17),l(.181,-.113),l(.609,-.029),l(.144,-.41),l(-.118,-.282),l(-.592,-.874),l(-.353,-.437),l(-.258,-.72),l(.01,-.24),l(.244,-.523),l(.582,-.622),l(1.02,-.878),l(.47,-.198),l(.317,-.214),l(-.005,.569),l(-.029,.495),l(-.233,.34),l(.097,.494),l(.105,.197),l(.444,.11),l(.815,-.005),l(.312,.252),l(.191,.479),l(.398,.491),l(.398,.068),l(.242,-.072),l(.267,-.312),l(.987,-2.506),l(.284,-.51),l(.59,-.653),l(.809,-.499),l(.901,-.358),l(1.028,-.303),l(.336,-.087),l(1.001,-.755),l(.71,-.725),l(.533,-.779),l(.547,-1.147),l(.352,-.384),l(.08,-.255),l(-.321,-.789),l(-.387,-.76),l(.927,.107),l(.897,.418),l(.513,.435),l(.208,.324),l(.208,.62),l(.526,.364),l(.988,.672),l(.251,.761),l(.078,.282),l(.366,.14),l(.479,.039),l(.173,.296),l(-.004,.396),l(.092,.281),l(.573,.152),l(1.038,.008),l(.496,-.031),l(.337,-.157),l(.452,-.427),l(.523,.421),l(.397,.182),l(.708,-.442),l(.509,.209),l(1.299,.84),l(.127,.069),l(-.035,.198),l(-1.155,1.956),l(.448,-.031),l(.161,-.058),l(.237,.126),l(.575,.703),l(.156,.14),l(.136,.324),l(-.341,.186),l(-.793,-.235),l(-.493,-.096),l(-.322,.072),l(-.604,.441),l(-.371,.115),l(-.669,-.066),l(-1.895,.773),l(-.701,.442),l(-.372,.172),l(-.599,1.415),l(-.319,.511),l(-.021,.155),l(.277,.86),l(.012,.112),l(-.625,.498),l(-.62,.328),l(-.349,.342),l(-.247,.622),l(.106,.564),l(.619,.957),l(1.333,2.166),l(.106,.127),l(-.247,.495),l(-.208,.312),l(1.085,.12),l(.415,.04),l(.312,.182),l(.241,.323),l(.096,.663),l(1.843,.032),l(.762,-.499),l(.648,-.484),l(.326,-.114),l(-.059,1.511),l(-.098,1.173),l(.108,.353),l(.317,.337),l(.285,.068),l(.358,-.072),l(.786,-.259),l(.42,-.045),
-N(279.288,257.295),l(-.063,-.423),l(.027,-.777),l(.222,-.819),l(.298,-.835),l(.321,-.75),l(-.019,-.141),l(-.491,-.336),l(-.234,-.112),l(-1.29,.445),l(-.224,-.055),l(-.254,-.563),l(-.487,-2.524),l(-.121,-.437),l(-.843,-.404),l(-.724,-.278),l(-.115,.001),l(-.709,.413),l(-.346,.03),l(-.925,-.221),l(-.818,-.15),l(-.372,-.04),l(.006,-.72),l(.086,-.721),l(.132,-.862),l(-.104,-.959),l(-.521,-.872),l(-.084,-.663),l(-.253,-.408),l(.421,-.666),l(.38,-.765),l(.238,-.834),l(.185,-1.173),l(-.022,-.494),l(-.307,-.774),l(-.316,-.479),l(-.73,-.362),l(-.436,-.407),l(-.067,-.563),l(.261,-.835),l(-.042,-.296),l(-.693,-.024),l(-1.615,-.019),l(-.5,-.012),l(-.967,-.036),l(-.153,-.112),l(-.249,-.944),l(-.138,-2.032),l(-.03,-.706),l(-.203,-1.029),l(.038,-.565),l(-.085,-.169),l(-.403,-.237),l(-.537,-.166),l(-.636,-.123),l(-1.148,.077),l(-.22,-.084),l(-.398,-.308),l(-.385,-.774),l(-.096,-.014),l(-.882,-.037),l(-.3,-.098),l(-.75,-.603),l(-.688,-.307),l(-.676,-.25),l(-.355,.03),l(-.787,-.023),l(-.316,-.097),l(-1.1,-.939),l(-.813,-.928),l(-.335,-.591),l(-.141,-.635),l(-.036,-.818),l(.064,-.622),l(.079,-.621),l(-.045,-.748),l(-1.283,-.021),l(-.934,.076),l(-.36,.158),l(-.874,.485),l(-1.471,1.109),l(-.415,.243),l(-.48,-.025),l(-.336,-.026),l(-.946,.824),l(-.355,.03),l(-1.122,-.304),l(-.939,-.136),l(-.42,.045),l(-.786,.259),l(-.358,.072),l(-.285,-.068),l(-.317,-.337),l(-.108,-.353),l(.098,-1.173),l(.059,-1.511),l(-.326,.114),l(-.648,.484),l(-.762,.499),l(-1.843,-.032),l(-.096,-.663),l(-.241,-.323),l(-.312,-.182),l(-.415,-.04),l(-1.085,-.12),l(.208,-.312),l(.247,-.495),l(-.106,-.127),l(-1.333,-2.166),l(-.619,-.957),l(-.106,-.564),l(.247,-.622),l(.349,-.342),l(.62,-.328),l(.625,-.498),l(-.012,-.112),l(-.277,-.86),l(.021,-.155),l(.319,-.511),l(.599,-1.415),l(.372,-.172),l(.701,-.442),l(1.895,-.773),l(.669,.066),l(.371,-.115),l(.604,-.441),l(.322,-.072),l(.493,.096),l(.793,.235),l(.341,-.186),l(-.136,-.324),l(.133,-.198),l(.073,-.382),l(.706,-4.411),l(.326,-1.428),l(-.031,-.212),l(-.399,-.562),l(.031,-.777),l(-.192,-.183),l(-.688,-.363),l(-.192,-.197),l(0,-.554),l(.001,-1.071),l(.111,-.085),l(.493,-.187),l(.687,-.032),l(.417,.11),l(.384,.04),l(-.052,-.367),l(-.293,-.408),l(-.177,-.084),l(-.896,-.122),l(-.178,-.154),l(.013,-1.031),l(.042,-.325),l(.64,.024),l(2.812,.082),l(.463,-.017),l(.412,-.158),l(.834,-.57),l(.52,-.286),l(.148,.168),l(.138,.437),l(.161,.861),l(.088,.452),l(.199,.437),l(.432,.054),l(.694,.546),l(.482,.223),l(.414,-.073),l(.757,-.697),l(.083,.183),l(.186,.776),l(.271,-.016),l(.645,-.739),l(.74,-.654),l(.554,-.286),l(.652,-.173),l(.235,-.213),l(.259,-.666),l(.203,-.199),l(.652,-.131),l(.569,-.272),l(.265,-.27),l(-.15,-.253),l(-.434,-.125),l(-.96,-.051),l(-.166,-.239),l(-.079,-.55),l(-.302,-1.524),l(-.391,-.69),l(-.616,-.688),l(.041,-.184),l(.159,-.029),l(.309,.125),l(.896,.461),l(.385,.04),l(1.149,-.035),l(.344,.224),l(.628,.618),l(.348,-.115),l(.232,-1.117),l(.284,-.115),l(.465,.054),l(.557,-.074),l(.807,-.23),l(1.74,-.9),l(.592,-.385),l(.163,-.326),l(-.103,-.169),l(.375,-.257),l(.302,-.058),l(.516,.124),l(.26,.111),l(.04,.212),l(-.452,1.09),l(.304,-.001),l(.533,.138),l(.435,.958),l(-.179,.368),l(-.547,1.416),l(-.213,.962),l(.156,.465),l(.281,.394),l(.167,.31),l(-.072,.354),l(.008,.396),l(.15,.296),l(1.103,.897),l(.613,.392),l(.686,-.075),l(.694,-.513),l(.505,-.314),l(1,-.331),l(.934,-.429),l(.943,.022),l(.4,.04),l(1.108,.276),l(.528,.054),l(-.611,-1.014),l(.2,-.326),l(.172,-.156),l(.642,.124),l(.418,.139),l(.398,-.059),l(.534,-.385),l(.319,-.001),l(1.05,.488),l(.649,.505),l(.225,.069),l(.882,-.613),l(1.11,.389),l(.56,.025),l(.299,-.214),l(.464,-.681),l(.439,-.992),l(.427,-.765),l(1.102,-1.646),l(-.015,-.422),l(.409,-.241),l(.276,.141),l(.235,.423),l(.164,.791),l(.414,1.34),l(.108,.607),l(.472,1.383),l(.296,.55),l(.324,.324),l(.978,.21),l(.196,.338),l(.038,.551),l(-.045,.254),l(-.524,.354),l(-.933,1.414),l(-.238,.325),l(-.51,.411),l(-.41,.231),l(-.244,.138),l(-.798,.778),l(-.544,.947),l(-.419,1.018),l(-.402,.453),l(.271,.112),l(.512,-.072),l(.497,-.198),l(1.202,-.709),l(.112,-.028),l(.299,.889),l(.442,.818),l(.255,.112),l(.287,.07),l(1.135,-.031),l(.592,-.058),l(.737,-.298),l(-.277,.679),l(-.017,.584),l(.448,-.557),l(1.254,-1.006),l(.289,-.156),l(.306,-.382),l(.499,-.933),l(.272,-.396),l(.256,-.099),l(1.006,-.003),l(.352,-.198),l(.175,0),l(.687,.549),l(.654,.267),l(.32,-.028),l(.814,.28),l(1.069,.45),l(.334,.281),l(.269,.593),l(.08,.028),l(.176,-.015),l(.402,-.354),l(.319,.042),l(.302,.254),l(.538,.789),l(.205,.396),l(-.13,.254),l(-.308,.41),l(-.116,.424),l(.091,.466),l(.171,.396),l(.825,-.821),l(.369,-.156),l(.609,-.156),l(.995,-.454),l(.224,-.028),l(.367,.069),l(.764,.38),l(.907,.436),l(.462,.098),l(1.117,.167),l(1.118,.083),l(.464,-.058),l(.48,-.029),l(.577,-.171),l(.416,-.016),l(1.131,.351),l(.731,.408),l(.762,.479),l(.586,.437),l(1.595,1.395),l(.742,.662),l(.821,.605),l(.41,.338),l(.477,.196),l(.734,.168),l(1.247,.097),l(.912,.04),l(.445,.197),l(.265,.465),l(.087,.607),l(.592,2.004),l(.268,1.143),l(.062,.988),l(-.076,.579),l(-.179,.904),l(-.243,.848),l(-.559,1.301),l(-.518,.849),l(-1.347,1.175),l(-1.388,1.288),l(-.44,.198),l(-.354,.043),l(-.39,.637),l(-.094,.396),l(-.012,.353),l(-.504,1.074),l(-.6,.976),l(-.8,1.104),l(-.266,.212),l(-.194,.015),l(-.079,-.423),l(-.278,-.296),l(-.367,-.084),l(-.064,.79),l(-.538,1.64),l(-.049,.734),l(-.077,.607),l(.318,2.738),l(.078,.988),l(-.577,2.543),l(-.039,.663),l(.14,.649),l(.043,.085),l(-.759,.495),l(-.404,.51),l(-.261,.791),l(-.04,.367),l(.245,1.468),l(-.106,.367),l(-.214,.283),l(-.676,.608),l(-.752,1.498),l(-1.01,1.4),l(-.201,.537),l(-.055,.311),l(.144,.945),l(-1.203,.37),l(-.544,.283),l(-.355,.368),l(-.084,.466),l(.021,.367),l(-.401,.114),l(-.864,-.041),l(-.979,.172),l(-.654,.001),l(-.764,-.055),l(-.465,-.112),l(-.922,.072),l(-.736,.002),l(-.214,.607),l(-.295,.198),l(-.795,.312),l(-.481,.453),l(-.21,.354),l(-.747,-.267),l(-.35,.071),l(-.563,.255),l(-1.864,1.232),l(-.528,.396),l(-.725,.383),l(-.616,.438),l(-.532,.679),l(-.486,.241),l(-.567,.072),l(-.278,-.014),l(.006,.24),l(.336,.225),l(.12,.536),l(-.111,.537),l(-.099,.282),l(-.282,.156),l(-.084,.155),l(.384,.648),l(.036,1.186),l(.05,1.045),l(-.057,.311),l(-.11,.594),l(-.198,.621),l(-.464,.735),l(-.566,.495),l(-.788,.524),l(-.866,1.046),l(-.208,.396),l(-.476,1.145),l(-.499,.933),l(-.75,1.004),l(-.69,.623),l(-.801,.78),l(.321,-.808),l(.436,-.594),l(.629,-.566),l(.605,-1.158),l(-.06,-.254),l(-.356,.142),l(-.397,-.014),l(-.633,-.21),l(-.075,.155),l(.002,.297),l(-.401,1.215),l(-.349,.48),l(-.661,.438),l(-.317,.283),l(-.225,.424),l(-.013,.354),l(-.448,1.709),l(-.481,.763),l(-.787,.934),l(-1.076,.979),l(-.101,-.313),l(-.258,-.746),l(.103,-.269),l(.634,-.766),l(.017,-.269),l(-.333,-.379),l(-.163,-.027),l(-.131,-.197),l(-.853,-1.109),l(-.474,-.435),l(-.999,-.587),l(-.55,-.194),l(-.617,-.194),l(-.432,-.576),l(-.365,-.393),l(-.693,.427),l(-.27,.016),l(-.232,-.38),l(-.59,-.814),l(-.379,-.407),l(-.47,-.364),l(-.266,-.098),l(-.25,.101),l(-1.042,.246),l(-.55,.003),l(.214,-.27),l(.833,-.88),l(1.805,-1.816),l(1.435,-1.363),l(1.633,-1.448),l(.348,-.242),l(1.754,-.744),l(.521,-.313),l(.161,-.467),l(.094,-1.638),l(-.517,-1.154),l(-.206,-.196),l(-.462,.017),l(-.957,.161),M(288.966,203.943),l(-.558,-.125),l(-.301,-.536),l(-.078,-.382),l(.16,-.197),l(-.094,-.636),l(.048,-.381),l(.208,-1.018),l(.176,-.099),l(.479,-.058),l(.879,.097),l(1.007,.11),l(.479,-.199),l(.368,.028),l(.479,.168),l(.479,.083),l(.319,.155),l(-.335,.538),l(-.193,.946),l(-.257,.494),l(-.289,.312),l(-.561,.326),l(-.464,.171),l(-.527,.015),l(-.783,.016),l(-.641,.171),
-N(732.92,214.323),l(-.164,-.24),l(-.225,-.197),l(-.379,-.126),l(-.416,.198),l(-.399,-.38),l(-.287,-.184),l(-.659,-.238),l(-.243,-.239),l(.156,-.255),l(.29,.027),l(.731,-.058),l(.538,.126),l(.743,.083),l(.523,-.058),l(.258,-.185),l(.232,-.509),l(.056,.099),l(.351,.395),l(.286,.184),l(.241,.014),l(.961,-.2),l(.366,-.227),l(.361,-.722),l(.241,-.212),l(.653,-.029),l(.263,-.128),l(.04,-.282),l(-.064,-.565),l(-.043,-.536),l(.495,.196),l(.404,.056),l(.324,-.354),l(.318,.578),l(.077,.353),l(-.196,.495),l(-.099,.184),l(-.509,.044),l(-.159,.226),l(.061,.17),l(.437,.479),l(-.308,.354),l(-.264,.113),l(-.742,-.083),l(-.416,.001),l(-.091,.269),l(-.408,.495),l(-.275,.156),l(-.973,.426),l(-.484,.143),l(-.798,.029),l(-.807,.115),M(713.795,220.696),l(.031,-3.438),l(-.046,-.805),l(-.431,-1.368),l(.44,-.822),l(-.169,-7.966),l(2.581,.802),l(.85,.337),l(1.04,.295),l(1.254,.378),l(.848,.507),l(.613,.323),l(.597,.084),l(.38,-.058),l(.26,.508),l(.274,.254),l(.635,.352),l(.687,.395),l(.779,.718),l(-.3,.947),l(.033,.226),l(.305,.226),l(.665,.111),l(1.887,.787),l(.354,.027),l(.72,.183),l(.181,.254),l(.413,.535),l(.211,.579),l(-.166,.113),l(-1.114,.073),l(-.563,.156),l(-.098,.155),l(.047,.339),l(.589,.987),l(.5,.521),l(1.464,1),l(.218,.847),l(.725,1.044),l(.288,.141),l(.304,-.015),l(.712,-.086),l(.338,.013),l(.087,.198),l(-.354,.551),l(.218,.212),l(.401,.141),l(.423,.041),l(.63,.168),l(.096,.127),l(-.031,.142),l(-.648,.213),l(.287,.24),l(1.064,.28),l(.538,.295),l(.235,.763),l(-.064,.226),l(-1.094,-.012),l(-.215,-.154),l(-.146,-.466),l(-.126,-.099),l(-1.011,-.111),l(-1.063,-.266),l(-.644,-.126),l(-.752,.016),l(-.774,-.026),l(-.573,-.211),l(-.494,-.352),l(-.223,-.522),l(-.24,-.268),l(-.726,-.31),l(-.472,-.338),l(-.135,-.197),l(-1.089,-1.608),l(-.613,-.817),l(-.454,-.056),l(-1.524,-.336),l(-.671,-.31),l(-.55,-.055),l(-.415,.185),l(-.394,.071),l(-.78,-.45),l(.282,.762),l(-.027,.212),l(-.249,.071),l(-.382,-.126),l(-.311,.1),l(.296,.395),l(-.116,.113),l(-1.037,.045),l(-1.125,-.182),l(-.478,.029),l(.237,.127),l(.24,.154),l(.642,.169),l(.662,.352),l(.404,.338),l(.219,.395),l(-.411,.199),l(-.739,.425),l(-.458,.213),l(-.668,-.097),l(-1.801,-.039),l(-1.219,-.092),
-N(726.605,297.247),l(-.479,-.229),l(-1.179,-.471),l(-.543,-.371),l(-.508,-.715),l(-.477,-.558),l(-.216,-.414),l(.264,-.044),l(.169,.1),l(.421,.171),l(.129,-.143),l(-.209,-.387),l(-.703,-.699),l(-.617,-.713),l(-.149,-.257),l(-.375,-.956),l(-.008,-.67),l(.177,-.044),l(1.004,.312),l(1.476,.354),l(1.089,.369),l(.797,-.03),l(.463,-.144),l(.382,-.115),l(.373,-.058),l(.684,.027),l(.306,-.301),l(.716,-.244),l(.475,.385),l(-.009,.1),l(.128,.8),l(-.009,.686),l(-.751,1.503),l(-.124,.758),l(-.245,.315),l(-.943,.26),l(-.553,.388),l(-.49,.689),l(-.189,.272),l(-.274,.072),M(716.883,224.344),l(.682,.394),l(.233,.509),l(.047,.649),l(.118,.678),l(.256,.197),l(.42,.013),l(.102,.24),l(-.45,.919),l(.715,.338),l(.175,.282),l(.147,.593),l(.08,1.3),l(.144,.621),l(.456,1.157),l(.293,.268),l(.422,.014),l(.328,-.312),l(.384,-.185),l(.32,.663),l(.363,.127),l(.563,.408),l(.385,.154),l(.144,.155),l(.002,.41),l(.083,.96),l(.275,.776),l(-.046,1.06),l(.279,.24),l(.93,1.325),l(.276,.706),l(.055,.777),l(-.209,.876),l(.403,.649),l(.275,.833),l(.204,.353),l(1.395,.803),l(.285,.154),l(.744,.111),l(.402,.649),l(.843,.535),l(.483,.169),l(1.141,.068),l(.117,.197),L(731,245.42),l(-.273,.565),l(.309,.424),l(.879,.479),l(.22,.564),l(.469,1.342),l(.211,.748),l(.112,.396),l(.252,.311),l(.771,.352),l(-.021,-.127),l(-.141,-.777),l(.913,.507),l(.567,.154),l(.184,.127),l(.136,.296),l(.106,1.752),l(.884,.762),l(.573,.323),l(.604,.154),l(.287,.296),l(.244,.579),l(.229,.424),l(.545,.168),l(.176,.297),l(.007,.269),l(.19,.536),l(.106,.113),l(.506,.126),l(.156,.112),l(.162,.354),l(.366,1.327),l(.026,.876),l(.013,.862),l(-.132,.41),l(-.181,.325),l(.778,1.271),l(.223,.48),l(.181,.833),l(.034,.749),l(-.293,.708),l(-.353,1.668),l(-.585,1.755),l(.137,.791),l(-.065,.806),l(-.306,.778),l(-.661,.977),l(-.203,.665),l(-.598,.821),l(-.45,.185),l(-.465,.1),l(-.423,.468),l(-.466,.68),l(-.328,1.527),l(-.477,.638),l(-.34,.495),l(.014,.65),l(-.208,.539),l(-.331,.312),l(-.601,.341),l(-.27,.326),l(-.3,1.021),l(-.169,1.049),l(-.079,.937),l(.021,.666),l(-.283,.64),l(-.322,.354),l(-.463,.3),l(-.754,.101),l(-1.158,.087),l(-.82,.03),l(-.527,.157),l(-.516,.299),l(-1.529,.94),l(-.443,.129),l(-.214,.284),l(-.346,.071),l(-.528,.059),l(-.286,-.014),l(.295,.368),l(.209,.27),l(-1.315,-.665),l(-.885,-.353),l(.003,-.469),l(-.073,-.156),l(-.56,-.467),l(-.628,-.368),l(-.421,-.014),l(-.485,.172),l(-.335,.242),l(.748,.467),l(-.97,.243),l(-.929,.428),l(-.953,.442),l(-.222,.028),l(-.604,-.226),l(-.886,-.438),l(-.67,-.226),l(-1.086,-.311),l(-.51,-.041),l(-.239,.156),l(-.044,.113),l(-.716,-.169),l(-.751,-.353),l(-.522,-.298),l(-.896,-.82),l(-.526,-.34),l(-.422,-.879),l(.09,-1.035),l(-.082,-.411),l(-.184,-.495),l(-.664,-.736),l(-.141,-.523),l(-.029,-.425),l(-.534,-.014),l(-.786,.398),l(-.597,.114),l(-.34,.058),l(-.178,-.07),l(-.167,-.17),l(.517,-.454),l(.233,-.567),l(.073,-.821),l(-.253,-.324),l(-.536,-.593),l(-.247,-.353),l(-.485,.735),l(-.443,1.431),l(-.19,.113),l(-.796,.002),l(-.199,.156),l(-.196,.015),l(-.255,.028),l(.198,-.396),l(.081,-.396),l(.079,-.1),l(.634,.041),l(.242,-.142),l(.126,-.255),l(-.105,-1.004),l(.454,-.835),l(.328,-.453),l(.091,-.396),l(.018,-.409),l(.151,-.128),l(.245,-.015),l(.218,-.354),l(-.052,-.227),l(-.323,-.494),l(-.338,-.494),l(-.107,.707),l(-.288,.255),l(-.518,.299),l(-.311,.467),l(-.086,.155),l(-.189,.467),l(-.281,.326),l(-.747,.242),l(-.735,.481),l(-.653,.567),l(-.36,.693),l(-.514,.808),l(-.41,-.339),l(-.38,-1.328),l(-.263,-.579),l(-.19,-.325),l(-.688,-.79),l(-.297,-.734),l(-.176,-.212),l(-.704,.072),l(-.235,-.099),l(-.139,-.24),l(-.085,-.269),l(.334,-.34),l(-.047,-.297),l(-.346,-.395),l(-.543,-.494),l(-.266,-.098),l(-.83,.157),l(-.486,-.07),l(-.95,-.549),l(-.274,-.014),l(-.438,.17),l(-.433,-.027),l(-.421,-.183),l(-.662,-.521),l(-.921,-.437),l(-.218,.001),l(-.723,.213),l(-1.282,.088),l(-.669,.001),l(-1.764,.061),l(-.611,.129),l(-.656,.213),l(-.989,.44),l(-.972,.256),l(-1.039,.257),l(-1.503,.088),l(-.794,-.013),l(-.383,.044),l(-.927,.284),l(-.993,.469),l(-.773,.397),l(-.538,.143),l(-.431,.085),l(-.361,.199),l(-.615,.693),l(-.774,1.02),l(-.588,.284),l(-.766,-.013),l(-.547,-.013),l(-.927,.143),l(-.4,.185),l(-.663,-.395),l(-.294,-.084),l(-.734,.016),l(-1.572,.173),l(-.938,.157),l(-.459,-.041),l(-.672,.044),l(-.398,.227),l(-.583,.793),l(-.344,.128),l(-.958,-.125),l(-.158,.057),l(-.57,.708),l(-.465,.368),l(-.919,.271),l(-.586,.086),l(-1.516,-.082),l(-.638,-.055),l(-.688,-.197),l(-.633,-.366),l(-.778,-.677),l(-.74,-.353),l(-.374,-.041),l(-.151,-.07),l(-.19,-1.229),l(.055,-.255),l(.489,.112),l(.45,-.086),l(.332,-.425),l(.197,-.467),l(.267,-1.357),l(-.043,-1.215),l(-.156,-.622),l(-.258,-.593),l(-1.117,-1.906),l(-.208,-.635),l(-.144,-.834),l(.027,-.989),l(-.16,-.692),l(-.467,-1.072),l(-.663,-.945),l(-.603,-.734),l(-.214,-.254),l(.128,-.904),l(-.215,-.536),l(-.733,-1.115),l(-.972,-1.018),l(-.273,-.583),l(.126,-.233),l(.188,.187),l(.152,.443),l(.183,.163),l(.235,.35),l(.327,.188),l(.354,.023),l(-.348,-1.144),l(-.437,-.396),l(-.226,-.326),l(.08,-.304),l(.748,.84),l(.495,.979),l(.477,.065),l(-.099,-.555),l(.289,-.039),l(.004,-.564),l(-.282,-.48),l(-1.03,-1.368),l(-.354,-.691),l(-.119,-.579),l(-.038,-.734),l(.355,-.595),l(.323,-.523),l(.21,-.664),l(-.083,-1.031),l(-.254,-.635),l(.033,-.368),l(.438,-.692),l(.109,-.325),l(.064,-.156),l(.271,.649),l(.011,.424),l(.105,.184),l(.35,.027),l(.171,-.113),l(.187,-.565),l(.141,-.48),l(.765,-.468),l(1.22,-.624),l(.484,-.326),l(.676,-.581),l(.585,-.467),l(.632,-.327),l(.79,-.114),l(.697,-.016),l(.7,-.002),l(.431,-.043),l(.352,-.185),l(.474,-.453),l(.494,-.128),l(.929,-.072),l(.279,-.143),l(.291,-.551),l(.158,-.1),l(.444,.027),l(.877,.224),l(.626,-.043),l(.911,-.299),l(1.084,-.469),l(.359,-.213),l(.716,-.665),l(.427,-.58),l(.29,-.622),l(.132,-.297),l(.41,-.369),l(.968,-.651),l(.079,-.17),l(-.067,-.409),l(-.242,-.805),l(-.016,-.495),l(1.063,-1.118),l(.387,-.692),l(.291,.169),l(.341,.437),l(.619,1.355),l(.262,.253),l(.177,-.579),l(.021,-.466),l(.436,.238),l(.272,.07),l(.189,-.607),l(-.06,-.142),l(-.563,-.238),l(-.175,-.24),l(.007,-.565),l(.044,-.112),l(.897,.04),l(.661,.253),l(.642,-.029),l(.334,-.029),l(.289,.074),l(-.699,-.455),l(-.431,-.141),l(.128,-.537),l(-.07,-.296),l(.135,-.509),l(.422,-.354),l(.165,-.07),l(.732,.394),l(.202,-.043),l(-.112,-.452),l(.11,-.48),l(.146,-.367),l(-.041,-.522),l(.358,-.171),l(.4,-.113),l(.813,.04),l(.529,-1.088),l(.371,-.298),l(.35,.169),l(.268,.451),l(.265,-.552),l(.222,-.227),l(.197,-.48),l(.695,.62),l(.513,.084),l(.293,.211),l(.331,.536),l(.632,.592),l(.122,.706),l(-.072,.594),l(.181,.197),l(.256,-.283),l(.462,-.679),l(.155,-.128),l(1.16,.082),l(.479,.155),l(.637,.492),l(.332,.141),l(.156,-.48),l(.302,-.297),l(.022,-.24),l(-.266,-.324),l(-.601,-.395),l(-.079,-.184),l(.008,-.24),l(.145,-.099),l(.604,-.538),l(.007,-.452),l(.191,-.213),l(.518,-.283),l(.268,-.241),l(.151,-.269),l(-.094,-.184),l(.003,-.296),l(.512,-.863),l(.121,-.057),l(.317,-.029),l(.397,-.029),l(.248,-.17),l(-.205,-.409),l(.377,-.396),l(.344,-.071),l(.793,.366),l(.616,-.072),l(1.291,-.088),l(.512,-.128),l(.232,-.17),l(.04,-.057),l(-.077,-.197),l(-.2,-.734),l(-.248,-.282),l(-.471,-.268),l(-.374,.086),l(-.244,-.141),l(.035,-.212),l(.367,-.143),l(.396,-.043),l(.617,.521),l(.255,.099),l(.34,-.1),l(.364,.31),l(.676,.465),l(.36,.154),l(1.297,.294),l(.591,.084),l(.413,-.143),l(.372,.014),l(.396,.606),l(.419,.112),l(.141,-.029),l(.562,-.438),l(.454,.027),l(.652,.38),l(.331,.479),l(.46,-.143),l(.122,-.791),l(.181,-.085),l(.455,.465),l(.337,.099),l(.152,.154),l(-.436,.411),l(-.126,.424),l(-.176,.212),l(-.011,.438),l(-.12,.255),l(-.513,.015),l(-.51,.228),l(-.396,.34),l(-.004,.551),l(.301,.353),l(-.187,.692),l(-.381,.58),l(-.559,.481),l(-.155,.48),l(.063,.17),l(.469,.437),l(1.038,.619),l(.81,.677),l(.508,.606),l(.246,.099),l(.349,-.114),l(.264,.027),l(.782,.352),l(.742,.465),l(.434,.451),l(.679,.535),l(.335,.127),l(.442,.027),l(.784,.182),l(.25,.184),l(.218,.621),l(.167,.169),l(.507,.31),l(.76,.423),l(.537,.154),l(.422,-.072),l(.414,-.17),l(.603,-.199),l(.208,-.156),l(.736,-1.344),l(.403,-1.131),l(.194,-1.314),l(.259,-.721),l(.43,-.679),l(-.131,-.424),l(-.409,-.621),l(.022,-.311),l(.236,-.637),l(.187,-.48),l(-.164,-.282),l(-.183,-.395),l(.088,-.692),l(.104,-1.004),l(.225,-.297),l(.329,-.156),l(.158,-.311),l(-.534,-.521),l(.033,-.198),l(.576,-.947),l(.312,-.934),l(.072,-.833),l(.191,-.241),l(.279,-.297),
-N(270.934,276.123),l(.054,-.338),l(-.194,-.577),l(.011,-.522),l(.24,-.495),l(.48,-.524),l(.118,-.325),l(-.168,-.986),l(-.049,-.847),l(.103,-.522),l(.595,-2.359),l(.065,-.452),l(.443,-.524),l(.55,-.003),l(1.042,-.246),l(.25,-.101),l(.266,.098),l(.47,.364),l(.379,.407),l(.59,.814),l(.232,.38),l(.27,-.016),l(.693,-.427),l(.365,.393),l(.432,.576),l(.617,.194),l(.55,.194),l(.999,.587),l(.474,.435),l(.853,1.109),l(.131,.197),l(.163,.027),l(.333,.379),l(-.017,.269),l(-.634,.766),l(-.103,.269),l(.258,.746),l(.101,.313),l(-.059,.053),l(-.803,1.103),l(-.625,.552),l(-.775,.454),l(-.441,.156),l(-.818,.1),l(-.874,-.337),l(-.551,.044),l(-.551,.114),l(-.64,.283),l(-.38,-.042),l(-.846,-.676),l(-.637,-.252),l(-.76,-.154),l(-.469,.128),l(-.507,.072),l(-.327,-.127),l(-.548,-.563),l(-.354,-.159),
-N(418.763,73.869),l(.391,-.499),l(.389,-.262),l(.283,.081),l(.663,-.062),l(.762,-.075),l(.324,-.137),l(.891,-.787),l(.979,-.2),l(.224,.025),l(.198,-.219),l(.175,.032),l(-.349,.531),l(.11,.106),l(.026,.481),l(-.288,.156),l(-.17,.368),l(-1.675,.069),l(-.376,-.106),l(-.428,.031),l(-.14,-.062),l(-.239,.081),l(-.275,.031),l(-.153,.417),l(-.249,.218),l(-.353,.118),l(-.08,.112),l(-.229,-.155),l(-.411,-.292),M(421.68,78.002),l(-1.839,.129),l(-.116,-.016),l(.064,-.404),l(-.19,-.638),l(-.174,.015),l(-.36,-.293),l(-.233,.184),l(-.398,-.172),l(.2,-.355),l(.434,-.293),l(-.007,-.181),l(-.445,-.541),l(.018,-.256),l(.131,-.498),l(.279,-.106),l(.318,.15),l(.495,.12),l(.43,-.574),l(.299,-.091),l(.296,.437),l(.391,-.046),l(.022,-.528),l(.107,-.363),l(1.032,-.017),l(.848,.089),l(.03,.544),l(.187,.301),l(1.138,.058),l(.14,.166),l(-.307,.604),l(-.565,.142),l(-.119,-.261),l(-.331,.031),l(-.263,.136),l(.121,.278),l(-.184,.414),l(-.312,.077),l(-.069,.244),l(-.635,.035),l(.157,.229),l(-.291,.094),l(-.191,.24),l(-.061,.285),l(.003,.21),l(-.215,.338),l(.166,.084),M(427.177,77.967),l(-.139,-.149),l(-.312,-.344),l(-.405,.031),l(-.665,-.059),l(-.123,-.329),l(-.285,-.66),l(.433,-.091),l(.603,-.467),l(.356,.495),l(.521,.179),l(.2,-.271),l(.078,-.586),l(.333,-.046),l(.459,.044),l(.056,.571),l(-.134,.36),l(-.144,.09),l(-.413,.286),l(.603,.299),l(-.285,.166),l(-.499,.39),l(-.238,.09),
-N(417.259,94.301),l(-.135,-.233),l(.216,-.701),l(-.091,-.076),l(.075,-.295),l(.321,-.372),l(.054,-.358),l(.054,-.213),l(.954,-.806),l(-.605,-.193),l(-.479,.014),l(-.456,-.09),l(-.095,-.186),l(-.233,-.007),l(-.072,.048),l(-.689,.062),l(-.045,-.145),l(-.395,.055),l(-.337,-.277),l(-.428,-.319),l(-.074,-.353),l(.248,-.144),l(.044,-.288),l(-.466,-.096),l(-.41,-.312),l(-.062,-.301),l(.422,-.376),l(-.038,-.468),l(-.282,-.365),l(-.344,-.177),l(.165,-.278),l(-.143,-.217),l(-.182,-.037),l(.08,-.097),l(.235,-.133),l(.236,-.133),l(-.193,-.121),l(.201,-.275),l(.095,-.148),l(-.152,-.292),l(-.082,-.265),l(-.376,-.182),l(.07,-.182),l(.341,-.078),l(.175,-.092),l(.378,.134),l(.664,-.151),l(.32,-.152),l(.128,-.376),l(.412,-.207),l(.003,-.328),l(-.16,-.17),l(-.188,.061),l(-.44,-.134),l(.029,-.184),l(.113,-.181),l(.571,.036),l(.084,-.401),l(.345,-.361),l(-.151,-.438),l(.066,-.147),l(-.465,-.192),l(.126,-.43),l(.285,-.181),l(.371,-.028),l(1.12,-.062),l(.293,-.012),l(.095,.16),l(.195,.271),l(-.155,.158),l(.324,.113),l(.148,-.068),l(.042,-.192),l(-.159,-.204),l(.259,.012),l(.437,.169),l(-.163,-.362),l(.247,-.419),l(.687,.113),l(.614,-.091),l(-.596,-.17),l(-.084,-.227),l(.282,-.102),l(-.252,-.114),l(-.12,-.147),l(.166,-.08),l(.068,-.136),l(-.675,.08),l(-.06,-.182),l(.664,-.125),l(.218,-.193),l(-.464,-.42),l(-.324,-.341),l(.045,-.28),l(.116,.016),l(1.839,-.129),l(.254,.13),l(.565,.341),l(.271,.297),l(-.02,.228),l(-.252,.175),l(.445,-.05),l(.171,.216),l(.157,-.078),l(.283,.021),l(.235,.156),l(.45,.073),l(.866,-.121),l(.077,.208),l(-.07,.149),l(-.057,.125),l(-.665,.295),l(.316,.193),l(.649,-.136),l(.113,.182),l(.457,-.006),l(.349,-.391),l(1.059,-.136),l(.602,-.234),l(.757,-.266),l(.249,.113),l(.396,-.17),l(.184,.182),l(.085,.159),l(.634,.29),l(.182,.074),l(.526,-.12),l(.156,.12),l(.059,.34),l(.036,.227),l(.154,.102),l(.354,.125),l(.372,-.022),l(.028,.13),l(.201,.025),l(.319,.835),l(-.219,.52),l(-.391,.147),l(-.051,.328),l(.391,.102),l(.683,.429),l(-.217,.395),l(.094,.18),l(.312,.146),l(-.021,.304),l(.131,.102),l(-.118,.292),l(-.214,.124),l(-.007,.191),l(.325,.27),l(-.114,.258),l(.468,.188),l(.281,.485),l(-.435,.698),l(-.142,.115),l(-.344,-.072),l(-.031,-.278),l(-.308,-.121),l(-.436,.072),l(.282,.218),l(-.254,.084),l(-.284,.097),l(-.524,.048),l(-.124,.169),l(-.735,.024),l(-.112,.217),l(-.176,-.072),l(-.358,.061),l(-.097,.229),l(-.382,.012),l(-.078,.181),l(-.442,0),l(-.422,.201),l(-.293,-.033),l(-.26,.181),l(-.243,.168),l(.037,.056),l(.258,.378),l(.413,.098),l(-.155,.25),l(-.08,.406),l(.159,.085),l(.036,.233),l(.244,.173),l(.478,.265),l(.188,-.072),l(.573,.515),l(.431,.17),l(.184,.201),l(.219,-.084),l(.165,.18),l(.207,.036),l(.447,.633),l(-.682,.26),l(-.437,-.151),l(-.132,.027),l(-.039,.337),l(-.162,.172),l(-.968,.295),l(-.364,.227),l(.538,.571),l(-.197,.295),l(.334,.014),l(.056,.158),l(-.098,.343),l(-.082,.055),l(-.441,-.178),l(.049,-.165),l(-.146,-.117),l(-.564,.062),l(-.195,-.138),l(-.433,.035),l(-.092,.178),l(-1.25,.035),l(-.125,.171),l(-.319,.014),l(-.044,.13),L(425.4,94.7),l(-.594,.021),l(-.059,-.144),l(-.093,-.145),l(-.493,-.089),l(-.262,.055),l(-.237,-.041),l(.032,.274),l(-.452,.343),l(-.215,0),l(.078,-.195),l(-.26,-.039),l(.011,-.165),l(-.194,-.048),l(-.104,-.137),l(-.249,-.007),l(-.096,-.11),l(-.164,.137),l(-.368,-.014),l(-.664,-.261),l(-.852,-.007),l(-.149,-.089),l(-.199,.014),l(-.017,-.151),l(-.709,.199),l(.179,.199),l(-.354,.021),l(-.278,-.11),l(-.567,.158),l(-.271,-.096),l(-.272,.117),l(-.271,-.089),M(432.012,80.473),l(-.171,-.038),l(-.088,-.049),l(-.447,.08),l(-.111,-.264),l(.002,-.213),l(.647,.281),l(.168,.203),
-N(450.734,91.05),l(-.831,-.33),l(-.424,-.101),l(-.104,-.216),l(-.703,-.186),l(-.129,-.13),l(-.561,.076),l(-.508,-.041),l(-.073,.137),l(-.373,.18),l(-.46,-.254),l(-.483,.046),l(-.168,-.056),l(-.558,.204),l(-.104,.177),l(-.149,.135),l(-.18,-.12),l(-.389,.083),l(-.003,-.204),l(.026,-.083),l(-.066,-.18),l(-.331,.025),l(-.073,-.169),l(-.194,-.24),l(-.261,.024),l(-.062,.112),l(-.193,-.016),l(-.183,.24),l(-.43,.048),l(-.03,-.228),l(-.285,-.041),l(-.105,-.331),l(-.382,-.096),l(-.188,-.208),l(.02,-.249),l(-.802,-.132),l(-.311,-.181),l(-.368,.161),l(-.293,-.013),l(-.013,-.221),l(.001,-.253),l(-.329,.084),l(.181,-.283),l(-.709,.005),l(-.258,-.121),l(-.509,-.193),l(-.286,-.024),l(-.003,.145),l(.282,.302),l(-.41,.12),l(-.22,.187),l(-.318,-.072),l(-.296,-.38),l(-.55,-.247),l(.224,-.211),l(.208,-.024),l(.099,-.121),l(-.199,-.181),l(-.257,-.024),l(-.061,.066),l(-.466,.066),l(.005,-.169),l(-.278,.037),l(-.132,-.181),l(-.568,-.054),l(-.201,-.025),l(-.363,-.163),l(-.093,-.26),l(-.211,-.091),l(-.361,.018),l(-.063,.084),l(.062,.073),l(-.024,.151),l(-.375,0),l(.435,-.698),l(-.281,-.485),l(-.468,-.188),l(.114,-.258),l(-.325,-.27),l(.007,-.191),l(.214,-.124),l(.118,-.292),l(-.131,-.102),l(.021,-.304),l(-.312,-.146),l(-.094,-.18),l(.217,-.395),l(-.683,-.429),l(-.391,-.102),l(.051,-.328),l(.391,-.147),l(.219,-.52),l(-.319,-.835),l(.34,.043),l(.23,.125),l(-.093,-.193),l(.156,-.153),l(-.019,-.147),l(-.166,-.13),l(-.021,-.129),l(-.012,-.075),l(.93,-.154),l(.431,-.051),l(.516,-.152),l(1.304,-.128),l(.48,-.158),l(.797,-.479),l(1.117,-.298),l(1.515,-.303),l(1.382,-.086),l(1.067,.417),l(-.882,-.294),l(-.054,.147),l(.256,.172),l(.132,.466),l(.355,.135),l(.648,.061),l(.645,-.11),l(1.063,-.409),l(.054,.004),l(-.978,.417),l(-.19,.11),l(-.004,.123),l(.218,.012),l(.286,-.123),l(.613,-.208),l(.543,-.253),l(.842,.006),l(2.246,.115),l(2.96,-.101),l(.641,-.021),l(.04,.014),l(.679,.243),l(.284,.487),l(.099,.186),l(.016,.029),l(.09,.171),l(.16,.302),l(.615,1.5),l(.172,.502),l(-.023,.236),l(-.263,.208),l(-.44,.03),l(-.571,.244),l(-.291,.328),l(-.128,.292),l(.289,.012),l(.421,.146),l(.149,.176),l(.218,.146),l(.013,.25),l(-.315,.752),l(.126,.137),l(.161,.175),l(-.074,.242),l(.816,.835),l(.316,.193),l(-.298,.048),l(-.085,.133),l(.328,.302),l(-.009,.314),l(-.255,.24),l(-.429,.013),l(-.286,.181),l(-.599,.398),l(-1.509,1.218),l(-.082,.306),l(.044,.552),l(.349,.383),l(-.653,-.018),M(431.844,80.27),l(.232,.024),l(.069,.208),l(-.134,-.029),l(-.168,-.203),M(432.739,80.361),l(-.03,.129),l(-.278,-.024),l(-.191,.03),l(-.046,-.208),l(.174,-.012),l(.266,0),l(.106,.085),
-N(416.488,81.945),l(.151,.438),l(-.345,.361),l(-.084,.401),l(-.571,-.036),l(-.113,.181),l(-.029,.184),l(.44,.134),l(.188,-.061),l(.16,.17),l(-.003,.328),l(-.412,.207),l(-.128,.376),l(-.32,.152),l(-.664,.151),l(-.378,-.134),l(-.175,.092),l(-.341,.078),l(-.07,.182),l(.376,.182),l(.082,.265),l(.152,.292),l(-.095,.148),l(-.201,.275),l(.193,.121),l(-.236,.133),l(-.235,.133),l(-.08,.097),l(.182,.037),l(.143,.217),l(-.165,.278),l(-.672,.024),l(-.001,-.338),l(.172,-.097),l(.11,-.423),l(-.754,-.375),l(-.535,.109),l(-.292,-.375),l(-.228,-.061),l(-.173,.121),l(-.313,-.242),l(-.267,.182),l(-.307,0),l(-.307,-.012),l(.025,.157),l(-.52,.034),l(-.407,-.042),l(-.477,-.098),l(-.07,-.162),l(-.496,-.264),l(.795,-.472),l(.858,-.621),l(.273,-.354),l(.563,-1.167),l(.173,-.104),l(.644,-.12),l(.367,.251),l(.136,.268),l(-.28,.203),l(-.228,-.056),l(.066,.496),l(-.191,.124),l(1.163,.225),l(.225,-.236),l(.406,-.113),l(.134,-.417),l(-.458,-.022),l(-.123,-.124),l(-.02,-.203),l(.236,-.158),l(-.171,-.023),l(-.558,-.067),l(.072,-.328),l(-.034,-.13),l(-.023,-.034),l(.128,-.283),l(.572,-.198),l(.709,-.238),l(.654,.03),l(1.089,-.151),l(.245,.275),l(.329,.045),l(.076,.181),l(.259,0),
-N(431.57,91.965),l(-.447,-.633),l(-.207,-.036),l(-.165,-.18),l(-.219,.084),L(430.349,91),l(-.431,-.17),l(-.573,-.515),l(-.188,.072),l(-.478,-.265),l(-.244,-.173),l(-.036,-.233),l(-.159,-.085),l(.08,-.406),l(.155,-.25),l(-.413,-.098),l(-.258,-.378),l(-.037,-.056),l(.243,-.168),l(.26,-.181),l(.293,.033),l(.422,-.201),l(.442,0),l(.078,-.181),l(.382,-.012),l(.097,-.229),l(.358,-.061),l(.176,.072),l(.112,-.217),l(.735,-.024),l(.124,-.169),l(.524,-.048),l(.284,-.097),l(.254,-.084),l(-.282,-.218),l(.436,-.072),l(.308,.121),l(.031,.278),l(.344,.072),l(.142,-.115),l(.375,0),l(.024,-.151),l(-.062,-.073),l(.063,-.084),l(.361,-.018),l(.211,.091),l(.093,.26),l(.363,.163),l(.201,.025),l(.568,.054),l(.132,.181),l(.278,-.037),l(-.005,.169),l(.466,-.066),l(.061,-.066),l(.257,.024),l(.199,.181),l(-.099,.121),l(-.208,.024),l(-.224,.211),l(.55,.247),l(.296,.38),l(.318,.072),l(.22,-.187),l(.41,-.12),l(-.282,-.302),l(.003,-.145),l(.286,.024),l(.509,.193),l(.258,.121),l(.709,-.005),l(-.181,.283),l(.329,-.084),l(-.001,.253),l(.013,.221),l(.293,.013),l(.368,-.161),l(.311,.181),l(.802,.132),l(-.02,.249),l(.188,.208),l(.382,.096),l(.105,.331),l(-.071,-.012),l(-.065,.066),l(-.066,.04),l(-.105,-.026),L(442,89.998),l(-.119,.013),l(-.065,.04),l(-.132,.066),l(-.053,.079),l(-.118,.092),l(-.119,.053),l(-.132,.079),l(-.105,.013),l(-.118,.013),l(-.053,.092),l(-.026,.092),l(-.026,.132),l(-.053,.079),l(-.053,.105),l(-.145,.066),l(-.105,.04),l(-.092,-.026),l(-.079,.079),l(-.04,.092),l(-.053,.079),l(-.039,0),l(-.105,.026),l(-.066,.026),l(-.079,.053),l(-.118,.053),l(-.132,0),l(-.145,.04),l(-.093,.026),l(-.065,-.026),l(-.065,-.026),l(-.093,0),l(-.065,.026),l(-.158,0),l(-.132,-.053),l(-.092,-.053),l(-.093,.026),l(-.171,.053),l(-.026,.04),l(-.146,.119),l(-.092,.066),l(-.014,.131),l(-.065,.105),l(-.039,.044),l(-.055,-.095),l(-.545,-.2),l(-1.332,.181),l(-1.019,-.227),l(-1.374,-.341),l(-.746,.773),l(-.598,.163),l(-.483,-.099),l(-.354,-.129),l(-.145,-.014),
-N(421.683,94.397),l(.368,.014),l(.164,-.137),l(.096,.11),l(.249,.007),l(.104,.137),l(.194,.048),l(-.011,.165),l(.26,.039),l(-.078,.195),l(.215,0),l(.452,-.343),l(-.032,-.274),l(.237,.041),l(.262,-.055),l(.493,.089),l(.093,.145),l(.059,.144),L(425.4,94.7),l(.377,-.103),l(.044,-.13),l(.319,-.014),l(.125,-.171),l(1.25,-.035),l(.092,-.178),l(.433,-.035),l(.195,.138),l(.564,-.062),l(.146,.117),l(-.049,.165),l(.441,.178),l(.082,-.055),l(.098,-.343),l(-.056,-.158),l(-.334,-.014),l(.197,-.295),l(-.538,-.571),l(.364,-.227),l(.968,-.295),l(.162,-.172),l(.039,-.337),l(.132,-.027),l(.437,.151),l(.682,-.26),l(.145,.014),l(.354,.129),l(.483,.099),l(.598,-.163),l(.746,-.773),l(1.374,.341),l(1.019,.227),l(1.332,-.181),l(.545,.2),l(.055,.095),l(.053,.093),l(-.097,.581),l(.155,.26),l(.761,.547),l(-.636,.291),l(-.019,.367),l(-.701,.054),l(-.164,-.134),l(-.325,0),l(-.223,.197),l(.452,.063),l(.136,.196),l(-.157,.206),l(-.409,.062),l(-.04,.375),l(.204,.188),l(-.154,.294),l(-.346,.299),l(-.693,.157),l(.082,.393),l(-.89,-.116),l(-.298,.196),l(-.85,-.08),l(-.566,.107),l(-.646,.5),l(-.287,-.152),l(-.612,.009),l(-.179,-.107),l(-1.04,-.065),l(-.478,-.112),l(-.894,-.082),l(-1.311,-.247),l(-.32,-.391),l(-.318,-.096),l(-.023,-.363),l(-.856,.227),l(-.301,-.103),l(-.445,.11),l(-.183,-.083),l(-.366,.096),l(-.329,.411),l(-.597,-.034),l(-.631,-.171),l(.029,-.171),l(-.215,-.117),l(-.579,.332),l(-.55,-.242),l(-.008,-.144),l(-.622,-.062),l(.09,-.192),l(-.214,-.288),l(.266,-.274),l(-.193,-.336),
-N(431.763,171.063),l(-.067,.354),l(.091,.72),l(.108,.508),l(.225,.168),l(.562,.11),l(.144,.183),l(.077,.353),l(-.089,1.116),l(-.146,.227),l(-.274,.171),l(-.885,.217),l(-.291,.256),l(-.664,1.275),l(-.503,1.203),l(-.243,1.004),l(-.354,.129),l(-.369,.03),l(-.129,.354),l(-.146,1.229),l(-.192,.312),l(-.385,.045),l(-.257,.284),l(-.417,.836),l(-.944,2.223),l(-.304,.624),l(-.352,.496),l(-.368,.355),l(-.239,.114),l(-.145,-.056),l(-.722,-.97),l(-.145,-.14),l(-1.104,-.05),l(-.272,.03),l(-1.31,1.265),l(-.941,.839),l(-.495,.526),l(.02,.974),l(-.189,.552),l(-.376,.686),l(-.188,-.119),l(-.224,-.042),l(-.176,-.127),l(-.145,.212),l(.144,.296),l(-.063,.127),l(-.353,.198),l(-.56,.03),l(-.977,.101),l(-.607,-.267),l(-.288,.043),l(-.271,.368),l(-.177,.113),l(-.432,-.07),l(-1.247,-.011),l(-.528,-.225),l(-.543,-.451),l(-.416,-.72),l(-.192,-.649),l(.048,-.254),l(.208,-.254),l(-.144,-.296),l(-.513,-.069),l(-.128,-.254),l(-.464,-.55),l(-.561,-.465),l(-.608,-.253),l(-.641,-.253),l(-.272,-.31),l(-.513,.072),l(-.24,.297),l(-.336,.071),l(-.881,.044),l(-.659,.03),l(-.006,-.234),l(.121,-1.188),l(-.217,-1.439),l(.09,-.989),l(.012,-.876),l(-.003,-.48),l(-.002,-.381),l(.237,-.397),l(.257,-.03),l(.433,-.13),l(.078,-.368),l(-.116,-.592),l(.095,-.34),l(.656,-.414),l(.223,-.298),l(.19,-.566),l(.316,-.962),l(-.388,-.718),l(-.164,-.762),l(.062,-.777),l(.092,-.961),l(.158,-.849),l(.353,-.482),l(.687,-1.614),l(.676,-.4),l(1.064,-.188),l(1.174,-.108),l(1.111,.121),l(.821,.277),l(1.095,1.223),l(.209,.098),l(.37,-.002),l(1.337,-.544),l(.467,-.116),l(.354,.083),l(1.173,.742),l(.965,.277),l(.934,-.005),l(.273,-.059),l(.629,-.399),l(.403,-.327),l(.774,-.287),l(.628,-.103),l(.709,-.047),l(.531,.04),l(.884,.221),l(.724,.193),l(.609,.208),l(.259,-.058),l(.761,-.697),l(.453,-.299),l(.437,-.2),l(.951,-.034),l(.173,.394),l(.575,.52),l(.351,.407),
-N(425.506,195.522),l(-1.965,-.017),l(-1.005,.007),l(.029,-.176),l(-.208,-.536),l(.271,-.989),l(-.159,-.72),l(-.191,-.522),l(-.399,-.649),l(.433,-.396),l(-.287,-.367),l(-.24,-.056),l(-.576,.058),l(-.559,-.268),l(-.176,-.324),l(-.063,-.537),l(-.111,-.211),l(-.527,-.14),l(-.101,-.064),l(.376,-.686),l(.189,-.552),l(-.02,-.974),l(.495,-.526),l(.941,-.839),l(1.31,-1.265),l(.272,-.03),l(1.104,.05),l(.145,.14),l(.722,.97),l(.145,.056),l(.239,-.114),l(.368,-.355),l(.352,-.496),l(.304,-.624),l(.944,-2.223),l(.417,-.836),l(.257,-.284),l(.385,-.045),l(.192,-.312),l(.146,-1.229),l(.129,-.354),l(.369,-.03),l(.354,-.129),l(.243,-1.004),l(.503,-1.203),l(.664,-1.275),l(.291,-.256),l(.885,-.217),l(.274,-.171),l(.146,-.227),l(.089,-1.116),l(-.077,-.353),l(-.144,-.183),l(-.562,-.11),l(-.225,-.168),l(-.108,-.508),l(-.091,-.72),l(.067,-.354),l(.627,.109),l(.208,.083),l(.923,1.238),l(.395,.887),l(.119,1.2),l(-.134,.651),l(.169,1.228),l(.205,.578),l(.381,.633),l(.208,.21),l(.047,.127),l(-.225,.143),l(-.674,.032),l(-1.187,-.191),l(-.481,-.082),l(-.24,.1),l(-.29,.312),l(-.323,.539),l(1.088,1.067),l(1.343,1.179),l(.638,1.07),l(.382,1.057),l(.208,.183),l(-.208,.114),l(-.354,.327),l(-.866,1.743),l(-.4,.511),l(-.528,.399),l(-.144,.198),l(-.064,.424),l(.112,.776),l(.273,1.185),l(.207,.592),l(.4,.661),l(.432,.605),l(.064,.791),l(.112,.324),l(1.217,1.236),l(.498,.802),l(.194,.804),l(.209,.451),l(-.159,.185),l(.1,.861),l(-.271,.086),l(-.863,-.292),l(-.864,-.334),l(-.576,-.194),l(-.56,-.124),l(-.479,-.04),l(-.271,-.055),l(-.878,.076),l(-.863,-.023),l(-.56,-.109),l(-1.022,-.149),l(-.831,-.038),l(-1.773,-.088),l(-.88,-.093),l(-.045,.495),
-N(551.793,147.278),l(-.788,-.111),l(-.458,-.253),l(-.379,-.367),l(-.248,-1.101),l(-.112,-.141),l(-.342,-.141),l(-.662,-.083),l(-.105,-.07),l(-.014,-.268),l(.116,-.466),l(-.178,-.451),l(-.418,-.38),l(-.294,-.013),l(-1.181,.412),l(-1.229,.087),l(-.81,.143),l(-.947,.073),l(-.415,-.083),l(-.263,-.226),l(-.135,-.197),l(-.909,.143),l(-.548,.382),l(-.856,.016),l(-1.264,-.011),l(-.691,.128),l(-.723,.115),l(-.541,.03),l(.182,-.954),l(.049,-.354),l(.31,-.792),l(.285,-.383),l(.794,-.47),l(.697,-.258),l(1,-.077),l(.209,-.072),l(.188,-.255),l(.036,-.974),l(-.186,-.281),l(-.652,-.053),l(-.185,-.394),l(-.111,-1.34),l(-.168,-.38),l(-.409,-.224),l(-1.144,-.388),l(-.695,-.391),l(-.353,-.464),l(-.71,-1.068),l(-.802,-1.083),l(.887,.32),l(.63,.194),l(1.069,.248),l(.854,.235),l(.541,.039),l(.742,.024),l(1.187,-.218),l(.349,-.002),l(1.005,.135),l(1.234,-.12),l(.964,-.175),l(1.183,-.19),l(1.066,-.274),l(.247,-.156),l(.069,-.184),l(.099,-.903),l(.232,-.876),l(.188,-.34),l(.412,-.369),l(.597,-.441),l(.283,-.072),l(.644,.039),l(.516,.082),l(.254,-.086),l(.321,-.693),l(.362,-.271),l(.559,-.243),l(.562,.025),l(1.001,.375),l(.237,-.086),l(.34,-.383),l(.021,-.084),l(.139,-1.214),l(.288,-.834),l(.224,-.424),l(.292,-.228),l(.416,-.115),l(.513,-.031),l(.315,-.115),l(.199,-.255),l(-.088,-.437),l(-.129,-.281),L(556.193,125),l(-.35,-.336),l(.355,-.129),l(.997,.122),l(.698,.039),l(.513,-.215),l(.289,-.255),l(-.033,-.31),l(-.223,-.478),l(.13,-.283),l(.4,-.341),l(.524,-.355),l(.324,-.426),l(-.198,-.477),l(.119,-.483),l(-.232,-.171),l(-.01,-.336),l(-.411,-.271),l(-.01,-.32),l(.464,-.413),l(.258,-.214),l(.246,.023),l(.559,-.395),l(.272,-.19),l(.53,-.292),l(1.148,-.152),l(1.345,-.012),l(.647,.144),l(.338,-.179),l(.332,.005),l(.455,-.297),l(.358,-.004),l(.148,-.142),l(.313,.14),l(.105,.112),l(.281,-.21),l(.296,.047),l(.554,.117),l(.004,.456),l(.282,-.128),l(.625,-.009),l(.373,.323),l(.213,.247),l(.007,.501),l(-.312,.516),l(.301,.07),l(.198,.218),l(.252,.281),l(.52,-.196),l(.239,0),l(.104,.199),l(.178,.09),l(.565,.436),l(1.337,.104),l(.305,.111),l(.147,.126),l(-.207,.084),l(-.688,.37),l(-.411,.232),l(-.155,.43),l(-.071,.479),l(-.234,.116),l(-.125,-.179),l(-.621,-.102),l(-.438,.132),l(-.271,.298),l(-.262,-.116),l(-.557,.265),l(-.928,-.149),l(-.568,-.138),l(-1.708,-.325),l(-.894,.265),l(-.38,.611),l(.09,.166),l(.336,0),l(.047,.314),l(-.202,.149),l(.101,.199),l(.598,-.017),l(-.002,.347),l(-.384,.099),l(-.139,.413),l(.389,.232),l(-.116,.479),l(-.215,.132),l(.089,.248),l(.606,.298),l(-.003,.532),l(.782,-.003),l(-.039,.43),l(.188,.248),l(.702,-.05),l(.668,.377),l(.012,.211),l(-.2,.255),l(-.504,.2),l(-.643,.196),l(-.517,.248),l(.032,.366),l(.188,.377),l(-.237,.977),l(-1.512,1.503),l(.261,.38),l(-.358,.281),l(-.609,.133),l(-.353,.467),l(-.509,1.216),l(-.478,.547),l(-1.193,.496),l(-.177,.364),l(-.277,.481),l(-.563,.61),l(-.076,.38),l(-.71,.259),l(-.734,-.011),l(-.895,.314),l(-.361,-.094),l(-.158,-.518),l(-.207,-.132),l(-.404,.083),l(-.535,.463),l(-.144,.446),l(-.979,.893),l(-.186,.543),l(-.079,.269),l(.116,.38),l(.541,.163),l(.504,.085),l(.425,.014),l(-.114,.689),l(-.154,.735),l(.412,.411),l(.33,.099),l(.537,-.099),l(.112,.441),l(.216,.507),l(.654,1.333),l(-.232,.149),l(.241,.463),l(-.317,.066),l(-.15,.248),l(-.55,.083),l(-.145,-.335),l(-.183,-.062),l(-.78,.215),l(-.2,.331),l(-.735,-.099),l(-.229,-.149),l(-.835,-.021),l(-.835,-.009),l(-.259,-.052),l(.015,.728),l(-.866,.017),l(-.296,.431),l(-.37,.036),
-N(606.155,150.953),l(-.037,-.466),l(-.627,-2.479),l(-.064,-.578),l(-.4,.044),l(-.281,.115),l(-.395,1.159),l(-.224,.354),l(-.529,-.448),l(-.249,-.267),l(-.23,-.281),l(-.001,-.381),l(-.009,-.522),l(.131,-.283),l(.651,-.356),l(.498,-.13),l(.938,-.767),l(.159,-.34),l(.012,-.79),l(-.057,-.127),l(-.111,-.098),l(-2.473,-.198),l(-.559,.003),l(-.916,.062),l(-.547,-.053),l(-.537,-.109),l(-.095,-.099),l(-.079,-.719),l(-.053,-.479),l(-.129,-.324),l(-.417,-.054),l(-.489,.06),l(-.372,-.266),l(-.339,-.266),l(-1.252,-.303),l(-.234,.171),l(-.555,.525),l(-.124,.283),l(.083,.155),l(.494,.237),l(1.224,.938),l(.126,.112),l(-.047,.155),l(-.382,.101),l(-.502,.13),l(-.4,.299),l(-.548,.61),l(.339,.323),l(1.042,.431),l(.193,.21),l(-.029,.269),l(-.505,.765),l(.04,.254),l(.352,.45),l(.325,1.409),l(.402,1.775),l(.147,.532),l(-.172,.322),l(.068,.183),l(-.321,.071),l(-.35,-.056),l(-.148,-.706),l(-.198,-.084),l(-.253,.354),l(-.171,.354),l(-.172,.057),l(-.115,-.099),l(-.28,-.592),l(-.152,-.169),l(-.412,.537),l(-.504,.298),l(-.992,.397),l(-.571,.213),l(-.264,.226),l(-.05,.113),l(.106,.579),l(.183,.409),l(-.336,.495),l(-.305,.332),l(-.013,.257),l(-.548,.415),l(-.593,.467),l(-.467,.185),l(-.432,.057),l(-.746,.206),l(-.591,.362),l(-.459,.58),l(-.551,.552),l(-.88,1.061),l(-.611,.552),l(-.673,.276),l(-.675,.829),l(-.676,.467),l(-.728,.368),l(-.452,.241),l(-.427,.312),l(-.192,.509),l(-.073,.466),l(-.341,.41),l(-.649,.298),l(-.428,.058),l(-.506,-.098),l(-.258,.269),l(-.366,.887),l(-.277,.23),l(-.505,-.253),l(-.614,.142),l(-.354,.283),l(-.304,.565),l(-.165,.48),l(-.005,.508),l(.166,1.539),l(.018,.805),l(-.208,.495),l(.227,.324),l(.315,.423),l(-.015,.508),l(-.199,.607),l(-.669,1.611),l(-.341,.834),l(-.13,.636),l(.047,.649),l(.21,1.764),l(-.081,.24),l(-.643,.001),l(-.433,-.013),l(-.186,.142),l(-.334,.961),l(-.324,.594),l(.025,.127),l(.493,.352),l(-.805,.327),l(-.306,.015),l(-.77,.284),l(-.295,.41),l(-.101,.692),l(-.157,.255),l(-.367,.283),l(-.526,.255),l(-.099,.057),l(-.066,.042),l(-.231,.156),l(-.145,0),l(-.174,-.056),l(-1.417,-1.451),l(-.092,-.395),l(-.276,-.522),l(-.34,-1.397),l(-.689,-1.792),l(-.94,-1.933),l(-.979,-1.508),l(-.554,-1.722),l(-.507,-1.792),l(-.738,-1.636),l(-.82,-1.42),l(-.424,-.737),l(-.598,-1.439),l(-.363,-1.157),l(-.767,-3.274),l(-.469,-2.695),l(-.157,-1.566),l(-.051,-.24),l(.232,-.565),l(.546,-.834),l(.007,-.311),l(-.404,-.281),l(-.367,-.437),l(-.113,-.635),l(-.108,-.917),l(.065,-.622),l(-.837,.03),l(-.19,.212),l(-.235,.424),l(.009,.183),l(.276,.254),l(.074,.183),l(-.073,.438),l(-.301,.438),l(-.503,.368),l(-.812,.369),l(-.504,.114),l(-.617,.255),l(-.377,.015),l(-.861,-.281),l(-.572,-.38),l(-1.018,-1),l(-1.391,-1.268),l(-.516,-.705),l(.267,-.043),l(1.062,.125),l(.615,-.086),l(.443,-.142),l(.461,-.283),l(.521,-.608),l(-.067,-.24),l(-.156,.071),l(-.587,.114),l(-.847,-.026),l(-.607,-.112),l(-.632,-.132),l(-.5,-.218),l(-.203,-.07),l(-.929,-.661),l(-.668,-.775),l(-.057,-.197),l(.37,-.036),l(.296,-.431),l(.866,-.017),l(-.015,-.728),l(.259,.052),l(.835,.009),l(.835,.021),l(.229,.149),l(.735,.099),l(.2,-.331),l(.78,-.215),l(.183,.062),l(.145,.335),l(.55,-.083),l(.15,-.248),l(.317,-.066),l(-.241,-.463),l(.232,-.149),l(-.654,-1.333),l(-.216,-.507),l(-.112,-.441),L(557,143.058),l(-.33,-.099),l(-.412,-.411),l(.154,-.735),l(.114,-.689),l(-.425,-.014),l(-.504,-.085),l(-.541,-.163),l(-.116,-.38),l(.079,-.269),l(.186,-.543),l(.979,-.893),l(.144,-.446),l(.535,-.463),l(.404,-.083),l(.207,.132),l(.158,.518),l(.361,.094),l(.895,-.314),l(.734,.011),l(.71,-.259),l(.076,-.38),l(.563,-.61),l(.277,-.481),l(.177,-.364),l(1.193,-.496),l(.478,-.547),l(.509,-1.216),l(.353,-.467),l(.609,-.133),l(.358,-.281),l(-.261,-.38),l(1.512,-1.503),l(.237,-.977),l(-.188,-.377),l(-.032,-.366),l(.517,-.248),l(.643,-.196),l(.504,-.2),l(.2,-.255),l(-.012,-.211),l(-.668,-.377),l(-.702,.05),l(-.188,-.248),l(.039,-.43),l(-.782,.003),l(.003,-.532),l(-.606,-.298),l(-.089,-.248),l(.215,-.132),l(.116,-.479),l(-.389,-.232),l(.139,-.413),l(.384,-.099),l(.002,-.347),l(-.598,.017),l(-.101,-.199),l(.202,-.149),l(-.047,-.314),l(-.336,0),l(-.09,-.166),l(.38,-.611),l(.894,-.265),l(1.708,.325),l(.568,.138),l(.928,.149),l(.557,-.265),l(.262,.116),l(.271,-.298),l(.438,-.132),l(.621,.102),l(.125,.179),l(.234,-.116),l(.071,-.479),l(.155,-.43),l(.411,-.232),l(.688,-.37),l(.207,-.084),l(.502,-.152),l(0,.515),l(.441,1.03),l(.221,.515),l(.81,.11),l(.441,.405),l(.221,.258),l(-.331,.221),l(-.184,.184),l(.073,.589),l(.037,.552),l(.294,.221),l(.718,.096),l(.092,.078),l(.044,.182),l(.68,.099),l(-.104,.414),l(.367,.694),l(-.578,.364),l(-.376,.281),l(-.368,.049),l(-.337,-.264),l(-.033,-.364),l(-.785,.198),l(.157,.694),l(.579,.595),l(-.104,.446),l(.272,.364),l(-.215,.215),l(.099,.43),l(.198,.066),l(.477,-.314),l(.383,.248),l(.772,.843),l(.363,-.116),l(1.078,.579),l(-.116,.364),l(.756,.248),l(.154,-.066),l(.859,.596),l(-1.07,.909),l(-.281,.116),l(.008,.364),l(-.221,.265),l(.04,.396),l(-.309,.397),l(-.218,.43),l(.039,.248),l(.63,.38),l(.466,-.083),l(.665,.479),l(.704,.149),l(.305,.529),l(1.242,.678),l(.231,-.166),l(1.027,.595),l(.538,-.066),l(.182,.397),l(.835,.166),l(.304,.198),l(.15,-.066),l(.087,-.215),l(.503,0),l(.482,.265),l(.582,-.347),l(.494,.298),l(.643,.066),l(.142,.231),l(-.101,.446),l(.663,.149),l(.286,.281),l(.618,.265),l(.584,-.281),l(.313,.066),l(-.034,.331),l(.312,.248),l(.379,-.231),l(.721,.148),l(.847,.364),l(.606,-.297),l(.268,.364),l(.399,.116),l(.357,-.132),l(.271,.083),l(.687,-.132),l(.336,.05),l(.311,-.694),l(-.429,-.827),l(.07,-.876),l(.318,-.761),l(-.037,-.022),l(.345,-.129),l(.471,-.102),l(.231,.069),l(.139,.183),l(-.052,.861),l(.212,.662),l(-.092,.113),l(.235,.493),l(.637,.18),l(.559,.081),l(.869,.214),l(.085,.021),l(.544,-.074),l(.531,-.313),l(.301,.055),l(.335,.125),l(1.238,.063),l(1.036,-.062),l(.624,-.06),l(.217,-.58),l(-.017,-.282),l(-.258,-.238),l(-.313,-.069),l(-.326,-.294),l(-.042,-.24),l(.07,-.156),l(.189,-.1),l(.784,-.033),l(.714,-.216),l(.397,-.27),l(1.123,-1.107),l(.543,-.37),l(.829,-.258),l(1.105,-.726),l(.546,-.299),l(.355,-.087),l(.286,.167),l(.975,.319),l(.377,-.044),l(1.377,-.84),l(.455,.392),l(.716,.715),l(.046,.38),l(-.354,.454),l(-.138,.269),l(.102,.056),l(.3,.055),l(.657,.081),l(.73,.179),l(.624,.081),l(-.018,.508),l(-.112,.24),l(-.596,.582),l(-.072,.283),l(.184,.718),l(-.295,.058),l(-.853,-.221),l(-.558,-.082),l(-.312,.129),l(-.719,.512),l(-1.446,.883),l(-.197,.354),l(.057,.761),l(-.136,.382),l(-.938,1.134),l(-.045,.212),l(.192,.408),l(0,.324),l(-1.148,2.25),l(-.17,.128),l(-.309,-.013),l(-.391,-.11),l(-.811,-.32),l(-.133,.283),l(.146,1.594),l(-.191,.354),l(-.401,.144),l(-.228,.185),l(.152,.93),l(-.015,.678),l(-.273,.368),l(-.25,.129),l(-.255,-.14),l(-.595,-.152),
-N(478.516,135.173),l(.052,-.292),l(-.049,-.169),l(-.197,-.107),l(.107,-.175),l(.292,-.919),l(-.015,-.818),l(.517,-1.09),l(.3,-.891),l(-.004,-.409),l(.133,-.283),l(.07,-.749),l(.033,-.847),l(.062,-.174),l(.026,-.278),l(-.065,-.411),l(.037,-.119),l(.102,-.063),l(1.902,1.034),l(.365,.167),l(.253,-.016),l(1.139,-.656),l(2.96,-1.541),l(.161,-.071),l(.87,1.632),l(.311,.69),l(.093,.056),l(-.46,.44),l(-.257,.171),l(-.97,.26),l(-2.586,.622),l(-.646,.229),l(1.146,1.32),l(.698,.885),l(-.765,.724),l(-.456,.37),l(-.24,.072),l(-1.249,.332),l(-.462,.61),l(-.975,.782),l(-2.079,-.299),l(-.154,-.017),
-N(456.028,151.46),l(-.021,1.003),l(.033,3.078),l(-.088,.17),l(-1.561,-.019),l(-.52,-.011),l(-.073,1.13),l(-1.981,-.963),l(-5.577,-2.792),l(-4.941,-2.372),l(-5.231,-2.554),l(-.41,.059),l(-1.818,.858),l(-1.519,.729),l(-.231,.157),l(-1.192,-.911),l(-.258,-.182),l(-1.008,-.333),l(-1.646,-.442),l(-.832,-.137),l(-.098,-.07),l(-.86,-1.506),l(-.178,-.168),l(-1.028,-.347),l(-.702,-.165),l(-.544,.201),l(-.244,-.154),l(-.562,-.873),l(-.249,-.917),l(-1.272,-1.702),l(.152,-.283),l(.249,-.128),l(.666,-.47),l(.086,-.17),l(.061,-.664),l(-.457,-1.156),l(.158,-.495),l(.16,-.622),l(-.101,-.748),l(.1,-.862),l(-.052,-.691),l(-.147,-.833),l(-.88,-1.605),l(.241,-.383),l(.204,-.156),l(.22,-.143),l(.864,-.598),l(.155,-.227),l(.147,-.537),l(-.274,-.973),l(.126,-.354),l(1.473,-1.138),l(.579,-.314),l(.802,-.428),l(.093,-.269),l(-.064,-.564),l(.093,-.981),l(1.436,.59),l(.995,.309),l(.521,.013),l(.863,-.129),l(.604,.027),l(1.552,.223),l(.614,.479),l(.794,.224),l(.486,-.001),l(.342,.197),l(.173,.226),l(.26,.819),l(.39,.564),l(.688,.591),l(.378,.126),l(.678,.14),l(1.031,.083),l(.447,.07),l(.973,.224),l(.639,.224),l(.552,.281),l(1.289,.788),l(.84,.464),l(.465,.013),l(.441,-.128),l(.758,-.411),l(.706,-.623),l(.3,-.523),l(0,-.254),l(-.276,-.621),l(-.112,-.579),l(.044,-.41),l(.237,-.537),l(.661,-.58),l(.333,-.198),l(.554,-.241),l(.644,-.298),l(1.376,-.413),l(1.205,.054),l(.728,.154),l(.844,.365),l(.188,.169),l(.043,.508),l(.281,.253),l(.301,.014),l(.945,.125),l(.712,.309),l(.45,.027),l(1.286,.04),l(.302,.197),l(.068,.381),l(.276,.296),l(-.099,.208),l(-.369,.228),l(-.21,.34),l(.354,1.283),l(-.231,.425),l(-.322,.553),l(-.056,.311),l(.185,.945),l(.388,.916),l(.042,.367),l(-.015,.988),l(-.019,3.869),l(-.016,1.468),l(-.008,2.048),l(-.001,.692),l(.045,2.81),l(-.021,1.342),l(.011,2.612),
-N(478.212,134.714),l(-.834,-1.746),l(-.796,-1.944),l(-.124,-.289),l(.109,-.066),l(.679,-.851),l(.219,-.438),l(.183,-.507),l(.171,-.566),l(.188,-.822),l(.116,.018),l(.137,-.093),l(.006,-.204),l(.028,-.315),l(.372,-.051),l(.151,.022),l(.07,.099),l(.355,-.07),l(.009,-.167),l(.067,-.193),l(.088,-.041),l(.07,.023),l(.183,.346),l(.201,.128),l(.021,.183),l(-.047,.122),l(.082,.085),l(-.102,.063),l(-.037,.119),l(.065,.411),l(-.026,.278),l(-.062,.174),l(-.033,.847),l(-.07,.749),l(-.133,.283),l(.004,.409),l(-.3,.891),l(-.517,1.09),l(.015,.818),l(-.292,.919),l(-.107,.175),l(-.067,.068),l(-.042,.042),
-N(495.751,163.817),l(-.03,-.184),l(-.112,-.537),l(-.508,-.945),l(-.73,-.987),l(-.438,-.493),l(-.846,-.69),l(-.51,-.875),l(-.814,-1.876),l(-.474,-.889),l(-.28,-.409),l(-.794,-.507),l(-1.271,-.689),l(-.527,-.634),l(-.8,-1.17),l(-.081,-.96),l(-.061,-.776),l(-.002,-.89),l(-.104,-.381),l(-.312,-.663),l(-.944,-1.65),l(-.357,-.494),l(-.758,-.62),l(-.459,-.225),l(-.499,-.126),l(-.308,-.282),l(-.483,-.578),l(.149,-.692),l(-.111,-.437),l(-.474,-.818),l(-.747,-1.072),l(-.793,-.902),l(-1.069,-1.494),l(-.525,-.931),l(-.352,-.479),l(-.722,-.761),l(-.524,-.056),l(-.248,0),l(.077,-.296),l(.193,-.283),l(.311,-1.314),l(.104,-.583),l(.154,.017),l(2.079,.299),l(.975,-.782),l(.462,-.61),l(1.249,-.332),l(.24,-.072),l(.456,-.37),l(.765,-.724),l(-.698,-.885),l(-1.146,-1.32),l(.646,-.229),l(2.586,-.622),l(.97,-.26),l(.257,-.171),l(.46,-.44),l(.093,.056),l(1.129,.459),l(.757,.222),l(2.034,.934),l(1.14,.473),l(2.44,1.101),l(.258,.196),l(.399,.633),l(.141,.07),l(.973,-.048),l(.135,.366),l(-.118,.396),l(.047,.818),l(.118,.253),l(.812,.277),l(1.557,.697),l(4.048,.132),l(1.657,.259),l(.408,.054),l(.334,.619),l(.185,.239),l(1.07,.05),l(.644,-.044),l(.043,.121),l(.277,.648),l(.365,.494),l(.178,.663),l(.052,.113),l(.615,-.029),l(.248,.126),l(-.204,.237),l(.194,.187),l(.184,.282),l(.234,.067),l(.234,.27),l(.886,.168),l(.423,.437),l(-.07,.28),l(-.235,.035),l(-.111,.25),l(.316,.381),l(-.188,.593),l(-.122,.198),l(.165,.268),l(.302,.666),l(.149,-.117),l(.372,.282),l(.105,.616),l(.422,.696),l(-.028,.423),l(.222,.268),l(.16,.197),l(.287,.084),l(.136,-.007),l(.336,.083),l(1.043,2.198),l(.548,1.154),l(.261,.902),l(3.362,.375),l(3.387,.446),l(.839,.108),l(.584,-.469),l(.152,-.057),l(.581,.914),l(.155,1.453),l(-5.346,2.982),l(-2.35,1.213),l(-1.691,.815),l(-.169,.085),l(-1.148,.346),l(-3.097,1.035),l(-4.618,1.566),l(-.484,.229),l(-.041,.127),l(-.383,.397),l(-1.907,2.271),l(-2.042,2.667),l(-1.302,-2.703),l(-1.211,-2.45),l(-.452,-.012),l(-.715,.047),l(-.446,-.125),l(-.671,-.151),l(-.216,.1),l(-.174,.185),l(-.11,.495),l(.041,.678),l(-.113,.565),l(-.692,.563),
-N(476.458,130.735),l(.124,.289),l(.796,1.944),l(.834,1.746),l(-.38,.381),l(-.479,1.145),l(-.334,1.413),l(-.171,.593),l(-.18,.156),l(-.407,-.07),l(-.448,-.521),l(-.782,-.676),l(-.386,-.494),l(-.338,-.988),l(-.521,-.45),l(-.289,-.621),l(-.17,-.479),l(-.198,-.353),l(-.466,.17),l(-.267,.523),l(.604,1.34),l(.131,.381),l(.634,.86),l(.933,1.042),l(.473,1.199),l(.526,.973),l(.277,.818),l(.391,.465),l(.912,1.735),l(1.072,1.904),l(.428,.705),l(.586,.549),l(.451,.352),l(.151,.183),l(-.241,.17),l(-.285,.1),l(-.043,.155),l(.238,1.087),l(.252,.467),l(.127,.238),l(.812,.591),l(.397,.168),l(.406,.521),l(.416,.38),l(.311,.56),l(-10.382,-.006),l(-2.138,-.001),l(-2.774,.002),l(-2.513,.015),l(-2.268,-.029),l(-1.664,.01),l(-1.241,.007),l(-1.614,-.019),l(-.914,.005),l(-.819,.089),l(-.011,-2.612),l(.021,-1.342),l(-.045,-2.81),l(.001,-.692),l(.008,-2.048),l(.016,-1.468),l(.019,-3.869),l(.015,-.988),l(-.042,-.367),l(-.388,-.916),l(-.185,-.945),l(.056,-.311),l(.322,-.553),l(.231,-.425),l(-.354,-1.283),l(.21,-.34),l(.369,-.228),l(.099,-.208),l(.337,.168),l(.553,-.015),l(.628,-.1),l(.786,-.001),l(1.513,.293),l(.587,.115),l(.779,.122),l(.721,.154),l(.348,.409),l(.4,0),l(.928,.083),l(.998,.394),l(.628,.069),l(.245,-.127),l(.72,-.538),l(.925,-.397),l(.837,-.186),l(.78,-.27),l(.375,-.072),l(.346,.056),l(.535,-.001),l(.723,.126),l(.202,.465),l(.596,.366),l(.518,-.156),l(.64,.267),l(.382,.027),l(.561,-.401),l(.241,.179),l(.277,.056),l(.674,.13),l(.338,-.062),l(.46,-.165),l(.51,-.308),
-N(580.625,132.873),l(.24,.43),l(.299,.05),l(.276,-.314),l(.134,-.513),l(.275,.066),l(.186,-.182),l(1.079,.199),l(.132,.612),l(.867,.264),l(.726,.595),l(.472,.215),l(.15,-.132),l(.454,.281),l(.657,.794),l(.158,-.166),l(.71,-.116),l(.289,.166),l(.178,.38),l(-.069,.281),l(1.451,.893),l(.333,-.248),l(.326,.017),l(-.175,.396),l(.014,.265),l(.935,.066),l(.365,-.066),l(.54,.496),l(.141,.463),l(.237,-.099),l(-.01,-.364),l(.685,.38),l(.271,-.083),l(.08,-.331),l(.407,0),l(.63,.281),l(.319,.364),l(.849,-.066),l(.341,.116),l(.339,-.281),l(.655,.159),l(.037,.022),l(-.318,.761),l(-.07,.876),l(.429,.827),l(-.311,.694),l(-.336,-.05),l(-.687,.132),l(-.271,-.083),l(-.357,.132),l(-.399,-.116),l(-.268,-.364),l(-.606,.297),l(-.847,-.364),l(-.721,-.148),l(-.379,.231),l(-.312,-.248),l(.034,-.331),l(-.313,-.066),l(-.584,.281),l(-.618,-.265),l(-.286,-.281),l(-.663,-.149),l(.101,-.446),l(-.142,-.231),l(-.643,-.066),l(-.494,-.298),l(-.582,.347),l(-.482,-.265),l(-.503,0),l(-.087,.215),l(-.15,.066),l(-.304,-.198),l(-.835,-.166),l(-.182,-.397),l(-.538,.066),l(-1.027,-.595),l(-.231,.166),l(-1.242,-.678),l(-.305,-.529),l(-.704,-.149),l(-.665,-.479),l(-.466,.083),l(-.63,-.38),l(-.039,-.248),l(.218,-.43),l(.309,-.397),l(-.04,-.396),l(.221,-.265),l(-.008,-.364),l(.281,-.116),l(1.07,-.909),
-N(374.125,167.166),l(-1.41,-.924),l(-.661,-.604),l(-.537,-.788),l(-.292,-.662),l(-.15,-.183),l(-.312,-.154),l(-.567,-.053),l(-.655,-.307),l(-.695,-.561),l(-.604,-.194),l(-.567,-.025),l(-1.209,.12),l(-1.821,.194),l(-.523,.417),l(.06,-.502),l(.563,-1.301),l(.188,-.819),l(.13,-1.13),l(-.162,-1.101),l(-.3,-.791),l(-.624,-.747),l(.267,-.283),l(.182,-.424),l(.067,-.975),l(-.065,-.537),l(-.174,-.353),l(-.808,-.817),l(-.297,-.112),l(-.393,.438),l(-.055,-.197),l(-.013,-.381),l(.08,-.689),l(.474,.013),l(5.055,.056),l(2.396,.014),l(.732,-.033),l(.212,.027),l(-.051,-1.102),l(-.164,-1.539),l(.01,-.707),l(.249,-.383),l(.575,-.427),l(.726,-.315),l(.809,-.287),l(.144,-.128),l(.099,-2.6),l(.07,-2.261),l(.047,-.509),l(.557,-.074),l(6.005,.022),l(.56,.011),l(.104,-.396),l(-.002,-.65),l(.03,-1.752),l(2.829,1.509),l(4.12,2.42),l(1.414,.91),l(-.523,.13),l(-3.231,.089),l(.049,.776),l(.908,7.962),l(.19,1.468),l(.178,1.736),l(.325,2.753),l(.202,2.386),l(.186,1.468),l(.724,.787),l(-.379,1.613),l(-6.457,.01),l(-1.953,.026),l(-.945,.344),l(-.387,.031),l(-.485,-.054),l(-.713,-.137),l(-.535,-.124),l(-.06,.212),l(.055,.296),l(-.107,.269),l(-.454,-.082),l(-.214,-.168),l(-.568,-.83),l(-.261,-.111),l(-.402,.073),l(-.252,.256),l(-.181,.552),l(-.018,.607),l(-.332,.284),
-N(476.114,191.139),l(-.563,.54),l(-.626,.314),l(-.367,.016),l(-.303,-.196),l(-.303,-.097),l(-.88,.132),l(-.881,.33),l(-.911,.048),l(-.942,-.234),l(-.495,-.011),l(-.464,.087),l(-.496,.229),l(-1.288,-1.32),l(-1.032,-.926),l(-.207,-.083),l(-.258,.157),l(-.436,.582),l(-.16,.1),l(-.684,-.631),l(-.384,-.012),l(-.529,.37),l(-.258,.242),l(-.352,.016),l(-.366,-.195),l(-.525,-.477),l(-.348,-.493),l(-.795,-.772),l(-.143,-.239),l(-.031,-.07),l(.083,-.679),l(-.157,-.352),l(-.558,-.477),l(-.814,-.165),l(-.367,-.224),l(-.285,-.436),l(-.059,-.72),l(-.206,-.366),l(-.207,-.168),l(-.717,-.434),l(-.558,-.378),l(-.445,-.351),l(-.173,-.395),l(.148,-.481),l(-.223,-.267),l(-.351,-.196),l(-.799,-.235),l(-.797,-.447),l(-.223,-.225),l(-.252,-.493),l(-.207,-.126),l(-.272,.001),l(-.802,.019),l(-.158,-.211),l(-.01,-.664),l(.416,-1.472),l(-.122,-.536),l(-.347,-.549),l(-1.342,-1.673),l(.15,-.425),l(-.026,-.367),l(-.266,-.465),l(-.444,-.407),l(-.155,-.295),l(-.137,-.522),l(-.221,-1.228),l(-.141,-.225),l(-.338,-.012),l(-.517,.088),l(-.219,-.352),l(.316,-.609),l(.542,-.596),l(.087,-.34),l(-.342,-.662),l(.053,-.24),l(.718,-.428),l(.149,-.212),l(-.131,-.677),l(.122,-.438),l(.583,-.809),l(.417,-1.245),l(.229,-.143),l(1.245,-.05),l(.839,.009),l(.04,-.283),l(-.031,-1.229),l(-.036,-1.002),l(.038,-.749),l(-.085,-2.5),l(.036,-.636),l(.016,-.946),l(.02,-1.045),l(.073,-1.13),l(.52,.011),l(1.561,.019),l(.088,-.17),l(-.033,-3.078),l(.021,-1.003),l(.819,-.089),l(.914,-.005),l(1.614,.019),l(1.241,-.007),l(1.664,-.01),l(2.268,.029),l(2.513,-.015),l(2.774,-.002),l(2.138,.001),l(10.382,.006),l(.229,.414),l(.499,1.115),l(.281,3.501),l(.319,1.637),l(.182,.211),l(.625,.394),l(.595,.366),l(.617,.507),l(.491,.197),l(.254,.223),l(-.238,.199),l(-.277,.327),l(-.306,.566),l(-.369,.242),l(-.511,.172),l(-.427,.116),l(-.153,.142),l(-.235,.496),l(-.348,.171),l(-.73,.033),l(-.204,.552),l(-.038,.452),l(-.202,.862),l(-.242,.722),l(-.541,1.302),l(-.068,.495),l(.092,.903),l(-.013,.679),l(-.001,.083),l(-.148,.947),l(-.398,1.231),l(-.214,1.061),l(-1.04,.331),l(-.414,.37),l(-.693,1.134),l(-.154,.34),l(-.191,1.088),l(-.141,1.074),l(-.197,.185),l(-.274,.044),l(-.431,-.096),l(-.259,.072),l(-.163,.114),l(-.187,1.103),l(-.115,.933),l(-.2,1.272),l(.039,.522),l(-.229,1.159),l(-.469,.299),l(-.288,-.012),l(-.928,-.122),l(-.321,.03),l(-.188,.806),l(-.054,.466),l(.094,.141),l(.479,.11),l(.734,.123),l(.334,.167),l(.805,.913),l(1.06,1.067),l(.751,1.464),l(.345,.732),l(.348,.421),l(.462,.28),l(.415,.097),l(.269,.309),l(.117,.988),l(-.034,.17),l(-.018,.141),l(-.079,-.028),l(-.464,.017),l(-1.009,.133),l(-.832,.005),l(-.671,-.052),l(-.291,.327),l(-.678,.795),
-N(518.402,163.079),l(-.282,.097),l(-.538,.27),l(-.656,.566),l(-.265,.297),l(-.166,.508),l(-.062,.41),l(-.41,.326),l(-1.418,.652),l(-2.27,.641),l(-1.285,.412),l(-.843,.312),l(-.356,.297),l(-.473,.622),l(-.436,.269),l(-.506,.114),l(-.593,-.069),l(-.521,.072),l(-.83,.439),l(-.65,.396),l(-.956,.397),l(-.752,.199),l(-1.16,.003),l(-.562,-.013),l(-.297,.128),l(-.386,.312),l(-.272,.297),l(-.45,.312),l(-.511,.241),l(-.389,.043),l(-.239,-.042),l(-.535,.411),l(-.839,.058),l(-.494,-.112),l(-.623,-.437),l(-.17,-.155),l(-.317,-.437),l(-.084,-.254),l(.18,-.721),l(-.081,-.635),l(-.312,-.507),l(-.341,-1.171),l(-.572,-1.919),l(-.072,-.438),l(.268,-.707),l(-.124,-.748),l(.692,-.563),l(.113,-.565),l(-.041,-.678),l(.11,-.495),l(.174,-.185),l(.216,-.1),l(.671,.151),l(.446,.125),l(.715,-.047),l(.452,.012),l(1.211,2.45),l(1.302,2.703),l(2.042,-2.667),l(1.907,-2.271),l(.383,-.397),l(.041,-.127),l(.484,-.229),l(4.618,-1.566),l(3.097,-1.035),l(1.148,-.346),l(.169,-.085),l(.092,.663),l(.226,.634),l(.604,.971),l(.933,1.364),l(.127,.253),l(-.006,.296),l(.483,.689),l(.241,.306),
-N(494.64,172.627),l(-.261,-.166),l(-.476,-.633),l(-.475,-.159),l(-.437,-.911),l(-1.267,-.792),l(-.277,-.594),l(-.673,-.673),l(-.594,-.119),l(-.871,-.554),l(-.555,.079),l(-.158,-.158),l(-.237,.04),l(-.277,-.198),l(-.356,.159),l(-.476,.079),l(-.277,-.436),l(-.158,.237),l(-.436,.198),l(-.792,.079),l(-.554,-.594),l(-.238,0),l(-.396,-.317),l(-.832,1.663),l(-.436,-.871),l(-.475,.079),l(-.277,.356),l(-.396,-.08),l(-.349,.041),l(.013,-.679),l(-.092,-.903),l(.068,-.495),l(.541,-1.302),l(.242,-.722),l(.202,-.862),l(.038,-.452),l(.204,-.552),l(.73,-.033),l(.348,-.171),l(.235,-.496),l(.153,-.142),l(.427,-.116),l(.511,-.172),l(.369,-.242),l(.306,-.566),l(.277,-.327),l(.238,-.199),l(.098,.129),l(.718,2.102),l(.442,1.623),l(.689,1.919),l(.618,.832),l(.205,-.212),l(-.072,-.479),l(.093,-.226),l(.31,.253),l(.4,.677),l(.384,.395),l(.534,-.043),l(.242,.014),l(1.338,1.282),l(.809,.916),l(.124,.099),l(.706,.055),l(.618,.874),l(.021,.24),l(-.025,.198),l(.118,.212),l(.507,.182),l(.915,.869),l(-.075,.094),l(-.529,.78),l(-.331,-.182),l(-.396,-.125),l(-.214,.114),l(-.055,.085),
-N(370.147,172.035),l(-2.301,-.043),l(-1.045,.006),l(-.505,.384),l(-.51,.187),l(-.74,-.024),l(-.819,.047),l(-.463,.139),l(-.009,-.003),l(-.278,-.226),l(-.169,-.409),l(.104,-.424),l(-.095,-.55),l(-.018,-.198),l(.001,-.046),l(1.695,.014),l(0,-.434),l(.155,0),l(.341,-.016),l(.186,-.077),l(.248,.062),l(.294,-.046),l(.124,-.093),l(.016,-.263),l(.077,-.078),l(.14,-.016),l(.155,.155),l(.232,.124),l(.356,.108),l(.046,.108),l(.139,.047),l(.217,-.031),l(.263,.108),l(.186,.17),l(.434,0),l(.186,-.108),l(.263,-.108),l(.279,0),l(.108,-.124),l(.016,-.124),l(-.155,-.217),l(-.202,-.077),l(-.201,.031),l(-.294,.093),l(-.108,.093),l(-.248,.062),l(-.279,-.186),l(-.031,-.186),l(-.186,-.108),l(-.17,-.015),l(-.186,.124),l(-.139,-.108),l(-.108,-.217),l(-.155,-.108),l(-.201,.031),l(-.17,-.062),l(-.387,.17),l(-.108,-.108),l(-.155,.046),l(-.202,.124),l(-.093,.294),l(-1.664,0),l(-.007,-.067),l(-.028,-.269),l(-.377,-.268),l(-.068,-.155),l(-.057,-.367),l(-.386,-.635),l(-.399,-.494),l(-.379,-.31),l(-.472,-.183),l(.54,-.34),l(.723,-.75),l(.588,-1.004),l(.334,-.82),l(.099,-.826),l(.523,-.417),l(1.821,-.194),l(1.209,-.12),l(.567,.025),l(.604,.194),l(.695,.561),l(.655,.307),l(.567,.053),l(.312,.154),l(.15,.183),l(.292,.662),l(.537,.788),l(.661,.604),l(1.41,.924),l(-.506,.399),l(-.057,.339),l(.251,1.1),l(.144,.663),l(.22,.479),l(.181,.197),l(.554,.322),l(.265,.337),l(.082,.833),l(-.004,.565),l(-.062,.142),l(-.146,-.042),l(-.963,.091),l(-.658,.074),l(-.725,-.081),l(-.503,-.209),l(-.795,-.32),l(-1.255,-.021),
-N(495.973,175.881),l(-.363,.807),l(.083,.409),l(.428,.732),l(.587,.844),l(.732,.801),l(.596,.547),l(.634,.321),l(.54,.209),l(4.26,1.443),l(1.447,.472),l(1.875,-.04),l(.236,.154),l(-4.087,4.205),l(-1.562,1.69),l(-.813,.909),l(-.8,.004),l(-1.693,-.046),l(-.626,.088),l(-.562,.215),l(-.388,.214),l(-.502,.497),l(-.294,.426),l(-.337,.115),l(-1.216,.078),l(-.305,.101),l(-.453,.511),l(-1.103,-.106),l(-.461,-.181),l(-.46,-.336),l(-.271,-.098),l(-.852,.358),l(-.675,.343),l(-.258,.199),l(-.71,.753),l(-.16,.114),l(-.847,-.094),l(-.67,-.193),l(-1.373,-.133),l(-.335,-.041),l(-2.353,-1.525),l(-.604,-.293),l(-.749,-.193),l(-1.054,-.149),l(-.319,-.069),l(.018,-.141),l(.034,-.17),l(-.117,-.988),l(-.269,-.309),l(-.415,-.097),l(-.462,-.28),l(-.348,-.421),l(-.345,-.732),l(-.751,-1.464),l(-1.06,-1.067),l(-.805,-.913),l(-.334,-.167),l(-.734,-.123),l(-.479,-.11),l(-.094,-.141),l(.054,-.466),l(.188,-.806),l(.321,-.03),l(.928,.122),l(.288,.012),l(.469,-.299),l(.229,-1.159),l(-.039,-.522),l(.2,-1.272),l(.115,-.933),l(.187,-1.103),l(.163,-.114),l(.259,-.072),l(.431,.096),l(.274,-.044),l(.197,-.185),l(.141,-1.074),l(.191,-1.088),l(.154,-.34),l(.693,-1.134),l(.414,-.37),l(1.04,-.331),l(.214,-1.061),l(.398,-1.231),l(.148,-.947),l(.001,-.083),l(.349,-.041),l(.396,.08),l(.277,-.356),l(.475,-.079),l(.436,.871),l(.832,-1.663),l(.396,.317),l(.238,0),l(.554,.594),l(.792,-.079),l(.436,-.198),l(.158,-.237),l(.277,.436),l(.476,-.079),l(.356,-.159),l(.277,.198),l(.237,-.04),l(.158,.158),l(.555,-.079),l(.871,.554),l(.594,.119),l(.673,.673),l(.277,.594),l(1.267,.792),l(.437,.911),l(.475,.159),l(.476,.633),l(.261,.166),l(-.594,.921),l(-.488,.61),l(-.105,.254),l(-.029,.396),l(.202,1.157),l(.5,-.074),l(.892,-.246),l(.4,.04),l(.556,.195),
-N(364.011,169.929),l(1.664,0),l(.093,-.294),l(.202,-.124),l(.155,-.046),l(.108,.108),l(.387,-.17),l(.17,.062),l(.201,-.031),l(.155,.108),l(.108,.217),l(.139,.108),l(.186,-.124),l(.17,.015),l(.186,.108),l(.031,.186),l(.279,.186),l(.248,-.062),l(.108,-.093),l(.294,-.093),l(.201,-.031),l(.202,.077),l(.155,.217),l(-.016,.124),l(-.108,.124),l(-.279,0),l(-.263,.108),l(-.186,.108),l(-.434,0),l(-.186,-.17),l(-.263,-.108),l(-.217,.031),l(-.139,-.047),l(-.046,-.108),l(-.356,-.108),l(-.232,-.124),l(-.155,-.155),l(-.14,.016),l(-.077,.078),l(-.016,.263),l(-.124,.093),l(-.294,.046),l(-.248,-.062),l(-.186,.077),l(-.341,.016),l(-.155,0),l(0,.434),l(-1.695,-.014),l(.019,-.477),l(.173,-.198),l(.434,-.058),l(.093,-.155),l(-.006,-.059),
-N(495.973,175.881),l(-.556,-.195),l(-.4,-.04),l(-.892,.246),l(-.5,.074),l(-.202,-1.157),l(.029,-.396),l(.105,-.254),l(.488,-.61),l(.594,-.921),l(.055,-.085),l(.214,-.114),l(.396,.125),l(.331,.182),l(.529,-.78),l(.075,-.094),l(.627,.596),l(.285,.465),l(.036,.282),l(-.118,.113),l(-.361,.185),l(-.438,.1),l(-.56,.312),l(-.566,.467),l(.253,.127),l(.645,-.058),l(.321,.013),l(.434,.124),l(-.114,.26),l(-.37,.468),l(-.34,.567),
-N(363.763,172.732),l(.463,-.139),l(.819,-.047),l(.74,.024),l(.51,-.187),l(.505,-.384),l(1.045,-.006),l(2.301,.043),l(-.111,.792),l(.115,.847),l(-.186,.312),l(-.333,.186),l(-.513,.031),l(-.401,.017),l(-.381,.186),l(-.789,.64),l(-.321,.372),l(-.047,-.126),l(-.192,0),l(-.501,-.14),l(-.165,-.254),l(.121,-.41),l(.33,-.438),l(.253,-.212),l(-.131,-.141),l(-.372,-.112),l(-.498,.015),l(-.415,.17),l(-.161,0),l(-.616,-.281),l(-.36,-.296),l(-.069,-.24),l(-.323,-.084),l(-.316,-.137),
-N(383.005,177.596),l(-.379,.397),l(-.264,.623),l(.214,.409),l(.695,.405),l(.197,.31),l(-.125,.283),l(-.332,.37),l(.309,.351),l(.648,.561),l(.051,.226),l(-.19,.143),l(-.304,-.012),l(-.548,-.223),l(-.304,.03),l(-.158,.199),l(-.03,.127),l(.296,.549),l(.179,.21),l(-.188,.354),l(-.602,.554),l(-.047,.099),l(-.339,-.224),l(-.337,-.097),l(-.143,.086),l(-.756,.922),l(-.321,-.026),l(-.404,-.322),l(-.277,-.323),l(.044,-.283),l(-.009,-.65),l(-.22,-.846),l(-.165,-.366),l(-.338,-.097),l(-.528,.046),l(-.367,.143),l(-.252,.242),l(-.193,.376),l(-.26,-.656),l(-.165,-1.369),l(-.252,-.761),l(-.475,-.619),l(-.456,-.421),l(-.42,-.224),l(-.466,-.04),l(-1.137,.148),l(-.594,-.039),l(-.238,.157),l(-.643,.866),l(-1.088,1.235),l(.051,-.392),l(-.312,-.55),l(-.764,-.775),l(-.122,-.649),l(-.84,-.366),l(-.908,-.563),l(-.277,-.296),l(.09,-.396),l(-.053,-.311),l(-.547,-.041),l(-.323,-.098),l(-.115,-.155),l(.059,-.311),l(-.038,-.1),l(.321,-.372),l(.789,-.64),l(.381,-.186),l(.401,-.017),l(.513,-.031),l(.333,-.186),l(.186,-.312),l(-.115,-.847),l(.111,-.792),l(1.255,.021),l(.795,.32),l(.503,.209),l(.725,.081),l(.658,-.074),l(.963,-.091),l(.146,.042),l(.113,.028),l(.18,.183),l(.882,.715),l(.536,.265),l(.252,-.256),l(.475,-.413),l(.338,.026),l(.356,.153),l(.565,.152),l(.43,-.243),l(.3,-.327),l(.684,-.428),l(.323,.055),l(.246,.281),l(.022,.339),l(.271,.832),l(.265,.451),l(.474,.478),l(.349,.718),l(.194,1.143),l(.559,.901),
-N(266.015,188.956),l(.103,.169),l(-.163,.326),l(-.592,.385),l(-1.74,.9),l(-.807,.23),l(-.557,.074),l(-.465,-.054),l(-.284,.115),l(-.232,1.117),l(-.348,.115),l(-.628,-.618),l(-.344,-.224),l(-1.149,.035),l(-.385,-.04),l(-.896,-.461),l(-.309,-.125),l(-.159,.029),l(-.041,.184),l(.616,.688),l(.391,.69),l(.302,1.524),l(.079,.55),l(.166,.239),l(.96,.051),l(.434,.125),l(.15,.253),l(-.265,.27),l(-.569,.272),l(-.652,.131),l(-.203,.199),l(-.259,.666),l(-.235,.213),l(-.652,.173),l(-.554,.286),l(-.74,.654),l(-.645,.739),l(-.271,.016),l(-.186,-.776),l(-.083,-.183),l(-.757,.697),l(-.414,.073),l(-.482,-.223),l(-.694,-.546),l(-.432,-.054),l(-.199,-.437),l(-.088,-.452),l(-.161,-.861),l(-.138,-.437),l(-.148,-.168),l(-.797,-1.182),l(-.51,-.491),l(.479,-.526),l(.731,-.612),l(-.121,-.282),l(-.486,-.647),l(-.256,-.437),l(-.447,-.789),l(-.162,-.804),l(-.048,-.367),l(-.035,-.438),l(-.026,-.254),l(.147,-.326),l(.379,-.511),l(.085,-1.004),l(.409,-.525),l(-.644,-.081),l(-1.99,.224),l(-.76,.174),l(-.522,.13),l(-.144,0),l(-.554,-.576),l(-.847,-.998),l(-.188,-.253),l(-.64,-.321),l(-.521,-.181),l(-1.167,.05),l(-1.163,.12),l(-.496,.017),l(-.397,-.252),l(-.429,-.548),l(-.401,-.309),l(-.099,-.353),l(.226,-1.132),l(-.103,-.395),l(-.855,-1.45),l(-.31,-.606),l(-.384,.017),l(-.234,.1),l(-.402,-.025),l(.709,-1.191),l(.241,-.722),l(.172,-.722),l(.99,-1.758),l(.381,-.059),l(.227,.027),l(.129,-.396),l(-.048,-.497),l(.056,-.288),l(.414,-.2),l(.534,-.156),l(.84,-.171),l(.128,.105),l(-.9,.151),l(-.731,.312),l(-.145,.212),l(.19,.607),l(.142,.407),l(.224,.126),l(-.043,.145),l(.153,.579),l(-.135,.367),l(-.327,.364),l(-.348,.824),l(-.137,.368),l(.253,.479),l(.288,.253),l(.25,.72),l(.341,.353),l(.523,-.114),l(.184,-.156),l(.419,-.255),l(.12,-.142),l(.066,-.523),l(-.167,-.649),l(-.21,-.282),l(-.438,-.804),l(-.136,-.135),l(-.118,-.395),l(-.247,-.18),l(.239,-.099),l(.095,-.251),l(-.204,-.144),l(1,-.379),l(1.085,-.327),l(.998,-.272),l(.086,-.225),l(.69,-.086),l(.143,-.008),l(-.042,-.157),l(-.055,-.198),l(-.125,-.036),l(-.039,-.108),l(-.128,-.072),l(-.226,.071),l(-.156,.027),l(-.229,-.012),l(-.315,-.55),l(.109,-.254),l(.337,-.213),l(.367,-.043),l(.09,.112),l(.14,.368),l(.186,.162),l(-.001,.148),l(.026,.193),l(.068,.09),l(.004,.198),l(.253,.258),l(.329,-.02),l(.699,.111),l(.455,.07),l(.593,.196),l(.323,.254),l(.393,.564),l(.156,.635),l(.358,.324),l(.359,.084),l(1.02,-.129),l(.928,-.059),l(.59,-.058),l(.799,-.059),l(.714,.125),l(.4,.479),l(.267,.169),l(.578,.253),l(.49,.14),l(1.094,.04),l(.382,-.057),l(.388,-.227),l(1.042,-.807),l(.47,-.185),l(.453,.042),l(.959,-.073),l(1.152,-.073),l(.919,.055),l(.248,.112),l(-.056,.141),l(-.294,.185),l(-.854,-.041),l(-.433,.015),l(-.083,.212),l(.059,.184),l(.593,.253),l(.609,.535),l(.195,.649),l(.246,-.523),l(.185,-.142),l(.415,.253),l(.483,.027),l(.374,.098),l(.258,.338),l(.918,.394),l(.464,.295),l(-.729,.496),l(-.161,.65),l(-.214,.226),l(-1.055,.417),l(.5,.064),l(.598,.098),l(.368,-.029),l(.33,-.142),l(.929,-.03),l(.725,.083),l(.84,.274),l(.095,.296),l(-.061,.41),l(-1.655,1.239),l(-.101,.255),l(.074,.212),l(.62,.604),l(.141,.282),l(-.308,.299),l(-.41,.144),l(-1.032,.19),l(-.061,.452),l(.008,.58),l(-.395,.539),l(-.071,.212),l(.324,.521),l(.732,.745),l(.503,.647),
-N(493.044,204.258),l(-1.223,-1.771),l(-.027,-.932),l(-.03,-1.43),l(-.042,-2.045),l(-.003,-1.017),l(0,-.438),l(.016,-.848),l(.004,-1.215),l(.002,-.508),l(1.649,-2.467),l(.453,-.511),l(.305,-.101),l(1.216,-.078),l(.337,-.115),l(.294,-.426),l(.502,-.497),l(.388,-.214),l(.562,-.215),l(.626,-.088),l(1.693,.046),l(.8,-.004),l(.813,-.909),l(1.562,-1.69),l(4.087,-4.205),l(-.236,-.154),l(-1.875,.04),l(-1.447,-.472),l(-4.26,-1.443),l(-.54,-.209),l(-.634,-.321),l(-.596,-.547),l(-.732,-.801),l(-.587,-.844),l(-.428,-.732),l(-.083,-.409),l(.363,-.807),l(.34,-.567),l(.37,-.468),l(.114,-.26),l(.154,.044),l(.935,1.142),l(.586,.62),l(.243,.381),l(.265,.211),l(.372,-.071),l(.417,-.001),l(.465,.027),l(.372,-.071),l(.572,-.27),l(.836,-.425),l(.585,-.157),l(.397,.098),l(.76,.267),l(.549,-.072),l(.56,-.326),l(.779,-.566),l(.247,-.127),l(.447,.041),l(.479,.098),l(.419,-.043),l(1.195,-.482),l(.288,.027),l(.682,.196),l(.74,-.03),l(.764,-.185),l(.964,-.327),l(.9,-.666),l(.47,-.382),l(.604,.154),l(.391,.211),l(.08,.014),l(.147,.268),l(-.414,.919),l(.021,.564),l(.132,.621),l(-.165,.452),l(-.375,.509),l(-.028,.678),l(-.047,.833),l(-.163,.509),l(-1.264,2.262),l(-.842,.792),l(-.122,.311),l(.102,.353),l(-.893,1.569),l(-.834,1.272),l(-.214,.947),l(-.351,.636),l(-.712,1.117),l(-.874,1.188),l(-1.159,1.498),l(-.384,.439),l(-2.274,2.504),l(-1.82,1.557),l(-2.164,1.121),l(-.593,.382),l(-1.28,1.09),l(-1.74,1.755),l(-.06,.061),l(-1.055,1.1),l(-1.235,1.569),l(-.615,.835),l(.1,.353),l(-.094,.276),
-N(264.768,176.039),l(-.128,.225),l(-.115,.067),l(-.029,.135),l(.039,.25),l(-.058,.086),l(.125,.376),l(-.039,.424),l(-.453,.154),l(-.135,-.01),l(-.144,.039),l(-.482,-.039),l(-.192,.039),l(-.087,-.048),l(-.356,0),l(-.02,-.058),l(.039,-.067),l(.202,-.029),l(.222,-.135),l(.019,-.087),l(.106,.02),l(.154,.01),l(.135,-.145),l(-.096,-.279),l(.048,-.125),l(.029,-.183),l(-.067,-.125),l(-.097,-.135),l(-.279,-.048),l(.116,-.096),l(.164,-.019),l(.231,-.029),l(.115,-.087),l(.385,.02),l(.106,-.039),l(.299,-.067),l(.244,.006),
-N(654.075,190.187),l(.206,-.125),l(.63,-.114),l(.656,-.938),l(.241,-.07),l(-.069,.268),l(.122,.087),l(.187,-.046),l(.11,.174),l(.148,.444),l(-.024,.111),l(-.013,.247),l(.197,.197),l(.025,.086),l(-1.234,.42),l(-.383,.271),l(-.309,-.271),l(-.111,-.259),l(-.234,.012),l(-.062,-.37),l(-.084,-.126),
-N(493.044,204.258),l(-.602,.389),l(-.557,.171),l(-.385,-.112),l(-.086,.777),l(-.282,.367),l(-.67,.115),l(-.394,.382),l(-.088,.48),l(.006,.353),l(-.356,.622),l(-.964,1.358),l(.092,.536),l(-.337,.65),l(-.25,.255),l(-.334,.1),l(-.084,.152),l(-1.067,-.807),l(-2.427,-1.752),l(-.07,-.239),l(.116,-.552),l(-.137,-.381),l(-3.553,-1.984),l(-4.663,-2.568),l(-1.448,.033),l(1.144,-2.479),l(.105,-.229),l(.656,-.835),l(.985,-.938),l(.477,-.525),l(.43,-.695),l(.143,-.566),l(-.048,-.664),l(-.223,-.606),l(-.224,-.352),l(-.732,-1.069),l(-.174,-.465),l(-.027,-.861),l(-.126,-.226),l(-.477,-.463),l(-.3,-.493),l(.678,-.795),l(.291,-.327),l(.671,.052),l(.832,-.005),l(1.009,-.133),l(.464,-.017),l(.079,.028),l(.319,.069),l(1.054,.149),l(.749,.193),l(.604,.293),l(2.353,1.525),l(.335,.041),l(1.373,.133),l(.67,.193),l(.847,.094),l(.16,-.114),l(.71,-.753),l(.258,-.199),l(.675,-.343),l(.852,-.358),l(.271,.098),l(.46,.336),l(.461,.181),l(1.103,.106),l(-1.649,2.467),l(-.002,.508),l(-.004,1.215),l(-.016,.848),l(0,.438),l(.003,1.017),l(.042,2.045),l(.03,1.43),l(.027,.932),l(1.223,1.771),
-N(466.196,203.275),l(.188,-.298),l(.076,-.27),l(-.057,-.748),l(.025,-.734),l(-.021,-.593),l(.107,-.507),l(.217,-1.02),l(.395,-.681),l(.255,-.284),l(1.241,-.996),l(1.195,-1.066),l(.191,-.453),l(-.111,-.31),l(-.271,-.182),l(-.479,-.04),l(-.191,-.027),l(-.128,-.253),l(.26,-1.88),l(.018,-.424),l(-.159,-.183),l(-.063,-.028),l(.496,-.229),l(.464,-.087),l(.495,.011),l(.942,.234),l(.911,-.048),l(.881,-.33),l(.88,-.132),l(.303,.097),l(.303,.196),l(.367,-.016),l(.626,-.314),l(.563,-.54),l(.3,.493),l(.477,.463),l(.126,.226),l(.027,.861),l(.174,.465),l(.732,1.069),l(.224,.352),l(.223,.606),l(.048,.664),l(-.143,.566),l(-.43,.695),l(-.477,.525),l(-.985,.938),l(-.656,.835),l(-.105,.229),l(-1.144,2.479),l(-4.659,0),l(-1.277,.05),l(-.319,.017),l(-.554,.398),l(-.458,.427),l(-.431,.045),l(-.546,-.223),l(-.064,-.042),
-N(713.621,206.298),l(.169,7.966),l(-.44,.822),l(.431,1.368),l(.046,.805),l(-.031,3.438),l(-.515,-.512),l(-.927,-.888),l(-.716,-.902),l(-.406,-.056),l(-.776,.101),l(-.739,.143),l(-.434,-.013),l(.091,-.382),l(.435,-.65),l(.006,-.283),l(-.561,-.521),l(-.565,-.775),l(.028,-.226),l(.442,.111),l(.236,-.042),l(.135,-.113),l(-.467,-.409),l(-.595,-.408),l(-.287,-.381),l(-.275,-.648),l(-1.053,-1.693),l(-.508,-.394),l(-.467,-.282),l(-.604,-.196),l(-1.983,-.603),l(-1.26,-.379),l(-.613,-.069),l(-.705,-.238),l(-.63,-.323),l(.072,-.34),l(-.098,-.268),l(-.193,-.028),l(-.617,.101),l(-.389,-.07),l(-.412,-.196),l(-.408,-.395),l(-.209,-.579),l(.133,-.494),l(-.155,-.226),l(-.187,.113),l(-.234,.396),l(-.122,.664),l(-.251,.608),l(-.334,.269),l(-.696,.354),l(-.155,-.169),l(-.331,-.677),l(.022,-.155),l(.384,-.27),l(-.152,-.424),l(-.173,-.239),l(-.564,-.395),l(-.707,-.394),l(-.338,-.056),l(-.059,-.212),l(.038,-.226),l(.413,-.044),l(.388,.084),l(.603,.239),l(.158,-.029),l(.368,-.34),l(.525,-.41),l(.146,.056),l(.3,.269),l(1.021,-.045),l(.139,-.128),l(.09,-.522),l(-.063,-.409),l(-.238,.028),l(-.345,.199),l(-.604,.071),l(-.656,-.041),l(-.766,.044),l(-1.026,-.082),l(-.411,-.31),l(-.135,-.197),l(-.148,-.664),l(-.202,-.338),l(-.42,-.155),l(-1.249,-.124),l(.265,-.297),l(.058,-.255),l(.004,-.593),l(.463,-.029),l(.92,-.411),l(.49,-.383),l(.444,-.283),l(.352,.027),l(.4,.069),l(1.494,.646),l(.515,.169),l(.913,.153),l(.382,.705),l(.138,.396),l(-.283,.749),l(-.067,.381),l(.221,.381),l(.115,.494),l(.115,.48),l(.215,.521),l(.186,.197),l(.197,.127),l(.226,-.65),l(.085,.113),l(.087,.141),l(.309,1.073),l(.169,.169),l(.234,.183),l(.294,.112),l(.354,.056),l(.58,-.198),l(.504,-.439),l(1.192,-1.853),l(.352,-.015),l(1.078,-.215),l(.378,-.142),l(.045,-.085),l(.014,-.509),l(.219,-.17),l(1.1,-.609),l(.335,-.043),l(1.732,.759),l(2.129,.941),l(1.54,.52),l(1.299,.404),M(691.208,208.707),l(-.388,-.069),l(-.693,-.38),l(-.852,-.647),l(-.295,-.141),l(-.414,.028),l(-.059,.1),l(.024,.452),l(-.206,.028),l(-1.014,-.407),l(-.258,-.353),l(-.582,.199),l(-.289,.269),l(-.326,.185),l(-.186,-.184),l(-.312,-.451),l(-.245,-.451),l(.246,-.198),l(.303,-.029),l(.274,.056),l(1.104,.04),l(.574,.31),l(.319,-.015),l(.544,-.326),l(.414,-.015),l(.534,.126),l(.857,.21),l(.499,.395),l(.293,.395),l(.179,.621),l(-.049,.254),M(682.045,208.699),l(-.419,-.056),l(-.715,-.493),l(-.232,-.451),l(.146,-.283),l(.603,-.1),l(.766,-.044),l(.246,.126),l(.256,.311),l(.313,.197),l(.108,.226),l(-.067,.226),l(-.125,.057),l(-.879,.285),M(707.635,219.095),l(-1.11,-.209),l(.589,-1.032),l(.56,-.708),l(.407,-.269),l(.427,-.072),l(.527,.338),l(.198,.24),l(-.11,.184),l(-.324,.637),l(-.256,.17),l(-.638,.693),l(-.27,.028),M(673.797,218.703),l(-.562,.257),l(.034,.233),l(-.886,.326),l(-.582,.274),l(-.339,-.041),l(-.453,.325),l(-.504,-.069),l(-.427,-.112),l(-.378,.255),l(-.3,.058),l(-.358,-.07),l(-.58,-.196),l(-1.046,-.04),l(-.316,.043),l(-.211,-.564),l(.027,-.24),l(.383,-.198),l(.672,-.199),l(.528,-.016),l(1.142,.407),l(.445,.324),l(.338,.013),l(.326,-.297),l(.464,-.016),l(.429,-.071),l(.414,.187),l(.467,-.116),l(-.072,-.222),l(.421,-.187),l(.404,-.233),l(.094,-.151),l(-.076,-.117),l(-.184,.023),l(.116,-.198),l(.16,.012),l(.22,.094),l(.177,.221),l(.013,.304),M(662.661,219.065),l(-.312,-.099),l(-.203,-.127),l(-.062,-.169),l(.03,-.212),l(.256,-.198),l(.315,-.036),l(.17,.092),l(.053,.212),l(.182,.098),l(.305,-.145),l(.34,.105),l(.104,.151),l(-.012,.451),l(.183,-.148),l(.163,-.304),l(.318,-.029),l(.229,.226),l(.021,.424),l(.181,-.036),l(.062,.104),l(-.025,.397),l(-.316,-.211),l(-.311,-.058),l(-.141,.058),l(.072,.155),l(-.852,.157),l(-.143,-.091),l(.097,-.268),l(-.085,-.059),l(-.308,.269),l(-.229,.256),l(-.296,-.046),l(-.63,.225),l(-.624,.199),l(-.357,-.051),l(-.31,.123),l(-.392,-.07),l(-.103,-.07),l(-.202,-.123),l(-.063,-.279),l(.143,-.261),l(-.08,-.253),l(.193,-.115),l(.23,-.113),l(.233,-.156),l(.224,.07),l(.61,.013),l(.4,.104),l(.089,.28),l(.291,.109),l(.294,.056),l(.189,-.259),l(.29,-.012),l(.051,-.187),l(-.263,-.15),M(656.294,219.602),l(-.393,-.282),l(-.855,-.449),l(-.118,-.269),l(.417,-.001),l(.514,-.185),l(.462,-.029),l(.925,.521),l(-.338,.17),l(-.232,.1),l(-.381,.425),M(631.053,200.125),l(-.061,.225),l(-.413,.439),l(-.204,.41),l(-.381,.354),l(.164,.353),l(.162,.169),l(.806,.493),l(.832,.055),l(.241,.112),l(.151,.381),l(.128,.763),l(-.007,.409),l(.267,.423),l(.212,.127),l(.544,.041),l(-.45,.933),l(.151,.212),l(.703,-.453),l(.824,.252),l(.177,.042),l(.265,.254),l(.144,.438),l(.698,.676),l(-.515,1.979),l(-.04,.452),l(.23,.946),l(-.021,.438),l(.021,.664),l(-.002,.268),l(-.149,1.06),l(-.087,.156),l(-.107,.07),l(-.367,-.253),l(-.381,-.522),l(-.261,-.084),l(-.262,.481),l(-.081,.268),l(-1.043,-.619),l(-.219,.086),l(.394,.747),l(-.163,.213),l(-.204,-.197),l(-1.343,-1.424),l(-.775,-.761),l(-1.011,-.859),l(-1.348,-.958),l(-.391,-.451),l(-.199,-.493),l(-.191,-.339),l(-1.003,-.633),l(-.697,-.677),l(-1.186,-1.509),l(-.074,-.353),l(.039,-.339),l(-.324,-.875),l(-.841,-1.467),l(-.667,-1.044),l(-.612,-.775),l(-.369,-.301),l(-.287,-.234),l(-.64,-.295),l(-.254,-.748),l(-.688,-1.806),l(.067,-.24),l(-.107,-.311),l(-.157,-.197),l(-.662,-.507),l(-.711,-.394),l(-.539,-.21),l(-.317,-.099),l(-.119,-.353),l(-.077,-.734),l(-.18,-.409),l(-.386,-.479),l(-.818,-.831),l(-.368,-.423),l(-.725,.128),l(-.613,-.676),l(-.646,-.606),l(-.593,-.69),l(-.562,-.945),l(-.229,-.635),l(-.032,-.367),l(.057,-.198),l(.149,-.113),l(.401,-.043),l(.364,.098),l(.25,.126),l(.632,.563),l(.361,.155),l(.922,.153),l(.335,.027),l(.548,-.1),l(.454,-.142),l(.4,-.015),l(.323,.31),l(.919,1.156),l(.513,.31),l(.058,.155),l(-.12,.537),l(1.066,.916),l(.749,.493),l(1.175,.689),l(.678,.323),l(.139,.169),l(.03,.593),l(-.02,.155),l(.573,.055),l(.745,.944),l(.612,.55),l(.271,-.015),l(.004,-.198),l(-.123,-.226),l(.069,-.24),l(.507,.21),l(.479,.804),l(.441,.38),l(.446,.056),l(.429,.197),l(.314,.366),l(.28,.734),l(.316,.437),l(.431,.268),l(.511,.126),l(.767,.083),l(.431,.154),l(.494,.38),l(.576,.606),l(-.019,.071),M(684.201,200.125),l(-.007,-.172),l(-.414,-1.058),l(.18,-.551),l(-.078,-.141),l(-.141,-.296),l(.036,-.325),l(.286,-.89),l(.514,-.82),l(.263,.367),l(.152,.353),l(-.054,.283),l(-.246,.396),l(-.361,.763),l(.061,.325),l(.19,.141),l(.097,-.141),l(.436,-.411),l(.135,-.522),l(.179,-.142),l(.806,-.412),l(.141,.141),l(-.052,.254),l(.104,.55),l(-.354,.212),l(-.467,.354),l(-.162,.311),l(.159,.099),l(.446,.126),l(.398,.211),l(-.016,.141),l(.159,.353),l(-.688,-.154),l(-.431,-.154),l(-.367,-.042),l(-.304,.156),l(-.08,.438),l(.049,.258),l(.131,.688),l(.341,.62),l(.405,.438),l(.196,.282),l(-.156,.212),l(-.26,-.211),l(-.664,-.648),l(-.55,-.733),l(-.002,-.396),l(-.011,-.251),M(637.361,207.144),l(-.863,-.394),l(-.377,-.239),l(-.205,-.367),l(-.045,-.367),l(-.156,-.395),l(-.507,-.395),l(-.291,-.099),l(-.446,.029),l(-.116,-.141),l(.271,-.65),l(.234,-.24),l(.509,.55),l(.148,-.467),l(.313,-.269),l(.072,.395),l(.312,.89),l(.648,.817),l(.698,.31),l(-.265,.184),l(-.118,.283),l(.183,.564),M(634.321,215.345),l(-.091,-.187),l(.316,-.023),l(.402,.093),l(.369,-.129),l(.068,-.524),l(.018,-.14),l(.309,.057),l(-.043,-.5),l(.222,-.235),l(.093,-.277),l(.202,.121),l(.631,.112),l(.474,-.047),l(.237,.443),l(.524,-.089),l(.158,-.297),l(.022,-.244),l(.259,.116),l(.618,.168),l(.411,.438),l(.338,-.046),l(.204,.271),l(.446,-.029),l(.453,-.185),l(.302,.211),l(.369,.522),l(.179,.521),l(.884,.041),l(.462,.188),l(.49,-.077),l(1.435,.124),l(.479,-.029),l(.34,-.17),l(.213,-.65),l(.271,-.269),l(.447,-.015),l(.223,.211),l(.289,.494),l(.633,.125),l(.53,.027),l(.774,.083),l(.796,.153),l(.289,.24),l(.293,.288),l(-.08,.445),l(.275,.466),l(.119,.099),l(.877,.352),l(.422,.069),l(.658,.013),l(.45,-.185),l(.415,-.015),l(.628,.238),l(.048,.197),l(-.255,.425),l(-.152,.494),l(.578,.776),l(-.499,-.211),l(-.802,-.196),l(-.599,-.253),l(-.891,-.309),l(-.528,.001),l(-.589,.256),l(-.348,.057),l(-.714,-.098),l(-1.454,-.138),l(-1.47,-.138),l(-.805,-.253),l(-.839,-.479),l(-1.099,-.336),l(-1.125,-.267),l(-.948,-.04),l(-.556,.298),l(-.445,.043),l(-.957,-.153),l(-.805,-.492),l(-.357,-.07),l(-1.606,-.066),l(-.363,-.155),l(.055,-.141),l(.448,-.468),l(-.402,-.267),l(-.551,-.099),l(-.506,-.14),l(-.307,-.027),l(-1.261,-.121),M(675.004,223.092),l(.249,-.494),l(.023,-.537),l(.113,-.312),l(.674,-.481),l(1.447,-.624),l(.662,-.454),l(.36,-.607),l(.466,-.157),l(1.578,-.102),l(.91,-.214),l(.541,-.044),l(.869,-.143),l(.118,.07),l(.099,.197),l(-.237,.212),l(-.36,.256),l(-1.609,.61),l(-1.369,.44),l(-.713,.256),l(-.606,.354),l(-1.09,.963),l(-.653,.481),l(-.439,.086),l(-.552,.228),l(-.48,.015),M(667.866,223.149),l(-.217,-.069),l(-.917,-.605),l(-.8,-.45),l(-.347,-.099),l(-.493,-.126),l(-.292,-.197),l(.108,-.212),l(.371,-.142),l(.992,-.03),l(.502,-.114),l(.35,.296),l(1.147,.746),l(.265,.381),l(-.125,.325),l(-.246,.24),l(-.299,.057),M(661.819,191.241),l(-.041,.09),l(.319,.691),l(-.23,.142),l(-.546,.043),l(-.579,.086),l(.198,.226),l(.115,.296),l(-.169,.226),l(.216,.211),l(.235,.112),l(.546,.832),l(.536,.747),l(.043,.198),l(-.338,.721),l(.075,.226),l(.406,.465),l(.743,.45),l(.6,.493),l(.551,.761),l(-.465,.17),l(-.75,-.026),l(-.797,-.238),l(-.337,.1),l(-.387,.467),l(-.354,.918),l(-.08,.476),l(-.046,.272),l(.132,.649),l(.116,.424),l(-.133,.848),l(-.256,0),l(-.466,-.154),l(-1.037,.963),l(-.433,.65),l(-.751,.608),l(.443,.381),l(.06,.396),l(.17,.296),l(-.685,.058),l(.452,.578),l(.009,.212),l(-.103,.227),l(-.547,.665),l(-.206,.396),l(-.127,.354),l(-.529,.594),l(-1.294,.61),l(-.607,.284),l(-.292,.198),l(-.194,-.311),l(.024,-.424),l(-.33,-.804),l(-.306,-.381),l(-.265,-.184),l(-.286,.029),l(-.503,.523),l(-.302,.029),l(-.328,-.508),l(-.313,-.197),l(-.437,-.112),l(-.387,-.451),l(-.342,-.154),l(-.35,.806),l(-.135,.198),l(-.381,.058),l(-.356,-.112),l(-.442,.128),l(-.318,.354),l(-.364,.071),l(-.059,-.551),l(.034,-.311),l(-.314,-1.03),l(-.336,.396),l(-1.42,.44),l(-.321,-.408),l(-.639,.015),l(-.281,.156),l(-.303,.029),l(-.058,-.649),l(-.022,-.65),l(-.267,-1.411),l(-.012,-.48),l(-.352,-.747),l(-.406,-.409),l(-.79,-.422),l(-.146,-.141),l(.555,-.354),l(-.531,-.38),l(-.258,-.296),l(.188,-.735),l(-.074,-.128),l(-.278,-.478),l(-.352,-.296),l(.065,-.466),l(-.125,-.593),l(.182,-.65),l(.133,-.353),l(.424,-.58),l(.303,-.806),l(.318,.028),l(.204,.11),l(.288,.792),l(.253,.295),l(1,.983),l(.304,.083),l(.446,.28),l(.928,-.416),l(.255,-.001),l(.526,.223),l(.543,.11),l(.399,-.172),l(.528,-.342),l(.403,-.525),l(.531,-.441),l(.479,-.074),l(.431,.11),l(.557,.251),l(.524,.223),l(.559,.152),l(.287,-.03),l(.467,-.356),l(.465,-.172),l(.864,-.175),l(.387,-.299),l(.928,-1.785),l(-.076,-.748),l(.218,-.34),l(.646,-.244),l(.22,-.383),l(-.106,-.988),l(.119,-.565),l(.381,-.638),l(.247,-.157),l(.464,-.017),l(.748,.081),l(.651,.081),l(.624,-.018),l(.446,.04),l(.753,.292),l(.182,.09),M(666.561,200.125),l(.012,-.049),l(.48,-1.188),l(.434,-.41),l(.289,-.142),l(.429,.338),l(.29,-.311),l(.162,-.325),l(.293,-.481),l(.496,-.058),l(.605,.14),l(.729,.535),l(.447,.027),l(.863,-.044),l(.478,.168),l(.749,.267),l(.577,-.227),l(1.853,.081),l(.72,-.128),l(.627,-.354),l(.211,-.283),l(-.156,-.268),l(.196,-.283),l(.388,-.241),l(.295,-.41),l(.289,-.057),l(.075,.24),l(-.073,.537),l(-.117,.311),l(-.081,.127),l(-.082,.127),l(-.969,1.259),l(-.416,.396),l(-.464,.1),l(-1.23,.229),l(-.495,-.069),l(-.591,-.422),l(-1.149,-.068),l(-1.151,.059),l(-.878,-.041),l(-1.039,.045),l(-.575,-.083),l(-.671,.029),l(-.415,.1),l(-.433,.368),l(-.259,.461),l(-.154,.274),l(-.187,.721),l(.068,.48),l(.263,.494),l(.194,.183),l(.403,.226),l(.259,.196),l(.221,.607),l(.179,.154),l(.226,.042),l(.815,.026),l(.249,-.269),l(.652,-.976),l(.385,.056),l(.307,.183),l(.496,.041),l(.363,-.227),l(.669,-.156),l(.62,-.143),l(.268,-.298),l(.271,-.057),l(.466,.196),l(.131,.212),l(-.083,.734),l(-.469,-.267),l(-.544,-.042),l(-.361,.298),l(-.389,.523),l(-.438,.425),l(-1.059,.439),l(-.214,.325),l(-.143,.029),l(-.241,-.042),l(-.468,-.126),l(-.03,.056),l(.025,.312),l(.212,.126),l(.676,.578),l(.467,.521),l(.854,1.24),l(-.097,.325),l(-.156,.679),l(.102,.409),l(.447,.535),l(.555,.438),l(.062,.226),l(-.045,.282),l(-.436,-.056),l(-.652,.059),l(-.412,.297),l(-.224,.692),l(-.498,-.026),l(-.461,-.183),l(-.107,-.17),l(.052,-.649),l(.204,-.58),l(-.978,-.845),l(-.417,-.31),l(-.174,-.269),l(.036,-.24),l(.284,-.396),l(.116,-.579),l(-.165,-.494),l(-.737,-.055),l(-.503,.213),l(-.494,.396),l(.16,.353),l(.143,.932),l(-.068,.509),l(-.236,1.145),l(.363,.903),l(-.01,.311),l(-.377,.636),l(-.019,.227),l(.275,.564),l(-.726,.171),l(-.513,.241),l(-.476,.071),l(-.245,-.324),l(-.16,-.522),l(.156,-.325),l(.181,-.466),l(.069,-.876),l(.06,-1.073),l(-.125,-.509),l(.029,-.339),l(-.213,-.395),l(-.311,-.127),l(-.391,.171),l(-.574,.029),l(.011,-.41),l(-.25,-1.284),l(.131,-.311),l(.491,-.524),l(.469,-.777),l(.161,-.48),l(-.089,-.918),l(-.006,-.254),l(.087,-.452),l(.339,-.721),l(.447,-.058),l(-.043,-.861),l(.254,-1.053),
-N(341.05,41.069),l(2.084,.272),l(.344,.361),l(-.869,.174),l(-.541,.139),l(-1.678,.106),l(-1.159,.037),l(-.689,.156),l(-.372,.224),l(-.308,.6),l(-.361,.376),l(1.05,.39),l(.971,.168),l(2.117,.064),l(.601,-.001),l(1.775,-.242),l(1.93,-.038),l(.866,.135),l(.933,.219),l(.417,.135),l(.284,-.018),l(1.001,-.002),l(1.277,.032),l(.615,.05),l(-1.277,.626),l(-1.583,.457),l(-1.976,.523),l(-.556,-.016),l(-.695,-.116),l(-.951,.671),l(-1.061,.503),l(-1.246,.452),l(-1.125,.296),l(-.211,.056),l(-2.212,.054),l(-.525,.134),l(-.502,.001),l(-.982,.201),l(-.665,.167),l(-.528,.051),l(-.946,-.413),l(-.375,.05),l(-.69,.913),l(-.958,.118),l(-.631,-.065),l(-.743,-.197),l(-.622,-.463),l(-.854,-.43),l(-.647,-.215),l(-.109,0),l(.008,.2),l(.707,1.043),l(-.192,.249),l(-.319,.017),l(-.69,.249),l(-.84,.249),l(-.573,.38),l(-1,.906),l(-.657,.657),l(-1.051,.851),l(-.776,.262),l(-1.034,.083),l(-1.023,-.275),l(-.148,.554),l(-.438,.569),l(-.783,.277),l(-.992,-.095),l(-.616,.05),l(-1.18,.439),l(.942,-1.723),l(-.121,.017),l(-.795,-.015),l(-1.055,-.177),l(.26,.423),l(-.026,.455),l(-.386,.407),l(-.794,.39),l(-1.16,.164),l(-.973,.002),l(-1.255,.083),l(.467,.403),l(.212,.403),l(-.09,.387),l(-.379,.097),l(-.321,-.063),l(-.47,.033),l(-1.792,-.157),l(.517,.32),l(.765,.462),l(.295,.351),l(-.01,.224),l(-.26,.176),l(-1.197,.034),l(-1.051,.129),l(.844,.413),l(.47,.126),l(.448,.222),l(.389,.333),l(-.554,.461),l(-.285,.111),l(-.599,-.094),l(-.478,.096),l(.345,.474),l(-.009,.127),L(308.501,60),l(-.486,-.125),l(-.583,-.062),l(.026,.158),l(.255,.457),l(-.101,.347),l(-.288,0),l(-.656,-.093),l(-.089,-.016),l(-.979,.112),l(-1.081,.018),l(.682,.487),l(1.108,.391),l(.331,.204),l(-.077,1.035),l(-.382,.938),l(-.427,.094),l(-.815,-.061),l(.489,.591),l(-.016,.498),l(.156,.233),l(-.068,.373),l(-.316,.062),l(-.495,-.03),l(-.771,.079),l(.762,.386),l(.427,.603),l(-.117,.447),l(-.287,.031),l(-.967,-.26),l(-1.052,-.508),l(-.498,.294),l(-.425,.602),l(-.635,-.599),l(.158,-.573),l(-.387,-.201),l(-1.124,-.184),l(-.577,-.309),l(.04,-.187),l(.253,-.249),l(.066,-.218),l(-.325,-.28),l(-.366,-.186),l(-.668,.359),l(-.276,.016),l(-.3,.141),l(-.444,-.046),l(-.98,.064),l(-.417,.017),l(-.571,.296),l(-.476,.28),l(-.426,-.403),l(-.104,-.357),l(-.222,-.217),l(-.513,-.233),l(-.817,-.232),l(-.772,-.389),l(-.517,-.781),l(.07,-.737),l(-.199,-.156),l(-.434,-.094),l(-.467,.048),l(-.97,-.266),l(-.108,-.094),l(-.138,-.236),l(.14,-.457),l(.459,-.395),l(.071,-.269),l(-.258,-.062),l(-.551,-.031),l(-.542,-.094),l(-.278,-.221),l(-.058,-.633),l(-.458,-.126),l(-.616,.049),l(-.589,-.57),l(.023,-.191),l(.198,-.254),l(.618,-.367),l(1.22,-.337),l(.405,-.304),l(.476,-.128),l(.051,-.383),l(-.277,-.287),l(-.473,.097),l(-.921,.082),l(-.493,.097),l(-.635,.416),l(-.538,.129),l(-.63,.304),l(-.339,-.318),l(.038,-.623),l(-.114,-.784),l(-.206,-.451),l(.015,-.355),l(-.243,-.323),l(-.504,.082),l(-.271,-.032),l(-.666,-.355),l(-.594,-.485),l(-.013,-.357),l(.842,-.538),l(.265,.019),l(-.556,-.189),l(-1.083,.064),l(-.103,-.284),l(.383,-.176),l(.677,-.03),l(.586,-.052),l(.456,-.087),l(.322,-.672),l(-1.208,-.047),l(-.572,.05),l(-.362,-.032),l(-.29,-.163),l(-.116,-.197),l(.223,-.28),l(.218,-.008),l(.18,-.16),l(.427,-.055),l(-.375,-.188),l(-.552,.073),l(-.22,-.248),l(.057,-.188),l(.073,-.132),l(.259,0),l(.309,-.099),l(.827,-.25),l(1.218,.081),l(.854,.163),l(.776,.032),l(.378,.131),l(.927,.146),l(1.027,.097),l(-.031,-.363),l(.299,-.545),l(-.298,-.182),l(-1.02,-.263),l(-1.356,-.312),l(-.903,-.164),l(-1.592,-.33),l(-.354,-.116),l(.336,-.35),l(.788,-.001),l(1.462,.363),l(1.034,.048),l(.463,-.067),l(.114,-.067),l(.088,-.6),l(.088,-.301),l(.595,-.034),l(.528,.116),l(.227,-.101),l(-.027,-.351),l(-.195,-.184),l(-.891,-.317),l(.162,-.437),l(.528,-.455),l(-.258,-.286),l(-1.21,-.167),l(-1.154,.002),l(-1.178,-.286),l(-1.649,-.49),l(-.78,-.101),l(-.903,-.05),l(-.76,-.34),l(-.811,-.477),l(.156,-.035),l(.323,-.155),l(.605,-.001),l(.572,-.019),l(2.085,.305),l(.716,.033),l(1.249,.306),l(1.451,.458),l(.729,.169),l(.056,-.307),l(-.311,-.426),l(-.86,-.546),l(-.172,-.446),l(-.603,-.446),l(-.485,-.051),l(-.677,-.24),l(.361,-.277),l(.542,-.139),L(285.644,41),l(-.704,-.241),l(-1.101,-.015),l(-.625,-.086),l(-1.132,-.327),l(-.88,.608),l(-.324,.156),l(-.274,.294),l(-.875,.243),l(-1.402,-.066),l(-1.031,-.343),l(-.306,-.242),l(-.027,-.294),l(.438,-.313),l(.293,-.645),l(-.152,-1.259),l(.582,-.054),l(.691,.192),l(.372,-.124),l(.151,-.334),l(-.383,-.369),l(-.933,-.545),l(-.452,-.141),l(-.946,-.796),l(-.895,-.925),l(-1.105,-1.289),l(-.578,-.485),l(-1.855,-.379),l(-.667,-.255),l(-.291,-.202),l(-.052,-.701),l(-.904,-.406),l(-.962,-.109),l(-1.589,-.165),l(-1.928,-.425),l(-1.903,-.333),l(-2.133,-.183),l(-.997,-.054),l(-1.632,-.035),l(-.785,.189),l(-1.043,.096),l(-.806,.188),l(-1.419,.152),l(-1.228,-.166),l(-1.46,-.296),l(.319,.747),l(-.051,.093),l(-1.051,-.017),l(-1.294,-.184),l(-3.168,-.611),l(1.538,-.566),l(.463,-.114),l(-.092,-.226),l(-.423,-.169),l(-1.067,-.017),l(-2.21,-.015),l(-.812,-.074),l(-.629,-.018),l(-1.238,-.434),l(-.87,-.208),l(.587,-.306),l(1.257,-.041),l(3.036,.147),l(2.025,.034),l(1.343,.017),l(2.117,-.157),l(1.055,-.212),l(.292,-.096),l(.054,-.345),l(-.627,-.287),l(-.82,-.21),l(-1.217,.156),l(-1.11,.252),l(-1.31,.021),l(-1.138,-.113),l(-.753,.078),l(-.879,.098),l(-.68,-.056),l(-.857,-.19),l(-.664,-.365),l(-.816,-.191),l(-.662,-.057),l(-.726,.059),l(-.486,-.076),l(-1.416,-.481),l(-.044,-.35),l(.36,-.45),l(.81,-.119),l(1.235,-.1),l(1.517,-.14),l(2.074,-.161),l(1.29,-.081),l(.951,-.396),l(1.089,-.259),l(.843,-.081),l(2.478,-.005),l(1.101,-.101),l(1.942,.036),l(.402,-.139),l(.31,-.199),l(.609,-.16),l(.202,-.658),l(.276,-.501),l(.116,-.101),l(-.89,-.228),l(-1.947,-.039),l(-1.155,.194),l(-.959,-.125),l(-1.243,-.383),l(.595,-.781),l(1.38,-.332),l(2.845,-.359),l(1.407,-.225),l(1.962,-.249),l(2.112,-.162),l(1.163,.087),l(1.213,-.07),l(1.319,-.07),l(.345,-.181),l(.011,-.226),l(-.357,-.753),l(-.022,-.208),l(.522,-.14),l(1.886,-.05),l(1.526,.205),l(2.141,.41),l(1.296,.226),l(.802,.181),l(.823,-.275),l(-1.657,-.525),l(-.697,-.509),l(.167,-.047),l(2.2,-.122),l(1.166,-.12),l(1.854,-.216),l(2.52,-.195),l(.73,.069),l(1.064,.116),l(.232,1.738),l(.913,-.162),l(.539,-.322),l(.432,-1),l(1.003,.021),l(2.004,.323),l(1.858,.414),l(1.529,.25),l(.205,-.3),l(-.644,-.3),l(-.816,-.537),l(-.894,-.4),l(.295,-.287),l(.742,.022),l(1.758,.02),l(1.136,.212),l(2.754,.373),l(1.284,.279),l(2.109,.322),l(1.878,.274),l(1.872,.204),l(.8,-.209),l(.816,-1.483),l(-.326,-.191),l(-1.292,-.334),l(-1.176,-.533),l(.708,-.247),l(2.404,-.005),l(2.962,-.328),l(1.329,-.077),l(1.527,.17),l(2.221,.488),l(1.567,.167),l(2.005,.142),l(.3,-.761),l(-.3,-.472),l(2.646,-.206),l(2.021,-.08),l(2.589,.095),l(1.989,.146),l(1.886,-.18),l(2.367,-.207),l(2.043,-.005),l(1.859,.223),l(1.825,-.055),l(1.315,.072),l(.619,.099),l(.55,-.102),l(1.946,.146),l(1.707,.046),l(1.673,.096),l(2.438,.761),l(1.368,.241),l(1.345,-.076),l(1.118,.168),l(2.594,.237),l(.445,.408),l(-.304,.12),l(-.492,.192),l(-1.683,.146),l(-2.303,.124),l(-1.152,.121),l(-1.233,.05),l(-1.469,-.068),l(-2.831,-.064),l(-2.22,-.066),l(-1.389,.168),l(-1.614,.027),l(-1.933,.027),l(-1.16,.026),l(-1.485,.168),l(-.444,.118),l(-1.322,.213),l(-.335,.464),l(.743,.251),l(2.551,-.281),l(1.367,-.072),l(3.912,.038),l(2.223,-.12),l(2.331,-.005),l(.997,-.025),l(.93,.067),l(1.77,.434),l(.671,.09),l(1.087,-.186),l(1.663,-.21),l(1.536,-.281),l(1.964,-.144),l(.59,.462),l(-.566,.482),l(-2.316,.639),l(-.973,.338),l(-1.281,.734),l(.12,.307),l(.319,.152),l(.796,-.089),l(.477,-.044),l(1.616,-.553),l(1.766,-.537),l(1.413,-.385),l(1.706,-.32),l(.775,-.207),l(1.662,-.163),l(1.618,.111),l(1.391,.065),l(1.497,-.3),l(.703,-.324),l(1.129,-.234),l(2.148,-.004),l(1.672,.112),l(1.097,.044),l(1.197,.136),l(1.135,.228),l(1.107,.112),l(.316,.25),l(-.181,.273),l(-1.97,.252),l(-1.491,.138),l(-1.245,.494),l(-.557,.289),l(-1.604,.355),l(-1.57,.548),l(-1.063,.089),l(-.918,-.042),l(-1.592,.047),l(-2.213,-.039),l(-1.491,.198),l(-.731,.217),l(-.495,.535),l(.166,.322),l(1.949,-.305),l(1.581,-.046),l(1.856,.101),l(.003,.42),l(-.743,.241),l(-2.388,.124),l(-.463,.14),l(-.213,.199),l(-.156,.595),l(-.471,.71),l(-.678,.158),l(-1.06,-.077),l(-.742,.041),l(-.837,.9),l(-.987,1.087),l(-.15,.347),l(.454,.307),l(.403,.095),l(.602,-.481),l(.743,-.368),l(.856,-.041),l(2.345,.266),l(.353,.096),l(.262,.288),l(-.059,.211),l(-1.234,-.074),l(-.673,-.018),l(-.512,.097),l(-.136,.191),l(.29,.286),l(1.756,.188),l(.557,.132),l(1.802,-.137),l(.526,.208),l(.214,.323),l(-.049,.436),l(-.256,.133),l(-1.835,-.186),l(-1.653,-.054),l(-.781,-.074),l(-1.295,.078),l(-1.382,.475),l(-.823,-.13),l(-.49,-.15),l(-1.06,.04),l(-.283,.377),l(1.393,.599),l(1.187,.222),l(1.298,.128),l(1.665,.072),l(.696,.148),l(.551,.482),l(.272,.444),l(.014,.554),l(-.434,.405),l(-.384,.074),l(-1.292,-.181),l(-.82,-.109),l(-.372,.111),l(.023,.55),l(.118,.236),l(.426,.162),l(.618,.089),l(.723,.215),l(.914,.142),l(.752,.16),l(.383,.376),l(-.338,.233),l(-.832,.145),l(-.647,.126),l(-1.747,-.032),l(-1.176,-.087),l(-1.624,-.086),l(-.592,.448),l(.551,.195),l(1.396,.051),l(1.052,.158),l(.724,.248),l(.088,.319),l(-.035,.549),l(-.13,-.005),l(-1.092,-.045),l(-1.247,.108),l(-.596,.266),l(-1.246,.02),l(-1.225,-.139),l(-1.497,-.404),l(-.922,-.478),l(-.373,-.07),l(-1.094,.286),L(345,36.811),l(-1.084,.09),l(-.589,.178),l(-1.451,-.033),l(-.913,-.087),l(-.969,.143),l(-.395,.125),l(-.174,.283),l(.006,.141),l(.354,.527),l(.71,.245),l(1.284,.05),l(1.515,.26),l(1.567,-.056),l(1.323,.54),l(.758,.226),l(.482,.226),l(1.196,.329),l(1.252,.38),l(.376,.276),l(.483,.898),l(.892,-.208),l(.278,-.139),l(.397,.207),l(.298,.43),l(.071,.344),l(.198,1.164),l(-.169,.205),l(-.371,.12),l(-.541,-.101),l(-.546,-.119),l(-.917,.002),l(-1.041,.036),l(-1.488,-.27),l(-.637,-.409),l(-.415,-.634),l(-.354,-.274),l(-1.17,-.566),l(-.84,-.292),l(-.748,-.137),l(-1.095,-.084),l(-.521,.14),l(-.962,.105),M(351.365,40.026),l(-1.527,-.537),l(-.96,-.225),l(-.712,-.156),l(-.159,-.069),l(-.314,-.419),l(1.483,-.038),l(.893,.139),l(1.064,.26),l(.819,.296),l(.162,.488),l(-.215,.209),l(-.533,.053),M(281.574,46.135),l(-.568,-.133),l(-.707,-.318),l(-.801,-.183),l(-.197,-.101),l(-.25,-.218),l(-.08,-.844),l(.287,-.34),l(.368,-.018),l(.646,.135),l(1.157,.066),l(1.287,.27),l(.748,.269),l(.595,.1),l(.777,.217),l(.603,.335),l(-.144,.202),l(-.112,.034),l(-.543,.051),l(-.774,.035),l(-.77,.186),l(-1.009,.153),l(-.511,.102),
-N(105.98,81.688),l(-.952,-.826),l(-.198,-.342),l(-.024,-.476),l(.095,-.104),l(.408,.044),l(.312,-.045),l(.781,.177),l(.658,-.076),l(.28,.119),l(.138,.163),l(-.234,.224),l(-.173,.565),l(-.028,.312),l(-.581,.075),l(-.483,.19),M(125.24,92.375),l(-1.312,-.288),l(-1.345,-.434),l(-.218,-.174),l(.061,-.189),l(.376,-.466),l(-1.023,.002),l(-.413,.248),l(-.299,-.072),l(-.416,-.188),l(.166,-.452),l(-.487,-.334),l(-.269,-.014),l(-.735,-.086),l(-.226,-.262),l(.317,-.292),l(-.976,-.524),l(-.556,.118),l(-.386,-.102),l(-.852,-.511),l(-1.277,-.863),l(-.219,-.235),l(.02,-.117),l(.962,-.12),l(.337,.043),l(1.979,.598),l(.981,.204),l(1.772,.202),l(.385,.263),l(.618,.526),l(.426,.642),l(.433,.422),l(.362,.189),l(1.587,.536),l(.316,.203),l(.48,.756),l(.116,.407),l(-.279,.349),l(-.407,.016),M(271.379,92.089),l(-1.202,-.23),l(.641,-.743),l(.358,-.161),l(.279,.058),l(.292,0),l(.355,-.263),l(-.697,-.653),l(.079,-.219),L(272,89.003),l(1.121,-1.35),l(1.454,-1.31),l(.725,-.442),l(.496,-.192),l(1.315,-.194),l(.198,.073),l(.11,.221),l(-.299,.221),l(-.582,.03),l(-.242,.133),l(.349,.44),l(-.755,.78),l(-1.226,1.438),l(-.271,.526),l(.113,.291),l(.11,0),l(.428,-.176),l(.483,-.555),l(.458,-.191),l(1.115,.305),l(-.896,.687),l(.261,.203),l(.229,.072),l(1.423,.565),l(.758,-.03),l(.325,-.408),l(.309,-.059),l(.718,.057),l(.826,.202),l(.616,.231),l(-.297,.292),l(-.373,.233),l(-.708,.467),l(.339,.333),l(.477,.362),l(.26,.014),l(.417,-.161),l(.464,-.132),l(.278,.116),l(.02,.16),l(-.254,.262),l(-.404,.248),l(-.892,.104),L(280.84,93),l(.273,.362),l(.124,.405),l(.28,.231),l(.183,-.203),l(.309,-.262),l(.527,.159),l(-.099,.449),l(.149,.275),l(.716,.028),l(.085,-.015),l(.015,.203),l(-.168,.304),l(-.25,.652),l(-.34,.651),l(-.222,-.072),l(-.71,-.128),l(-.301,-.144),l(-.042,-.651),l(-.601,.406),l(-.374,.015),l(-.095,-.274),l(.497,-.652),l(.011,-.333),l(-.421,-.478),l(-.279,-.072),l(-.388,.392),l(-.423,.291),l(-.365,.146),l(-.435,.204),l(-.552,.536),l(-.496,.334),l(-.881,-.042),l(-.222,-.217),l(.165,-.145),l(1.229,-.408),l(.466,-.522),l(.632,-.363),l(-.699,-.129),l(-.601,-.057),l(-.322,.464),l(-.412,.015),l(-.13,-.159),l(.04,-.493),l(-.757,.016),l(-.148,.29),l(-.41,.218),l(-1.052,.045),l(-.709,-.057),l(-1.139,-.186),l(-1.012,-.085),l(-1.355,.061),l(-1.014,.147),l(-.145,-.188),l(-.215,-.463),l(.187,-.175),l(.561,-.334),l(.734,-.408),l(.502,-.161),l(.636,-.335),M(265.435,98.655),l(-.469,-.057),l(-.497,-.273),l(-.356,-.562),l(.062,-.635),l(.742,-.738),l(.932,-1.043),l(.816,.432),l(-.375,.435),l(-.112,.462),l(-.233,.333),l(-.262,.116),l(-.58,.319),l(-.244,.448),l(.522,.244),l(.168,-.029),l(.279,-.26),l(.42,-.362),l(.617,-.319),l(.309,.057),l(.495,.461),l(-.177,.347),l(-.246,.159),l(-1.134,.42),l(-.682,.044),M(211.34,59.677),l(-.68,-.046),l(.068,-.872),l(-.375,-.333),l(-.958,.161),l(-2.375,.29),l(.107,-.461),l(.56,-.303),l(1.644,-.561),l(-.302,-.478),l(-.102,-.415),l(.106,-.417),l(.398,-.835),l(.434,-.566),l(.254,-.648),l(.331,-.471),l(1.11,.566),l(-.312,.518),l(.791,.386),l(.527,.047),l(.402,-.469),l(.67,.112),l(.806,.289),l(.917,.514),l(.582,.255),l(2.168,.492),l(.442,.271),l(.176,.255),l(-.09,.925),l(.539,.047),l(.57,-.065),l(.934,.046),l(.701,.142),l(1.019,.427),l(-.419,.096),l(-.269,.127),l(-.46,.271),l(-.949,-.046),l(-.623,-.125),l(-1.328,-.125),l(-.438,-.126),L(217.259,58),l(-.528,-.301),l(-1.017,-.237),l(-.528,.017),l(-.203,.271),l(.174,.588),l(-.126,.096),l(-1.314,.161),l(-.673,.493),l(-.588,.302),l(-1.116,.287),M(200.125,19.1),l(-.862,-.015),l(-1.085,-.195),l(-.308,-.664),l(.819,-.304),l(.77,-.072),l(.666,-.024),l(3.475,-.125),l(1.263,-.12),l(1.374,-.026),l(1.714,.324),l(.397,-.094),l(.397,-.377),l(1.303,-.287),l(1.759,-.099),l(1.975,.209),l(.746,-.001),l(2.562,.137),l(2.621,.324),l(1.424,.09),l(1.461,.161),l(.448,-.165),l(-1.433,-.42),l(-1.67,-.352),l(-.816,-.429),l(.293,-.242),l(1.361,-.148),l(1.101,-.246),l(1.431,-.101),l(2.382,-.201),l(1.666,.119),l(1.944,.191),l(1.009,.265),l(1.19,.456),l(.354,.047),l(.273,-.362),l(-.959,-.508),l(-.828,-.292),l(.499,-.248),l(1.45,.121),l(1.832,.168),l(1.653,.07),l(1.639,.46),l(.378,.023),l(.062,-.195),l(-.301,-.539),l(1.781,-.004),l(1.408,.046),l(.832,.269),l(.831,.34),l(.618,-.001),l(-.044,-.268),l(-.331,-.467),l(1.075,-.077),l(3.691,.386),l(2.726,.288),l(1.937,-.077),l(2.987,.018),l(.967,.047),l(.757,.12),l(.126,0),l(1.419,.094),l(1.089,.191),l(.744,.095),l(1.685,.044),l(1.357,.357),l(-.385,.358),l(-1.237,.121),l(-1.206,.356),l(-1.849,.191),l(-.978,-.045),l(-2.191,-.159),l(-2.284,.005),l(-.776,.142),l(-1.915,.168),l(-.597,.465),l(.75,.366),l(.761,.044),l(1.03,-.048),l(1.705,-.279),l(.79,.021),l(.808,.434),l(-.168,.114),l(-1.246,.139),l(-1.38,.207),l(-1.174,.295),l(-2.098,.518),l(-1.316,.224),l(-1.19,.355),l(-.924,.286),l(-2.252,.005),l(.65,.906),l(-.449,.193),l(-2.297,.455),l(-.768,-.019),l(-1.587,-.037),l(-1.462,-.218),l(-2.386,-.164),l(-.66,.33),l(2.591,.695),l(-.662,.141),l(-.967,-.038),l(-1.297,.022),l(-1.068,.022),l(-2.58,-.214),l(-2.009,.063),l(-.134,.66),l(1.257,-.105),l(1.065,.018),l(2.312,.292),l(.557,.157),l(.12,.67),l(-.33,.197),l(-1.031,.12),l(-.515,.705),l(-1.073,.021),l(-.448,-.058),l(-.402,.176),l(.297,.253),l(.759,.25),l(-.328,.136),l(-1.615,.08),l(-.867,-.037),l(-1.71,-.171),l(-.422,.078),l(.41,.791),l(-.08,.231),l(-.649,.289),l(-.767,.155),l(-1.52,-.112),l(-2.039,-.111),l(-1.43,-.227),l(-1.008,.079),l(-1.219,.5),l(1.031,.112),l(.368,.057),l(2.154,.11),l(1.759,.13),l(1.534,.168),l(2.001,.034),l(.66,.34),l(.045,.359),l(-.907,.398),l(-2.685,.268),l(-.927,.115),l(-1.054,.227),l(-1.115,.077),l(-.467,-.28),l(-.797,-.638),l(-.56,.039),l(-.631,.001),l(-1.453,-.318),l(-.001,.17),l(.331,.508),l(-1.477,-.016),l(-1.5,-.129),l(-.875,-.319),l(-1.033,-.471),l(-.388,.058),l(.527,.717),l(-.24,.17),l(-.821,.133),l(-1.72,-.109),l(-2.276,-.033),l(-.972,-.073),l(-1.382,-.394),l(-.642,-.131),l(-.282,.453),l(-.619,.152),l(-1.843,-.316),l(.161,-.586),l(.219,-.228),l(1.525,-.117),l(.61,-.249),l(.961,-.173),l(1.179,.036),l(.499,-.172),l(-1.073,-.4),l(-1.043,-.651),l(.052,-.154),l(.479,-.117),l(1.316,.036),l(1.743,.093),l(.888,.21),l(1.108,.517),l(1.35,.323),l(1.085,.093),l(1.667,-.022),l(.829,-.136),l(.086,-.268),l(.514,-.304),l(-3.019,.001),l(-1.025,-.171),l(-.156,-.85),l(.211,-.154),l(-1.74,-.153),l(-1.963,-.152),l(-.274,0),l(-.631,.114),l(.204,-.758),l(1.159,-.551),l(1.104,-.16),l(1.837,-.003),l(1.164,.037),l(1.37,.076),l(2.023,.311),l(1.342,.115),l(.486,-.158),l(1.132,-.041),l(-3.399,-.802),l(-1.742,-.313),l(-3.555,-1.27),l(-.406,.242),l(-1.398,-.878),l(.025,-.258),l(.313,-.108),l(1.747,.104),l(1.905,-.004),l(2.019,.06),l(1.6,.382),l(2.535,.784),l(1.448,-.043),l(.833,.095),l(-1.387,-.555),l(-2.015,-.317),l(1.208,-.743),l(1.456,-.329),l(1.731,-.025),l(1.529,-.222),l(2.042,-.07),l(1.157,-.112),l(1.414,-.051),l(-1.778,-.479),l(-1.425,-.153),l(-2.501,.027),l(-1.243,.248),l(-1.305,.158),l(-1.425,.202),l(-1.447,.047),l(-.586,.067),l(-1.532,-.438),l(-.214,.111),l(-.543,.156),l(-2.16,-.018),l(-1.58,.365),l(.311,-.828),l(.98,-.292),l(.007,-.202),l(-.606,-.247),l(-1.375,-.156),l(-1.39,.003),l(-4.189,.505),l(-2.031,.672),l(-.408,-.11),l(-.569,-.251),l(.395,-.133),l(.678,-.023),l(-.117,-.316),l(-.698,-.398),l(-1.216,-.056),l(-.216,-.003),M(200.125,20.844),l(.899,-.096),l(.832,.196),l(.339,.5),l(.511,.495),l(.427,.063),l(1.141,.041),l(-.081,-.236),l(.056,-.411),l(.438,-.109),l(.718,.194),l(.718,.322),l(.374,.3),l(-.066,.171),l(.056,.826),l(.764,.442),l(.953,-.017),l(1.276,-.074),l(1.646,.504),l(-1.123,-.264),l(-1.528,.34),l(-1.599,.221),l(-.83,.377),l(-.287,.197),l(-.265,.315),l(-.448,.021),l(-1.493,-.41),l(-.656,.335),l(.465,.43),l(-.029,.235),l(-.412,.196),l(-.392,.04),l(-1.086,-.31),l(-.944,-.311),l(-.26,.645),l(-.117,.068),l(-.083,.049),l(-.888,.041),l(-1.74,-.094),l(-1.458,-.153),l(-.888,-.154),l(-.494,.021),l(-3.115,-1.31),l(-.191,-.276),l(1.971,-.241),l(3.32,.093),l(.889,.097),l(1.573,.1),l(-2.485,-.693),l(-3.019,-.213),l(-1.103,.122),l(-1.43,-.017),l(-.597,.18),l(-1.008,.022),l(-.606,-.198),l(-1.066,-.517),l(-1.425,-.479),l(-.341,-.355),l(1.971,.124),l(2.278,-.175),l(-1.255,-.249),l(-.756,-.351),l(.38,-.305),l(.729,-.132),l(.769,-.023),l(.921,.042),l(.156,-.219),l(-1.799,-.793),l(1.053,-.114),l(1.213,-.182),l(1.13,.087),l(.584,-.046),l(.145,-.18),l(-.514,-.475),l(1.362,.134),l(.941,.066),l(.83,.202),l(1.589,.869),l(.653,.264),l(.772,.24),l(.674,-.001),l(.36,-.039),M(179.067,27.216),l(-1.156,-.056),l(-.604,-.173),l(-.926,-.638),l(-.621,-.193),l(-3.102,-.091),l(-1.487,.081),l(-.622,.001),l(-1.444,-.056),l(-.767,-.154),l(-1.019,-.37),l(-.161,-.234),l(.335,-.138),l(.802,-.001),l(1.687,.232),l(.867,-.021),l(-.031,-.235),l(-.252,-.275),l(-1.344,-.49),l(-.579,-.098),l(-1.075,-.077),l(-1.392,-.196),l(.065,-.397),l(2.246,-.124),l(2.392,.155),l(.77,.376),l(.999,.453),l(1.979,.193),l(2.189,.114),l(1.178,.233),l(.604,.254),l(1.123,.721),l(.581,.446),l(.168,.426),l(-.481,.194),l(-.919,.137),M(185.907,26.758),l(-1.078,-.037),L(184,26.529),l(-1.029,-.484),l(-1.144,-.76),l(-.03,-.216),l(.239,-.099),l(2.296,-.044),l(1.816,.311),l(3.101,.542),l(-.047,.351),l(-.254,.331),l(-.436,.04),l(-1.563,.177),l(-1.043,.08),M(156.886,26.865),l(-1.573,.646),l(-.558,.27),l(-1.85,.042),l(-1.019,.079),l(-1.898,-.15),l(-.577,-.114),l(-.302,-.423),l(.334,-.291),l(1.365,-.177),l(.899,.056),l(2.351,-.102),l(.496,0),l(2.331,.163),M(132.902,31.305),l(-.53,-.186),l(-.95,-.466),l(-.424,-.112),l(-.33,.057),l(-.56,.207),l(-1.269,.059),l(-.786,-.279),l(-.283,-.319),l(.23,-.264),l(1.13,-.097),l(.503,-.133),l(.771,-.134),l(.977,-.399),l(.848,-.211),l(.726,-.172),l(.548,-.344),l(1.083,-.231),l(1.277,-.079),l(2.532,-.158),l(1.68,.016),l(.888,-.29),l(1.038,-.079),l(1.503,.438),l(-.756,.097),l(-.852,.231),l(-.22,.268),l(.12,.266),l(.469,.474),l(-.777,.001),l(-.912,.115),l(-.918,.662),l(-1,-.017),l(-.867,-.981),l(-.694,-.15),l(-.379,.02),l(-.229,.285),l(-.588,.342),l(-.63,.623),l(-.595,.151),l(-.284,.375),l(-.705,.356),l(-.787,.058),M(191.827,30.313),l(-1.266,-.054),l(-2.278,-.165),l(-.426,.058),l(-.332,-.094),l(-.896,-.489),l(-1.185,-.414),l(.192,-.229),l(2.433,-.042),l(1.542,.263),l(1.472,.054),l(.171,0),l(.89,.358),l(-.179,.246),l(.123,.32),l(-.263,.188),M(144.688,31.739),l(-2.222,-.395),l(-.325,-.674),l(.503,-.057),l(.595,-.17),l(.945,-.096),l(.953,-.133),l(1.279,-.059),l(.522,.187),l(.65,.374),l(.659,.186),l(1.55,-.209),l(.617,.149),l(1.624,.762),l(1.016,.351),l(.897,.036),l(.96,-.058),l(1.418,.09),l(.591,-.02),l(1.116,-.169),l(.092,-.297),l(-.557,-.559),l(-.941,-.391),l(-1.347,-.354),l(.96,-.322),l(.524,-.379),l(.569,-.152),l(1.097,-.116),l(.507,.17),l(.773,.678),l(-.017,.413),l(.518,.654),l(.565,.111),l(.9,.036),l(1.805,.406),l(-.334,-.465),l(.151,-.28),l(.409,-.076),l(1.495,.24),l(.932,.39),l(-.292,.409),l(.039,.5),l(-.358,.461),l(-.573,.277),l(-.755,.111),l(-.782,.001),l(-1.682,.095),l(-1.156,-.071),l(-1.757,-.18),l(-.622,-.017),l(-1.129,.277),l(-1.132,.202),l(-.76,.182),l(-.977,.254),l(-1.625,.292),l(-1.338,.2),L(149.23,34.5),l(-.748,-.07),l(-1.445,-.286),l(-.276,-.378),l(.648,-.128),l(1.219,-.038),l(.738,-.146),l(.852,-.075),l(1.166,-.057),l(.622,.017),l(1.09,-.149),l(.483,-.553),l(-2.768,-.087),l(-.925,-.054),l(-1.564,.28),l(-1.625,.168),l(-1.292,.04),l(-.795,.093),l(-1.681,-.347),l(-.479,.167),l(-.92,.075),l(-.979,-.127),l(-.854,-.33),l(.023,-.111),l(.863,-.427),l(1.098,-.058),l(2.047,-.022),l(.96,-.159),M(178.479,33.234),l(-.984,-.219),l(-.193,-.294),l(.764,-.389),l(.433,-.112),l(.088,-.167),l(-.447,-.333),l(-1.161,-.054),l(-2.13,.227),l(-.939,.076),l(-.331,.019),l(-.854,-.276),l(.039,-.335),l(.739,-.02),l(.542,-.244),l(.587,-.057),l(-.466,-.598),l(.176,-.245),l(.132,-.226),l(.49,.018),l(.859,.224),l(1.942,.746),l(.426,.186),l(.46,-.094),l(-.101,-.243),l(-.959,-.486),l(-.371,-.131),l(-.407,-.357),l(.436,-.095),l(.956,-.059),l(.713,.131),l(1.033,.262),l(.572,.168),l(.27,.018),l(.162,-.452),l(.478,-.133),l(.73,.112),l(.717,.168),l(.327,.168),l(.367,.75),l(-.034,.616),l(-.247,.242),l(-.831,.335),l(-.017,.352),l(.35,.625),l(-.361,.147),l(-1.648,-.089),l(-.862,.112),l(-1.446,.003),M(200.125,30.572),l(-.895,.045),l(-.853,.17),l(-.37,.467),l(1.133,.054),l(.984,-.038),l(.046,-.001),l(.847,.11),l(.463,.129),l(.498,.463),l(.727,.424),l(.621,.091),l(.213,-.074),l(.043,-.314),l(.286,-.056),l(1.075,-.002),l(.883,-.187),l(.766,.11),l(.835,.239),l(.665,.257),l(.976,.053),l(.775,-.463),l(1.393,-.281),l(1.704,-.114),l(1.951,-.246),l(1.533,.053),l(2.59,.014),l(.381,.037),l(.79,.314),l(.911,.239),l(1.418,.146),l(.653,.128),l(.21,.037),l(.361,.166),l(.181,.257),l(-.4,.148),l(-1.833,.407),l(-.135,.255),l(.469,.666),l(-2.486,.076),l(-.592,.02),l(-.651,.091),l(-.768,-.053),l(-.846,-.16),l(-.405,-.125),l(-.306,-.667),l(-.833,-.218),l(-.366,.129),l(.072,.723),l(-.536,.127),l(-.747,-.053),l(-.91,.109),l(-.728,-.017),l(-.495,.001),l(-1.342,-.213),l(-.593,-.197),l(-.495,-.017),l(-.209,.433),l(-1.801,.111),l(-.831,.074),l(-1.453,-.069),l(-.404,-.251),l(-.144,-.686),l(-1.237,.129),l(-.389,.181),l(-.326,.325),l(-.955,.2),l(-1.011,-.034),l(-.112,-.027),l(-.704,-.169),l(-1.186,-.575),l(-.675,.489),l(-1.131,-.07),l(-.666,-.688),l(-.442,-.717),l(.587,-.481),l(.019,-.371),l(-.292,-.316),l(-1.249,-.651),l(-.617,-.299),l(-.047,-.338),l(.636,-.133),l(1.226,-.078),l(2.472,-.023),l(.763,.093),l(1.118,.261),l(.188,.04),l(.872,.184),l(-.613,.189),l(-.259,.013),M(128.19,41.985),l(-.926,-.016),l(-1.059,-.102),l(-.362,-.466),l(-.549,-.467),l(-.432,-.259),l(-1.123,-.363),l(-1.36,-.067),l(-.951,-.138),l(-.469,-.19),l(-.168,-.174),l(.537,-.106),l(.589,-.298),l(.481,-.211),l(.08,-.386),l(-.437,-.809),l(.552,-.001),l(.468,-.177),l(.307,-.372),l(1.104,-.533),l(.526,-.588),l(-.121,-.32),l(-.271,-.16),l(-1.229,-.677),l(-.375,-.448),l(.869,-.001),l(.823,-.056),l(1.455,.051),l(.97,.016),l(1.515,-.092),l(1.284,-.146),l(1.242,-.074),l(.495,.125),l(3.242,.801),l(.918,.088),l(.708,-.055),l(1.316,-.127),l(1.223,.016),l(.771,.07),l(1.35,.373),l(2.389,.815),l(-.242,.143),l(-.432,.036),l(-.26,.072),l(-1.609,.322),l(-1.073,.144),l(-1.829,.428),l(-1.069,.319),l(-1.604,.725),l(-1.025,.563),l(-.549,.089),l(-.974,.124),l(.066,.924),l(-.271,.504),l(-.662,.278),l(-1.215,.124),l(-1.213,-.067),l(-.521,.485),l(-.898,.312),M(190.483,39.666),l(-1.146,-.208),l(-.146,-.524),l(-.941,-.806),l(-.207,-.582),l(.058,-.389),l(.27,-.657),l(.377,-.321),l(1.256,.033),l(-.089,-.16),l(-.416,-.266),l(-.185,-.286),l(.211,-.09),l(.234,-.072),l(2.154,-.058),l(1.215,.087),l(1.464,.248),l(1.282,.051),l(1.316,-.146),l(1.051,.016),l(.694,.105),l(.639,.213),l(-.007,.089),l(-.224,.179),l(-.824,.428),l(-.874,.746),l(-1.513,.92),l(-1.386,.073),l(-2.379,-.154),l(-1.269,.055),l(1.392,.717),l(-.188,.315),l(-.855,.369),l(-.964,.072),M(181.204,41.523),l(-.491,-.085),l(-1.101,-.552),l(-.952,-.641),l(-1.014,-.468),l(-.978,-.225),l(-1.438,-.12),l(-.55,-.174),l(-2.255,-1.066),l(.866,-.654),l(.653,.14),l(1.032,.474),l(1.063,.227),l(.46,.052),l(.615,-.283),l(.908,-.619),l(.415,-.036),l(.018,-.212),l(-1.062,-.565),l(-1.068,-.424),l(-.177,-.231),l(.132,-.107),l(1.683,.086),l(.711,-.215),l(.42,0),l(.996,.39),l(.56,.035),l(.58,-.055),l(.435,-.25),l(1.232,-.127),l(1.354,.069),l(.912,.23),l(-.324,.268),l(-.58,.125),l(-.323,.338),l(-1.55,.375),l(-.392,.16),l(-.069,.194),l(.253,.247),l(.506,.105),l(.692,-.089),l(1.08,.174),l(.868,.245),l(.391,.017),l(.564,.262),l(.186,.438),l(-.681,.352),l(-.156,.35),l(-.271,.68),l(-.457,.366),l(-.508,.14),l(-.658,.019),l(-.582,-.103),l(-.773,-.346),l(-.653,-.103),l(.013,.208),l(1.054,.553),l(-.817,.399),l(-.77,.036),M(243.524,60.394),l(-.234,-.208),l(-1.199,-.235),l(-.673,-.331),l(-.154,-.269),l(.346,-.064),l(.616,-.461),l(-1.378,-.521),l(-1.132,-.125),l(-.76,-.349),l(-.929,-.731),l(-.035,-.511),l(-1.115,-.062),l(-1.311,-.366),l(-.675,-.031),l(.284,.767),l(-.155,.096),l(-.409,-.015),l(-1.704,-.332),l(-.309,.033),l(-.325,.304),l(-.441,.288),l(-1.312,.082),l(-1.349,-.173),l(-1.343,-.189),l(-.813,-.254),l(-.052,-.319),l(.196,-.4),l(.382,-.354),l(1.066,-.163),l(.192,-.178),l(-.128,-.516),l(.206,-.033),l(1.357,.11),l(1.408,.175),l(.517,.144),l(.962,.626),l(.051,-.386),l(-.154,-.193),l(.077,-.194),l(.585,-.033),l(.977,-.099),l(.652,-.163),l(.649,-.114),l(.515,.063),l(.785,.031),l(.166,-.275),l(-1.138,-.825),l(-.773,-.356),l(-.119,-.228),l(.167,-.163),l(.586,-.066),l(.72,-.246),l(1.409,-.591),l(.361,-.541),l(.771,-.46),l(.493,-.379),l(-.109,-.593),l(-.899,-.841),l(-.407,-.496),l(-.541,-.364),l(-.414,.001),l(-1.258,-.33),l(-1.041,-.481),l(-.244,-.467),l(-.527,-.384),l(-.442,.202),l(-.551,.202),l(-.825,-.015),l(-.293,.117),l(-.62,.018),l(-1.255,.169),l(-.214,-.667),l(1.032,-.052),l(1.23,-.103),l(.163,-.269),l(-1.604,-.618),l(-1.552,-.67),l(-.879,-.015),l(-.567,-.185),l(-.169,-.542),l(-.677,-.339),l(-.45,-.05),l(-.918,-.306),l(-.687,-.341),l(-.385,-.119),l(-.611,.155),l(-.81,-.187),l(-1.177,-.238),l(-.489,-.085),l(-.379,.138),l(.529,.307),l(.453,.05),l(2.838,.712),l(.438,.271),l(.069,.306),l(-.505,.221),l(-.669,.069),l(-.541,-.033),l(-.757,-.049),l(-.818,-.252),l(-1.153,-.27),l(-.667,-.066),l(-.323,.17),l(.044,.204),l(.426,.236),l(.259,.438),l(-1.703,-.553),l(-.47,-.05),l(-.396,.119),l(-.63,.153),l(-.767,-.218),l(-.693,-.117),l(-.859,.12),l(-1.474,-.184),l(-1.995,-.167),l(-1.321,.037),l(-1.146,-.032),l(-.862,-.186),l(-.003,-.597),l(-.363,-.153),l(-.904,-.049),l(-.396,.342),l(-.623,.086),l(-1.214,-.049),l(-1.076,-.168),l(-1.303,-.477),l(-.415,-.376),l(.123,-.275),l(.868,-.07),l(1.131,.067),l(1.212,.101),l(.879,-.019),l(.312,-.19),l(-.934,-.463),l(-.8,-.275),l(-.905,-.102),l(-1.106,-.119),l(-.752,.036),l(-.539,-.017),l(-1.249,-.223),l(.114,-.416),l(.292,-.557),l(.34,-.14),l(.646,-.054),l(.081,-.227),l(-1.082,-.4),l(-.044,-.175),l(.449,-.79),l(1.197,-.919),l(.565,-.284),l(.918,-.321),l(.74,-.374),l(.423,-.037),l(.37,-.178),l(.698,-.001),l(.481,-.125),l(.71,-.09),l(1.436,-.109),l(1.348,.033),l(.857,.194),l(-.92,.393),l(-.815,.48),l(-1.394,.639),l(-.43,.529),l(.169,.369),l(1.256,.541),l(-.444,.298),l(-.076,.402),l(.257,.313),l(.862,.554),l(1.559,.621),l(-.096,.121),l(-1.272,.331),l(-.072,.31),l(.959,.033),l(1.504,.101),l(.654,-.639),l(-.103,-.415),l(-.343,-.277),l(-.724,-.103),l(-.422,-.138),l(-.884,-.538),l(.101,-.157),l(.506,-.245),l(.473,-.193),l(1.001,.12),l(.837,-.071),l(-1.204,-.47),l(-.703,-.034),l(-.793,-.279),l(-.056,-.193),l(.053,-.545),l(.886,-.319),l(1.207,.086),l(1.509,-.056),l(-.939,-.281),l(-1.233,-.351),l(.793,-.303),l(1.288,-.198),l(1.044,-.126),l(1.688,-.323),l(1.114,.016),l(.642,.052),l(.833,.141),l(.782,.478),l(1.536,.97),l(.058,.141),l(-.583,.687),l(-.709,.632),l(.038,.733),l(.364,.086),l(.65,.033),l(1.088,-.315),l(.284,-.455),l(.595,-.088),l(.791,.034),l(.454,.174),l(-.006,.262),l(.16,.47),l(.875,.189),l(.196,-.122),l(-.204,-.854),l(.218,-.123),l(.456,-.474),l(1.038,-.265),l(.98,-.054),l(.748,.034),l(.98,.174),l(1.172,.138),l(1.151,-.09),l(.688,.139),l(.327,.262),l(.621,.331),l(.574,.191),L(235.438,40),l(0,.191),l(-.531,.088),l(-.484,.279),l(-.818,.262),l(-.148,.225),l(.45,.259),l(.427,.068),l(.897,-.417),l(.652,-.174),l(.502,.051),l(.476,.242),l(.365,.466),l(.516,.413),l(.342,-.242),l(1.304,-.798),l(1.935,.256),l(.915,.361),l(-.051,.069),l(-.638,.346),l(-.708,.517),l(1.167,-.054),l(.455,-.173),l(1.078,-.105),l(.033,.704),l(.797,.324),l(.523,-.069),l(.831,-.207),l(1.316,-.088),l(.816,.221),l(.566,.273),l(-.162,.154),l(-.461,.223),l(-1.87,.43),l(-.238,.272),l(.523,.253),l(.456,-.068),l(.747,-.171),l(1.235,-.122),l(.406,-.29),l(.361,-.103),l(.479,.067),l(.51,.187),l(.544,.339),l(.636,.522),l(-1.019,.002),l(-1.2,.053),l(-.424,.135),l(.059,.269),l(.372,.134),l(1.333,.065),l(.938,.183),l(.543,.217),l(.233,.301),l(-.37,.034),l(-.748,.001),l(-1.011,-.082),l(-.875,-.216),l(-.824,-.065),l(-.316,.185),l(1.23,.583),l(-.216,.201),l(-1.552,.12),l(.245,.283),l(.437,.166),l(.551,.032),l(1.331,.364),l(1.312,.347),l(.247,.182),l(.039,.282),l(.351,.38),l(.75,-.217),l(.536,.049),l(1.413,.295),l(.298,-.067),l(.649,-.15),l(.61,.032),l(.752,.379),l(.862,.477),l(.376,.346),l(-.685,.1),l(-.801,.117),l(-.027,.444),l(.795,-.001),l(1.405,-.052),l(.51,-.132),l(.895,.048),l(-.386,.559),l(.918,.179),l(.514,-.001),l(.943,-.379),l(.685,.343),l(1.089,.407),l(.194,.098),l(-.275,.229),l(-.254,.099),l(-.103,.326),l(-.819,.05),l(-.718,-.21),l(-.247,-.048),l(-.794,.213),l(.968,.454),l(.279,.162),l(.057,.276),l(-1.057,.197),l(-.356,.228),l(-.312,.292),l(-.372,-.113),l(-.819,-.583),l(-.29,1.103),l(.354,.903),l(-.419,.065),l(-.677,-.257),l(-.751,-.176),l(-.205,-.177),l(-.018,-.243),l(-.315,-.274),l(-.93,.276),l(-.743,-.613),l(.051,-.292),l(.27,-.374),l(-.304,-.129),l(-.224,-.016),l(-.992,-.08),l(-.718,-.292),l(-1.17,-.617),l(-.769,-.292),l(-.762,-.048),l(-.452,.23),l(-.645,.083),L(250,52.592),l(.281,.179),l(1.05,.682),l(-.321,.114),l(-.686,.05),l(-.359,-.259),L(249.277,53),l(-.646,-.21),l(.275,.488),l(.859,.972),l(.604,.015),l(.587,.08),l(.5,.581),l(.612,.805),l(.513,.432),l(.615,-.321),l(.285,.047),l(.592,.399),l(.585,.271),l(1.38,.396),l(-.634,.113),l(-.213,.208),l(.254,.19),l(.568,.286),l(.962,.444),l(.324,.237),l(.242,.682),l(-.112,.428),l(-1.302,-1.155),l(-.554,-.237),l(-.027,.238),l(.118,.27),l(1.055,1.281),l(-.01,.3),l(-.926,-.125),l(.053,.205),l(.432,.409),l(.378,.519),l(-.563,-.172),l(-.615,-.313),l(-.889,-.693),l(-.145,-.031),l(-.719,.064),l(-.91,-.188),l(-1.44,-.662),l(-.319,-.285),l(-1.062,-.665),l(.187,.777),l(-1.22,-.473),l(-.567,-.158),l(-.872,-.03),l(.095,.222),l(.799,.696),l(.853,.426),l(1.842,.645),l(1.296,.644),l(.774,.549),l(.442,.486),l(.429,.689),l(-1.833,-.341),l(-1.524,-.421),l(-1.251,-.28),l(-1.444,-.107),l(-1.092,-.25),l(-.898,-.644),l(-1.146,-.14),l(-.638,-.204),l(-.635,-.141),l(-.058,.145),M(146.194,38.698),l(.818,-.037),l(.78,-.125),l(1.138,-.548),l(.895,-.019),l(1.723,.243),l(.939,.262),l(-.188,.877),l(.515,-.071),l(.66,-.019),l(.792,-.229),l(.599,-.141),l(.758,.016),l(.334,-.071),l(-.989,-.965),l(.156,-.036),l(1.38,.138),l(1.208,.245),l(.675,.245),l(.259,.245),l(.194,.508),l(.965,1.063),l(.638,.346),l(1.045,-.315),l(.14,-.261),l(-1.243,-1.361),l(-.439,-1.321),l(.228,-.354),l(1.91,.262),l(1.775,.156),l(2.031,.719),l(.36,.175),l(.3,.316),l(.16,.701),l(.511,.645),l(.352,.26),l(.856,.606),l(.048,.19),l(-.178,.243),l(-.333,.605),l(.179,.31),l(.224,.12),l(1.4,.649),l(.509,.171),l(1.151,.254),l(1.513,.1),l(2.056,.576),l(1.012,.39),l(.364,.793),l(-.168,.101),l(-1.071,-.082),l(-.811,-.234),l(-.945,-.234),l(-.551,.169),l(-.665,.204),l(-1.021,.036),l(-.256,.118),l(.208,.689),l(1.087,-.069),l(.614,-.152),l(.676,-.119),l(.876,.536),l(-.01,.235),l(-.526,.151),l(-.517,.252),l(-.583,.102),l(-1.417,.12),l(-1.049,-.015),l(-1.194,-.082),l(-1.594,-.248),l(-2.278,-.499),l(-.553,-.217),l(-.436,-.335),l(-.482,-.033),l(-.581,.102),l(-.402,.37),l(-1.114,.505),l(-1.055,.019),l(-1.411,.103),l(-1.253,.42),l(-2.753,.356),l(-1.42,.019),l(-1.205,.086),l(-1.984,-.063),l(-.483,.101),l(-.916,-.015),l(-1,-.282),l(-.061,-.468),l(.198,-.101),l(.002,-.302),l(-.395,-.2),l(-.462,-.1),l(-3.146,-.112),l(-1.258,-.115),l(-.864,-.167),l(-.801,-.2),l(-.753,-.504),l(-1.274,-.554),l(.303,-.069),l(.531,-.222),l(1.572,-.054),l(.603,-.188),l(.558,.016),l(.91,-.019),l(.904,-.087),l(1.716,.031),l(.935,-.002),l(2.14,.047),l(1.09,-.002),l(1.711,-.038),l(.415,-.154),l(-.681,-.221),l(-2.312,-.492),l(-1.942,-.202),l(-4.059,-.061),l(-1.569,-.014),l(-1.694,.055),l(-.955,.053),l(-.604,.001),l(-1.651,-.529),l(.011,-.207),l(.28,-.069),l(.823,-.053),l(1.315,-.209),l(.996,.032),l(1.78,-.141),l(.931,-.105),l(.5,-.277),l(-.392,-.346),l(-2.023,.073),l(-1.578,.159),l(-.393,-.051),l(-.554,-.189),l(-.677,-.346),l(-.65,-.19),l(-.692,.054),l(-.709,-.242),l(-.039,-.279),l(1.304,-.981),l(2.62,-.848),l(.909,-.143),l(.373,-.177),l(1.297,-.267),l(1.324,-.162),l(.701,-.267),l(1.113,-.091),l(1.026,.246),l(-.07,.212),l(-.548,.354),l(-.021,.81),M(251.273,99.526),l(-.188,.153),l(-.16,-.291),l(.192,-.077),l(-.02,-.256),l(.143,-.069),l(-.042,-.154),l(-.224,0),l(-.606,-.231),l(.077,-.229),l(-.31,-2.819),l(-.174,-.274),l(-.488,-.288),l(-.771,-.025),l(-.41,.176),l(-.381,-.085),l(-.505,-.36),l(-.273,-.085),l(-.632,.526),l(-.514,.626),l(-1.139,2.22),l(-1.139,1.45),l(-1.161,-.124),l(-.402,.06),l(-.363,.435),l(-.174,.375),l(-1.093,-.095),l(-1.855,-.004),l(-2.508,-.029),l(-1.76,.009),l(-.968,.523),l(-.534,.305),l(-1.754,.814),l(-.545,.164),l(-.146,.434),l(-.163,.512),l(-.44,.275),l(-1.156,.197),l(-1.305,-.138),l(-1.123,-.01),l(-.93,.091),l(-.47,.203),l(-.162,.375),l(.018,.319),l(.16,.471),l(.047,.362),l(-.875,.427),l(-1.464,.452),l(-.944,.163),l(-.919,.062),l(-.88,.262),l(-.939,.478),l(-.925,.506),l(-.524,.117),l(-.573,-.068),l(-.497,-.169),l(-.371,-.427),l(-.012,-.33),l(.044,-.218),l(.707,-.525),l(.414,-.294),l(.264,-.433),l(.294,-.544),l(.377,-.576),l(.028,-.746),l(-.054,-.545),l(-.876,-3.16),l(-2.529,-1.05),l(-.26,-.33),l(.11,-.318),l(-.307,-.235),l(-.916,-.181),l(-.184,-.294),l(-.178,-.135),l(-.628,.024),l(-.46,-.465),l(-.101,-.429),l(-2.15,-1.061),l(-3.975,-1.576),l(-.977,-.386),l(-.797,-.227),l(-.805,.189),l(-1.469,.592),l(-.707,-.074),l(-.542,.049),l(-.196,-.144),l(-.156,-.115),l(-.474,-.041),l(-.855,.083),l(-.197,-.116),l(-.028,-.282),l(-.373,.075),l(-.412,.191),l(-.219,.06),l(-.573,.141),l(-.506,-.098),l(-.064,-.185),l(-.469,-.086),l(-.241,-.271),l(-.502,-.013),l(-.16,.247),l(-.338,-.48),l(-.271,.012),l(-.02,-.185),l(-1.425,-.208),l(-.518,.076),l(-.833,-.451),l(-.468,-.46),l(-.279,-.371),l(-.896,-.748),l(-.501,.036),l(.131,.347),l(.387,.588),l(-.68,-.003),l(-2.687,.029),l(-2.798,-.029),l(-1.348,.007),l(-2.105,-.003),l(-2.915,.016),l(-2.781,-.029),l(-2.131,.012),l(-2.935,-.014),l(-.601,.003),l(-4.84,-.018),l(-3.617,.004),l(-.875,.005),l(-3.821,-.023),l(-1.089,.035),l(-4.13,-.021),l(-.74,-.011),l(-5.117,.028),l(-1.687,-.006),l(-2.87,.001),l(-3.938,-.008),l(-4.588,.025),l(-1.335,-.022),l(-2.579,-.001),l(-.194,-.013),l(-.187,-.151),l(-.509,-.305),l(-.071,-.437),l(.074,-.346),l(-.708,.25),l(-.373,-.029),l(-.331,-.305),l(-.162,-.496),l(-.125,-.189),l(-.385,.088),l(-.23,.205),l(-.483,.059),l(-.721,-.495),l(-.119,-.425),l(-.201,-.821),l(-1.051,.104),l(-1.01,-.277),l(-.487,-.087),l(-.173,-.087),l(-.143,-.396),l(-.438,-.352),l(-.591,.222),l(-1.236,.046),l(-.461,-.117),l(-.383,-.249),l(-.106,-.25),l(.257,-.648),l(.458,-.222),l(-.227,-.294),l(-1.24,-.086),l(.617,-.518),l(.398,-.281),l(.547,-.149),l(.605,-.508),l(-.874,.006),l(-.621,.149),l(-.362,-.043),L(116,83.422),l(-.039,-.978),l(-.789,.002),l(-1.015,-1.066),l(.132,-.238),l(.034,-.53),l(-.547,.056),l(-.83,.492),l(-1.266,-.934),l(-.384,-.521),l(-.204,-.402),l(-.068,-.432),l(.419,-.404),l(.161,-.254),l(.436,-.3),l(-.358,-.689),l(-.393,-.777),l(.163,-.788),l(-.402,-.255),l(-2.025,-.763),l(-.98,-.314),l(-.189,-.029),l(-.512,-.393),l(-1.67,-1.882),l(-1.769,-1.768),l(-.814,-.58),l(-2.048,-1.175),l(-.35,-.322),l(-.371,-.492),l(-.316,-.199),l(-.832,-.073),l(-.495,.126),l(-.731,.498),l(-1.225,.67),l(-.848,.205),l(-.238,.325),l(-.945,-.673),l(-2.162,-1.318),l(-.348,-.292),l(-.173,-.387),l(-.332,-.388),l(-.739,-.059),l(-2.424,.122),l(-.84,-.074),l(-.196,-.279),l(-.089,-1.046),l(-.026,-2.167),l(.043,-4.334),l(.026,-2.183),l(-.129,-2.796),l(-.052,-2.335),l(-.039,-2.259),l(.003,-2.855),l(-.102,-.483),l(.71,.024),l(.9,-.086),l(.964,.116),l(2.012,.451),l(1.601,.518),l(1.214,.266),l(1.04,.115),l(.731,.032),l(1.619,.164),l(.888,.232),l(.429,.149),l(.254,-.034),l(-.452,-.601),l(-.357,-.2),l(-.345,-.15),l(-.064,-.419),l(1.344,-.423),l(.745,.066),l(.578,-.068),l(.15,-.102),l(1.736,.148),l(.771,-.001),l(1.125,-.373),l(.309,-.186),l(.442,0),l(.656,-.221),l(.759,-.069),l(.866,-.086),l(.734,-.086),l(.469,-.239),l(.392,-.188),l(.771,-.104),l(1.045,-.002),l(.872,.123),l(-.445,.404),l(-.352,.119),l(-1.101,.137),l(-1.092,.373),l(-1.244,.171),l(-1.22,.271),l(-.699,.522),l(-1.767,.255),l(-.681,.487),l(.846,.266),l(1.441,.748),l(-.219,-.55),l(.168,-.351),l(1.196,-.253),l(.39,-.235),l(.726,-.421),l(1.727,-.053),l(.96,-.372),l(1.158,-.389),l(2.066,-.173),l(.643,-.338),l(.921,-.272),l(.821,-.189),l(.476,-.239),l(-.178,-.272),l(-.702,-.392),l(-.655,-.444),l(.899,.101),l(.764,.272),l(.701,.306),l(.412,.324),l(.376,.476),l(.449,.523),l(.393,.235),l(1.246,.486),l(.186,.067),l(1.154,.216),l(.394,-.018),l(.199,-.151),l(-.511,-.639),l(.07,-.27),l(.548,-.035),l(.334,-.136),l(.627,-.103),l(.383,.354),l(.059,.421),l(-.205,.287),l(.833,.133),l(.938,-.069),l(1.136,-.457),l(.536,-.49),l(.479,-.069),l(1.131,.015),l(1.536,.267),l(1.745,.435),l(1.396,.334),l(2.095,.349),l(1.024,.216),l(.619,.066),l(1.572,.282),l(1.121,.065),l(1.144,.148),l(1.096,.032),l(1.4,-.086),l(.899,.099),l(1.008,.282),l(.982,.349),l(.434,.249),l(.191,.333),l(-.524,.134),l(-.935,-.032),l(-.566,.051),l(-.849,.135),l(-.354,.714),l(3.323,.358),l(1.726,.079),l(1.749,.014),l(.868,-.068),l(.738,-.051),l(.94,-.167),l(.895,-.118),l(.938,-.101),l(.886,.032),l(1.432,.477),l(1.452,.179),l(.42,.115),l(1.225,.443),l(-.013,.312),l(-.504,.083),l(-.35,.247),l(.305,.147),l(1.823,.979),l(-.162,-.392),l(-.024,-.312),l(.456,-.05),l(.617,-.132),l(-.062,-.181),l(-.972,-.656),l(-.128,-.198),l(-.145,-.445),l(.121,-.745),l(.35,-.034),l(1.944,-.136),l(.928,-.151),l(.207,-.299),l(.459,-.217),l(.613,-.035),l(1.098,.281),l(1.528,.279),l(.968,.064),l(.969,-.102),l(.612,.414),l(.248,.082),l(.962,.213),l(1.211,.13),l(.678,.081),l(1.146,-.002),l(.879,-.2),l(1.755,-.02),l(1.876,.029),l(1.07,-.052),l(1.18,-.267),l(.959,.478),l(.95,.296),l(.522,-.018),l(.243,-.314),l(-.017,-.513),l(-.666,-.231),l(-.732,-.131),l(-1.377,-.064),l(.089,-.449),l(1.193,-.085),l(.575,.065),l(.804,.214),l(.871,.198),l(.858,.048),l(.498,.198),l(.088,.183),l(-.095,.132),l(-.287,.86),l(.179,.51),l(.304,.164),l(.177,.065),l(.792,.097),l(.951,.311),l(-.071,-.559),l(-.466,-.989),l(.137,-.48),l(.258,-.266),l(.712,.015),l(.811,-.035),l(1.229,-.85),l(.492,-.051),l(.479,-.001),l(.517,-.151),l(.033,-.133),l(-.15,-.367),l(-.375,-.35),l(-.307,.001),l(-.81,.185),l(-.988,-.082),l(.535,-.52),l(.806,-.069),l(.435,-.168),l(.572,-.001),l(.739,.4),l(.464,.167),l(.065,-.268),l(-.081,-.956),l(-.744,.069),l(-.897,-.032),l(-.68,-.116),l(-.859,-.318),l(-.725,.085),l(-1.245,-.183),l(-.861,-.234),l(-.956,-.218),l(-.657,-.338),l(-.092,-.136),l(-.022,-.324),l(.33,-.137),l(.842,-.463),l(-.486,-.221),l(-1.188,-.375),l(.09,-.207),l(.58,-.604),l(.593,-.294),l(.387,-.035),l(1.032,.257),l(.139,-.035),l(.173,-.346),l(-.709,-.362),l(-.201,-.277),l(.23,-.035),l(.551,-.331),l(.367,-.035),l(1.841,-.021),l(.559,.086),l(.728,.189),l(1.26,.449),l(.432,.328),l(.195,.38),l(-.246,.603),l(1.261,.53),l(.809,.495),l(1.134,.493),l(-.377,.341),l(-.985,.036),l(-.474,.273),l(-.416,.557),l(.471,.067),l(1.071,.233),l(.805,.049),l(.387,-.136),l(.597,-.001),l(1.477,.351),l(-.335,.353),l(-.563,.219),l(.092,.151),l(.796,.467),l(.358,.601),l(.025,.833),l(.303,-.063),l(.021,-.004),l(.411,-.067),l(.608,-.367),l(.655,-1.137),l(.668,-.42),l(.523,.016),l(.731,.284),l(1.064,.55),l(.473,.383),l(.209,.45),l(-.159,.433),l(-.336,.034),l(-.796,-.098),l(-.202,.299),l(-.043,.415),l(.35,.396),l(1.146,.659),l(.61,.493),l(.463,.279),l(.595,-.166),l(.896,-.167),l(.369,-.132),l(.208,-.66),l(.764,-.398),l(.599,-.416),l(.249,-.664),l(.363,-.75),l(.237,-.184),l(1.394,.081),l(.329,-.067),l(.134,-.518),l(-.985,-.333),l(-.918,-.35),l(.088,-.891),l(.595,-.271),l(.787,.032),l(.42,-.068),l(.571,.016),l(3.459,.616),l(1.325,.669),l(.506,-.001),l(.553,-.068),l(.454,.201),l(.244,1.036),l(-.474,.268),l(-.431,.101),l(-.243,-.05),l(-.718,-.532),l(-.263,0),l(-.799,.269),l(.123,.316),l(.309,.515),l(.699,.729),l(.855,.528),l(1.108,.576),l(.024,.313),l(-.478,.642),l(-.439,.181),l(-1.407,.772),l(-.674,.083),l(-1.123,.509),l(-.763,-.276),l(-1.654,-.962),l(-.586,-.262),l(-.497,-.048),l(-.684,.281),l(1.364,.521),l(1.483,.896),l(-.708,.067),l(-.691,-.081),l(-1.288,.084),l(-.375,-.129),l(-.596,-.62),l(-1.147,-.014),l(-1.857,.118),l(-.253,.229),l(.614,.244),l(1.311,.421),l(-.159,.195),l(-.611,.327),l(-2.045,1.106),l(-.657,.179),l(-.527,.001),l(-.859,-.241),l(-.816,-.484),l(-.225,-.081),l(-1.189,-.225),l(-.736,-.259),l(-.598,-.112),l(-.947,.014),l(-.289,.004),l(-1.214,.174),l(1.503,.278),l(1.136,.21),l(1.751,.774),l(1.629,.433),l(1.233,.126),l(1.02,.031),l(-.618,1.091),l(-1.237,.705),l(-.856,.432),l(-.728,.161),l(-.829,.049),l(-.928,-.126),l(-1.062,-.38),l(-.048,.351),l(-.025,.287),l(.321,.572),l(-.02,.159),l(-.741,.031),l(-.058,.002),l(-1.365,-.108),l(-1.649,-.41),l(-.884,-.078),l(-2.962,-.322),l(2.146,.864),l(1.576,.156),l(1.367,.267),l(.562,.205),l(.33,.268),l(-.011,.19),l(-.642,.333),l(-1.106,.207),l(-1.429,-.076),l(-.511,-.062),l(-.367,.269),l(1.254,.423),l(-.469,.426),l(-1.06,.316),l(-1.454,.662),l(-.421,.252),l(.218,.704),l(-.313,.235),l(-.909,.205),l(-.31,.282),l(-.529,.64),l(-.276,.296),l(-.241,.669),l(-.274,.543),l(-.323,.666),l(.056,.416),l(-.161,.554),l(.123,.875),l(.136,.536),l(.598,.366),l(.25,.015),l(.257,.091),l(.664,.014),l(1.164,-.094),l(.276,.045),l(.367,.29),l(.413,.763),l(.813,1.157),l(.22,.668),l(-.132,.91),l(.673,.014),l(1.874,-.428),l(1.261,-.033),l(.723,.074),l(.535,.157),l(1.062,.311),l(2.129,.435),l(1.896,.903),l(.993,.933),l(3.5,.67),l(.644,.225),l(.982,.403),l(.986,.253),l(.553,.104),l(.702,-.091),l(.453,.044),l(.828,-.077),l(1.245,.163),l(1.407,.207),l(.401,.194),l(-.297,.702),l(-.142,.85),l(.154,.283),l(.307,.342),l(.07,.416),l(-.115,1.025),l(-.309,.593),l(.022,.208),l(.604,.266),l(.481,.339),l(.264,.354),l(.046,.488),l(-.076,.354),l(.97,.116),l(.963,.47),l(.676,.588),l(.392,.588),l(.078,.162),l(.64,.014),l(.726,.41),l(.907,.601),l(-.349,-.66),l(-.22,-.279),l(.134,-.338),l(.573,-.414),l(.365,.176),l(.381,.456),l(.262,.353),l(.165,-.354),l(.107,-.545),l(-.215,-.456),l(.541,-.532),l(.139,-.546),l(-.183,-.517),l(-.337,-.458),l(-.261,-.754),l(-.004,-.548),l(-.205,-.593),l(-.218,-.43),l(.615,-.016),l(-.097,-.476),l(-.296,-.252),l(-.657,-.163),l(-.375,-.282),l(-.326,-.923),l(1.252,-.271),l(.872,-.241),l(.625,-.271),l(1.758,-.949),l(.629,-.302),l(1.043,-.935),l(.434,-.544),l(.237,-.665),l(.054,-.529),l(-.257,-1.045),l(-.246,-.531),l(-.239,-.319),l(-.938,-.729),l(-.467,-.274),l(-1.105,-.532),l(-.363,-.122),l(-.453,-.274),l(-.151,-.046),l(-.293,-.351),l(.08,-.107),l(.868,-.522),l(.553,-.875),l(.293,-.416),l(.25,-.092),l(.447,-.017),l(.295,-.277),l(-.106,-.523),l(-.18,-.355),l(-.316,-.402),l(-.048,-.202),l(.258,-.357),l(.005,-.264),l(-1.751,-.105),l(1.084,-.92),l(.503,-.704),l(.007,-.125),l(-.316,-.203),l(-.609,-.265),l(-.244,-.266),l(-.043,-.533),l(.305,-.425),l(.554,-.315),l(.57,-.19),l(.827,.062),l(1.781,.374),l(1.097,.234),l(.753,.077),l(1.44,.013),l(1.08,-.144),l(.86,-.222),l(.21,-.047),l(.179,-.063),l(.589,.078),l(.991,.407),l(.254,.125),l(.754,.454),l(.918,.375),l(.796,.437),l(-.294,.391),l(.406,.233),l(1.698,.496),l(1.958,.354),l(.725,-.033),l(.368,-.203),l(.339,.295),l(-.013,.404),l(-.577,.343),l(-.123,.45),l(.438,1.327),l(.136,.722),l(.23,.414),l(-.049,.353),l(-.248,.169),l(-.445,-.014),l(-.347,-.015),l(-.138,.674),l(.375,.274),l(1.137,-.415),l(.366,-.047),l(.781,-.047),l(.286,.015),l(.677,.32),l(.378,.351),l(.004,.259),l(-.081,.123),l(.277,.32),l(.516,-.184),l(.306,-.046),l(1.173,-.079),l(.636,-.184),l(.436,-.383),l(.333,-.551),l(.326,.015),l(.194,.122),l(.693,.717),l(.042,-.062),l(.108,-.764),l(.317,-.583),l(.475,-.262),l(.539,-.385),l(-.651,-.505),l(.008,-.308),l(.272,-.139),l(.98,-.094),l(.193,-.139),l(.512,-.665),l(.667,.37),l(.607,.599),l(.785,.506),l(.596,.797),l(1.045,.764),l(.264,.352),l(-.344,.291),l(.095,.335),l(.573,-.031),l(.365,.777),l(.182,.183),l(.324,.121),l(.743,.136),l(.281,.258),l(.133,.38),l(-.379,.092),l(-.416,.168),l(.411,.318),l(.397,.227),l(.77,.196),l(.279,.227),l(.034,.424),l(-.056,.076),l(-.409,.106),l(-.676,-.029),l(-.745,-.12),l(-.316,.061),l(.091,.166),l(.273,.181),l(.189,.241),l(.333,.513),l(.411,.226),l(.634,.029),l(.462,.18),l(.838,.496),l(.899,.435),l(.246,.33),l(-.035,.195),l(-.447,.781),l(.508,.059),l(.663,-.166),l(.786,-.077),l(.79,.164),l(.574,.194),l(1.162,.49),l(.981,.132),l(1.517,.295),l(-.184,.253),l(-.718,.21),l(-.736,.21),l(-.663,.046),l(-.834,.24),l(-.583,.402),l(-.65,.225),l(-1.032,.061),l(-.286,.075),l(-.324,.268),l(.029,.371),l(-.271,.535),l(1.175,-.343),l(.542,-.09),l(.649,-.105),l(1.201,-.774),l(1.251,-.478),l(1.146,-.106),l(.662,.237),l(.35,.341),l(-.398,.446),l(.036,.119),l(.307,.296),l(.616,-.224),l(.455,-.164),l(.655,.192),l(1.051,.487),l(.226,.251),l(.022,.178),l(-.299,.43),l(-.05,.355),l(-.406,.444),l(1.001,.929),l(-.365,.37),l(-.795,.282),l(-1.078,.621),l(-.662,.281),l(-1.097,.046),l(-.823,.119),l(-1.548,.077),l(-.433,.413),l(-.916,.795),l(-.686,.427),l(-.612,.294),l(-.938,.222),l(-1.494,.172),l(-1.845,.127),l(-1.452,-.07),l(-2.031,-.084),l(-.355,.03),l(-1.073,.075),l(-1.058,-.012),l(-1.873,-.099),l(-.917,-.027),l(-1.758,.106),l(-.547,.206),l(-.523,.294),l(-.537,.585),l(-.205,.554),l(-.287,.335),l(-.591,.19),l(-1.07,.104),l(-.537,.147),l(-1.098,.555),l(-.774,.54),l(-.794,.612),l(-.325,.363),l(-.33,.233),l(-.868,.843),l(-.485,.566),l(-.418,.276),l(-.46,.58),l(-.518,.968),l(.749,-.737),l(.375,-.131),l(.688,-.479),l(1.059,-.944),l(1.097,-.785),l(2.028,-.948),l(1.245,-.395),l(1.797,-.512),l(1.065,-.235),l(1.03,-.235),l(1.473,-.148),l(.922,.056),l(.895,.289),l(.509,.29),l(.136,.189),l(.144,.464),l(-.125,.218),l(-.326,.219),l(-1.059,.292),l(-.753,.452),l(-.581,.044),l(-.845,-.23),l(-.726,.045),l(-.645,.19),l(.279,.08),l(1.13,.229),l(.17,.122),l(.256,.444),l(.074,.095),l(1.299,-.485),l(-.028,.216),l(.479,-.148),l(.372,.162),l(-.36,.229),l(-.231,.256),l(.112,.27),l(-.163,.014),l(-.074,.229),l(-.91,.444),l(1.216,.013),l(.077,.188),l(-.187,.282),l(.091,.43),l(.118,-.081),l(.239,.134),l(-.063,.134),l(.048,.202),l(.351,.457),l(.009,.147),l(.824,.054),l(.154,.094),l(.04,-.067),l(.727,.147),l(-.315,.134),l(-.373,-.013),l(-.047,.134),l(.525,.147),l(.211,.241),l(.569,-.081),l(.135,.134),l(.212,-.014),l(.134,.174),l(.418,-.04),l(-.075,-.107),l(.843,.067),l(.241,.107),l(-.207,.201),l(.242,-.107),l(.26,.027),l(.245,-.013),l(.696,-.362),l(.303,-.081),l(.104,.362),l(.377,.161),l(.538,-.121),l(.488,.416),l(-.405,.254),l(.089,.107),l(.825,.027),l(.164,.174),l(-.521,.121),l(-.161,-.121),l(-.3,.134),l(.118,.094),l(-.515,0),l(-.23,-.04),l(.109,.161),l(-.45,.04),l(.056,.107),l(-.443,.014),l(-.128,.147),l(-.45,.04),l(-.368,.253),l(-.09,-.106),l(-.706,.28),l(-.046,.053),l(-.529,.133),l(-.119,-.267),l(-.274,.106),l(-.163,.267),l(-.188,-.187),l(-.068,.253),l(-.218,.08),l(-.094,.187),l(-.513,0),l(-.081,-.08),l(-.169,-.053),l(.032,-.347),l(-.242,.36),l(-.202,.12),l(-.131,-.253),l(-.354,.027),l(.043,.24),l(-.233,.04),l(.312,.08),l(.033,.213),l(-.103,.12),l(-.174,-.067),l(-.768,.453),l(.127,.16),l(-.235,.12),l(-.194,.053),l(.015,.213),l(-.161,-.12),l(.083,.173),l(-.217,.08),l(-.14,-.107),l(.096,.253),l(-.222,.066),l(-.146,-.08),l(-.148,0),l(-.064,.133),l(-.156,-.106),l(-.243,.227),l(-.086,.292),l(-.201,-.226),l(-.344,.133),l(-.154,-.187),l(-.349,-.479),l(-.138,.24),l(-.419,-.866),l(.456,-.773),l(.284,-.16),l(.035,-.12),l(-.35,.12),l(-.357,.267),l(-.076,-.106),l(.924,-.507),l(.125,.146),l(.195,-.093),l(-.258,-.107),l(1.103,-.52),l(1.109,-.562),l(.658,-.361),l(.336,.094),l(-.067,.428),l(.179,-.054),l(.258,.281),l(-.044,-.201),l(-.017,-.174),l(.632,-.214),l(.73,-.134),l(.192,.067),l(.202,-.081),l(-.152,-.094),l(-.653,-.053),l(-.595,.053),l(-.42,-.053),l(-.804,-.014),l(-.306,.027),l(-.251,.081),l(-.246,.094),l(.033,-.214),l(1.128,-.563),l(.054,-.201),l(.252,-.08),l(-.052,-.174),l(-.523,.281),l(.097,-.134),l(-.502,-.51),l(.309,.443),l(-.36,.482),l(-.328,.013),l(-1.974,.817),l(-.284,.08),l(-.362,-.201),l(-.227,-.067),l(.23,.201),l(-.788,.401),l(-.219,-.174),l(-1.019,-.054),l(-.124,.147),l(-.38,-.241),M(186.193,47.833),l(-.713,-.032),l(-.922,-.181),l(-.882,-.065),l(-1.25,-.314),l(-.973,-.182),l(-.604,-.049),l(-1.083,-.199),l(.43,-.335),l(1.542,-.405),l(.385,-.186),l(.115,-.673),l(.305,-.236),l(.831,-.069),l(.743,.184),l(1.436,.603),l(1.287,.4),l(.074,.285),l(.315,.284),l(1.094,.516),l(-.288,.117),l(-1.263,.486),l(-.578,.051),M(231.09,50.646),l(-1.319,-.03),l(-.449,-.147),l(-.232,-.247),l(-.173,-.478),l(.3,-.43),l(.708,-.664),l(.662,-.267),l(1.359,-.168),l(.911,.197),l(.79,.314),l(-.021,.464),l(-.039,.727),l(-.362,.265),l(-1.025,.348),l(-1.108,.117),
-N(444.972,79.145),l(.47,-.218),l(.307,-.093),l(-.294,-.024),l(-.419,.061),l(-.15,-.135),l(-.125,.184),l(-.108,-.012),l(.066,-.491),l(.177,-.218),l(.41,.009),l(1.489,.062),l(.417,.014),l(.339,-.075),l(.121,-.253),l(-.175,-.288),l(.246,-.05),l(-.068,-.122),l(-.068,-.123),l(.353,-.096),l(.12,-.034),l(.051,.154),l(.086,.052),l(.24,0),l(.223,.12),l(.257,.069),l(.514,.068),l(.086,.103),l(.223,-.051),l(.445,0),l(.257,0),l(.223,-.017),l(.086,.137),l(.103,.103),l(.188,.034),l(.171,.069),l(.018,.137),l(.052,.12),l(-.224,.12),l(-.068,.154),l(-.068,.206),l(.018,.171),l(.034,.137),l(.029,.038),l(-2.96,.101),l(-2.246,-.115),l(-.842,-.006),M(717.633,81.109),l(.42,.443),l(.429,.62),l(.183,.457),l(.01,.767),l(-.244,.442),l(-.197,.78),l(-.002,.764),l(.29,.777),l(.592,.849),l(.65,1.446),l(.899,1.614),l(1.115,1.679),l(-1.26,-.677),l(-.832,-.39),l(-.99,-.056),l(-.268,.088),l(-.396,.204),l(-.462,1.045),l(-.266,1.101),l(-.082,.579),l(.277,.982),l(.183,.216),l(.659,.908),l(.54,.201),l(.463,.648),l(-.314,1.246),l(-.664,-1.258),l(-.866,-.301),l(-.224,.029),l(-.415,.303),l(-.311,.534),l(-.643,.907),l(-.422,-.5),l(-.19,-.929),l(.637,-1.146),l(-.395,-.884),l(.175,-.454),l(.502,-.63),l(-.131,-.723),l(-.196,-.376),l(-.27,-.55),l(-.062,-.235),l(.403,-.302),l(.284,-.915),l(.075,-.784),l(.005,-1.326),l(.15,-1.302),l(-.09,-.732),l(-.213,-.469),l(-.83,-.85),l(-.1,-.897),l(.114,-.192),l(.359,-.722),l(.065,-.738),l(-.336,-.457),l(.172,-.237),l(.374,-.03),l(.62,-.031),l(1.023,-.534),M(471.158,84.281),l(-.002,-.142),l(-.165,-.066),l(-.082,-.115),l(-.164,-.082),l(.033,-.099),l(-.033,-.23),l(-.033,-.164),l(.082,-.099),l(-.147,-.131),l(-.099,-.148),l(.132,-.066),l(0,-.165),l(-.296,-.164),l(-.279,-.263),l(-.017,-.164),l(.099,-.131),l(.131,-.165),l(.362,-.017),l(.328,.049),l(.197,.132),l(.51,.016),l(.525,-.099),l(.444,-.247),l(.049,-.065),l(.148,-.083),l(.296,0),l(.065,-.164),l(-.033,-.131),l(-.279,-.066),l(-.296,-.148),l(-.099,-.181),l(.082,-.017),l(.066,-.049),l(.032,-.065),l(-.263,-.066),l(-.361,-.099),l(-.378,-.066),l(-.361,.066),l(-.182,-.066),l(.066,-.181),l(.099,-.197),l(-.066,-.148),l(-.164,-.099),l(-.279,-.082),l(-.23,-.066),l(-.443,-.213),l(-.115,-.23),l(-.164,-.263),l(-.214,-.017),l(-.017,-.099),l(.066,-.131),l(.099,-.115),l(-.132,-.033),l(-.181,.049),l(-.082,-.115),l(-.132,-.181),l(-.345,-.049),l(.049,-.147),l(.033,-.165),l(.099,-.049),l(.115,-.082),l(0,-.083),l(.114,0),l(.066,-.131),l(-.05,-.164),l(-.147,-.099),l(-.197,-.247),l(.131,-.165),l(.033,-.164),l(0,-.083),l(.065,-.115),l(-.049,-.115),l(-.147,.033),l(-.165,-.033),l(-.147,-.099),l(-.099,-.099),l(-.279,-.099),l(-.132,-.131),l(-.542,-.115),l(-.247,.049),l(-.099,-.049),l(-.131,-.049),l(-.23,.083),l(-.147,.099),l(-.165,0),l(-.279,.016),l(-.214,.197),l(-.197,0),l(-.164,-.148),l(-.065,-.148),l(.017,-.099),l(.164,-.099),l(0,-.115),l(-.147,-.017),l(-.296,-.065),l(-.312,-.049),l(-.361,.049),l(-.214,.065),l(-.197,.033),l(-.082,-.148),l(-.132,-.148),l(-.312,-.033),l(-.181,-.016),l(-.197,.131),l(-.229,-.066),l(-.165,-.147),l(.061,-.042),l(.015,-.117),l(.044,-.087),l(-.088,-.233),l(.015,-.189),l(-.131,-.117),l(.059,-.087),l(-.16,-.043),l(-.146,-.102),l(-.029,-.16),l(-.131,-.058),l(-.116,-.102),l(.043,-.073),l(.059,-.087),l(-.073,-.044),l(-.087,-.014),l(-.131,-.073),l(-.146,.015),l(-.204,.059),l(.044,-.102),l(.102,-.073),l(.073,-.087),l(-.029,-.117),l(.072,-.131),l(-.131,-.087),l(.103,-.029),l(.087,-.015),l(.102,-.073),l(.015,-.087),l(.029,-.116),l(.015,-.087),l(-.204,-.058),l(-.087,-.073),l(-.204,-.087),l(-.232,-.073),l(0,-.117),l(.015,-.116),l(-.37,.004),l(-.081,-.106),l(.116,-.058),L(461.402,72),l(.029,-.117),l(.131,0),l(.087,-.116),l(.059,-.102),l(.16,-.058),l(.262,-.043),l(.175,-.073),l(-.059,-.059),l(-.175,-.043),l(-.043,-.146),l(-.015,-.087),l(0,-.073),l(-.088,-.073),l(-.203,-.087),l(-.175,-.233),l(0,-.175),l(.175,-.131),l(-.029,-.16),l(-.073,-.189),l(-.131,-.437),l(-.029,-.16),l(.088,-.16),l(.204,-.131),l(.319,-.131),l(.219,-.204),l(.175,-.277),l(.058,-.131),l(.088,-.043),l(.116,0),l(.189,0),l(.175,-.044),l(.043,-.174),l(-.16,-.131),l(-.145,-.053),l(-.089,-.13),l(-.17,-.038),l(.1,-.253),l(.339,-.038),l(.153,.165),l(.229,.063),l(.188,-.088),l(-.094,-.139),l(.301,-.154),l(.485,.199),l(.296,-.062),l(.312,-.338),l(.311,-.185),l(.75,.106),l(.781,.275),l(.439,0),l(.363,-.154),l(-.386,-.399),l(-.59,-.323),l(-.393,-.03),l(-1.204,.08),l(-.616,-.091),l(-.271,-.108),l(-.299,-.309),l(.258,-.434),l(-.065,-.201),l(-.199,.044),l(.174,-.285),l(1.946,-1.145),l(1.983,-1.195),l(1.385,-.758),l(.591,-.536),l(.43,-.536),l(.105,-.409),l(-.161,-.346),l(-.436,-.392),l(-.703,-.265),l(-1.357,-.499),l(-.439,-.33),l(.327,-.191),l(.542,-.415),l(.057,-.254),l(-.151,-.253),l(-1.286,-1.395),l(-.37,-.509),l(.029,-.37),l(.187,-.403),l(.44,-.535),l(.196,-.356),l(-.772,-1.195),l(-1.402,-1.394),l(.328,-.296),l(1.303,-.777),l(.421,-.364),l(-.543,-.392),l(-.964,-.506),l(-.872,-.194),l(-.563,-.212),l(-.116,-.529),l(.258,-.465),l(.024,-.283),l(.689,-.303),l(1.013,-.672),l(1.023,-.49),l(.77,-.121),l(.824,-.021),l(.514,-.204),l(.404,-.288),l(.617,-.051),l(1.002,-.254),l(.643,-.237),l(.01,.151),l(.255,.386),l(.358,.284),l(.543,.2),l(.919,.082),l(.602,.1),l(.078,.602),l(.695,-.319),l(.421,.049),l(1.083,.048),l(.875,.015),l(.522,.032),l(1.116,-.002),l(1.293,.281),l(2.728,.512),l(.984,.364),l(1.595,.86),l(.583,.214),l(1.48,.246),l(1.296,.212),l(2.018,.623),l(.328,.279),l(-.051,.444),l(.147,.295),l(.426,.294),l(.104,.294),l(-.24,.344),l(-.69,.491),l(-1.092,.54),l(-.816,.262),l(-1.75,.36),l(-.907,.083),l(-1.631,-.013),l(-1.391,-.192),l(-2.038,-.175),l(-1.63,-.192),l(-1.342,-.339),l(-2.256,-.485),l(-1.114,-.112),l(-.476,-.048),l(-.621,-.473),l(-.371,-.163),l(-.771,-.13),l(-.943,.117),l(.307,.163),l(.149,.065),l(.73,.538),l(.482,.146),l(1.109,.601),l(.832,.291),l(.921,.161),l(.634,.242),l(.405,.453),l(-.002,.405),l(-.276,.291),l(-.684,.195),l(.086,.113),l(.208,.531),l(.771,.943),l(.093,.494),l(.155,.207),l(.438,.174),l(1.203,.078),l(.872,.125),l(.499,.619),l(.401,.095),l(1.26,.077),l(.575,.126),l(.364,.079),l(.402,-.128),l(.785,-.097),l(.243,-.302),l(-.001,-.318),l(-.387,-.397),l(-.471,-.079),l(-.455,.096),l(-.447,-.031),l(-.589,-.206),l(-.952,-.795),l(.701,-.674),l(.484,-.001),l(1.116,.479),l(1.441,.333),l(2.09,.427),l(.952,.078),l(.834,-.146),l(.723,.174),l(.261,-.224),l(.05,-.415),l(-.214,-.239),l(-.858,-.656),l(-.348,-.628),l(.285,-.323),l(.19,-.049),l(1.432,-.423),l(1.495,-.359),l(.599,-.244),l(1.133,-.717),l(.172,-.049),l(.462,.064),l(1.829,.29),l(1.41,.533),l(.341,-.001),l(.052,-.065),l(.154,-.503),l(.581,-.767),l(-.048,-.653),l(-.317,-.408),l(-.847,-.163),l(-.3,-.229),l(1.139,-1.005),l(.101,-.247),l(-.205,-.594),l(-.771,-.512),l(.069,-.315),l(.353,-.051),l(1.458,.23),l(2.025,-.12),l(.631,.132),l(.664,.611),l(.616,.445),l(.433,.461),l(-1.045,.051),l(-1.559,.085),l(-.822,.215),l(-.492,.51),l(.191,.18),l(.952,.293),l(.732,.555),l(.804,.194),l(.723,.097),l(1.268,-.133),l(1.33,-.084),l(.301,-.164),l(.257,-.491),l(.291,-.591),l(.284,-.412),l(1.232,-.2),l(1.223,-.414),l(.988,-.216),l(1.924,-.483),l(1.429,-.251),l(1.537,-.318),l(.921,-.3),l(.205,.464),l(.278,.083),l(.571,-.117),l(.487,-.266),l(.148,-.465),l(.386,-.167),l(.718,-.135),l(.859,.065),l(-.18,.399),l(-.058,.597),l(-.858,.084),l(-.178,.149),l(.002,.215),l(.687,.197),l(.507,-.083),l(1.169,-.167),l(.436,-.001),l(.161,.198),l(.23,.049),l(.278,-.133),l(.264,-.216),l(.29,-.431),l(.464,-.183),l(.861,-.118),l(1.049,-.068),l(.768,.032),l(1.075,.23),l(.755,-.018),l(.36,-.083),l(.963,-.467),l(1,-.285),l(.803,-.052),l(.952,.182),l(.326,.166),l(-.631,.45),l(.129,.232),l(.217,.099),l(.632,.131),l(.579,-.018),l(.288,-.232),l(.074,-.398),l(.342,-.084),l(.962,.065),l(.543,-.184),l(.395,-.316),l(.115,-.417),l(-1.37,-1.033),l(.405,-.168),l(.66,-.37),l(.403,-.068),l(.609,.016),l(2.171,.063),l(1.272,.199),l(1.241,.149),l(1.135,.199),l(2.111,.515),l(1.071,.098),l(1.712,.414),l(1.02,.248),l(1.305,.53),l(1.455,.611),l(.864,.379),l(.376,.049),l(.229,-.1),l(1.145,-1.047),l(.236,-.3),l(-.927,.035),l(-.4,-.049),l(-.564,-.232),l(-.365,-.433),l(.027,-.652),l(-.727,-.283),l(-1.987,-.147),l(-.19,-.268),l(.064,-.168),l(.305,-.303),l(.693,-.255),l(.236,-.153),l(.085,-.187),l(-.052,-.833),l(-.251,-.238),l(-1.135,-.066),l(-.232,-.29),l(.328,-.532),l(.359,-.241),l(.391,-.035),l(1.482,-.416),l(1.098,-.485),l(.521,-.416),l(.581,-.608),l(.544,-1.22),l(.637,-.421),l(.374,.069),l(1.562,.155),l(1.613,-.125),l(1.605,-.091),l(.695,.069),l(1.066,-.055),l(.574,.122),l(.309,.279),l(-.018,.332),l(-.423,.836),l(-.348,.348),l(-1.334,.833),l(-.223,.345),l(.752,.342),l(.931,.667),l(.277,.342),l(.21,.818),l(-.174,.222),l(-.575,.375),l(.254,1.179),l(-.058,1.305),l(.263,.583),l(.45,.381),l(1.027,.264),l(.19,.166),l(-.001,.133),l(-.485,.481),l(-.417,.826),l(-.333,.33),l(-.784,.462),l(-1.232,.625),l(-.63,.198),l(-.55,.263),l(.321,.522),l(-.433,.115),L(558,52.195),l(-1.599,-.372),l(-.731,-.08),l(-.97,.034),l(-.601,.115),l(.195,.31),l(.583,.276),l(.738,.21),l(1.569,.208),l(1.133,.079),l(.613,-.05),l(1.188,.144),l(.922,-.034),l(.472,-.358),l(.303,-.358),l(1.352,-.328),l(1.166,-.492),l(.268,-.278),l(.386,-.606),l(.818,-.313),l(.864,-.626),l(.064,-.362),l(-.225,-.561),l(-.609,-.545),l(.244,-.548),l(.237,-.1),l(.677,-.151),l(1.38,-.152),l(1.757,-.003),l(.74,.231),l(.842,.463),l(.151,.778),l(-.34,1.023),l(.302,.279),l(.92,.212),l(1.298,.047),l(.864,-.149),l(.129,-.296),l(-.514,-.18),l(-.797,-.18),l(-.571,.034),l(-.457,-.098),l(.068,-.379),l(1.03,-.382),l(.065,-.249),l(-.218,-.148),l(-.166,-.331),l(-.441,-.763),l(-.511,-.266),l(-.836,-.098),l(-1.093,-.231),l(-.801,-.116),l(-1.288,-.165),l(-.91,.186),l(-.638,.101),l(-1.297,-.181),l(-.896,.019),l(-.015,-.267),l(-.564,-1.071),l(.305,-.657),l(.736,-.697),l(.282,-.46),l(-.134,-.221),l(-1.092,-1.042),l(-.949,-.514),l(-.12,-.189),l(.833,-.554),l(1.213,-.106),l(.998,-.262),l(.744,-.348),l(.172,-.226),l(.169,-.644),l(-.13,-.663),l(.23,.069),l(.64,.051),l(.466,.086),l(.108,.471),l(-.186,.54),l(-.636,.608),l(-.167,.554),l(.14,.448),l(.373,.274),l(.485,.274),l(1.384,.134),l(1.574,.169),l(1.632,.083),l(.819,.409),l(.321,.017),l(.799,-.036),l(-.527,-.89),l(-.521,-.274),l(-1.893,-.1),l(-.931,-.067),l(-.576,-.154),l(-.609,-.448),l(.275,-.329),l(1.374,-.054),l(.444,.172),l(1.145,.084),l(.747,-.157),l(-.09,-.728),l(.408,-.088),l(.84,-.105),l(1.278,-.02),l(1.067,.207),l(1.413,.379),l(1.088,.535),l(1.326,.343),l(.547,.085),l(1.822,.014),l(.727,-.174),l(.138,.345),l(-.781,.38),l(-.696,.259),l(-.248,.771),l(-.129,.972),l(.333,.136),l(.68,-.785),l(.387,-.292),l(.285,.051),l(.604,.528),l(-.088,.749),l(.743,-.205),l(.681,-.273),l(-.044,-.306),l(-.191,-.119),l(-.147,-.358),l(-.748,-.821),l(.188,-.223),l(.686,-.759),l(-.797,-.448),l(-.772,-.258),l(-.93,-.241),l(-.257,-.382),l(-.655,-.051),l(-.979,-.242),l(-1.34,-.207),l(-.307,-.296),l(.062,-.577),l(-.096,-.386),l(-.811,-.667),l(.081,-.247),l(.266,-.16),l(.484,-.125),l(2.31,-.11),l(2.54,-.022),l(2.125,-.128),l(1.421,-.162),l(.475,.317),l(.382,.052),l(.844,-.267),l(1.056,-.286),l(1.413,-.109),l(.589,.194),l(-.957,.338),l(-.451,.407),l(1.737,-.233),l(.521,-.107),l(.955,-.374),l(.27,-.284),l(-.334,-.444),l(-.326,-.177),l(-.925,-.266),l(-.365,-.303),l(-.002,-.232),l(.324,-.539),l(1.176,-.397),l(.966,-.22),l(3.028,-.903),l(.889,-.094),l(.248,-.036),l(.522,-.076),l(1.899,-.096),l(1.663,-.114),l(2.302,-.244),l(2.048,-.263),l(1.595,-.43),l(.855,-.243),l(1.763,.034),l(1.065,-.002),l(.383,.185),l(-.351,.409),l(1.504,.108),l(1.018,-.039),l(1.261,-.188),l(1.345,-.225),l(.95,-.039),l(.982,.166),l(.687,.073),l(.693,-.206),l(.12,-.335),l(-.133,-.167),l(.466,-.337),l(.942,-.077),l(.939,.036),l(1.243,-.377),l(-.618,-.506),l(.122,-.34),l(1.165,-.438),l(1.554,-.383),l(2.23,-.406),l(1.229,-.077),l(.993,.056),l(1.486,-.003),l(.86,.265),l(.045,.266),l(-1.528,.401),l(-.66,.342),l(.488,.15),l(1.83,-.117),l(1.588,.148),l(2.039,-.079),l(.177,.113),l(-.375,.283),l(-1.187,.453),l(-.296,.3),l(1.971,-.004),l(.833,-.02),l(.234,.093),l(1.052,-.545),l(1.366,-.002),l(1.771,-.097),l(.631,.13),l(1.35,-.021),l(1.954,.165),l(1.4,.259),l(1.181,.427),l(.52,.445),l(.726,-.001),l(.854,-.076),l(.422,.5),l(-1.354,.832),l(.241,.128),l(.896,.365),l(-2.329,.859),l(-1.035,.235),l(-1.166,.11),l(-3.404,1.061),l(-3.018,.965),l(-.793,.285),l(-2.388,.375),l(-2.35,.586),l(-2.065,1.126),l(.715,.017),l(1.081,-.247),l(.922,-.458),l(1.663,-.161),l(1.231,-.02),l(2.101,-.268),l(1.879,-.286),l(.879,-.107),l(1.004,-.284),l(-.094,-.389),l(-.492,-.123),l(-.034,-.071),l(.281,-.249),l(.581,-.214),l(.873,.211),l(.603,.389),l(.621,.052),l(.593,.193),l(.737,.052),l(.853,-.055),l(1.155,-.268),l(.499,.07),l(.192,.3),l(.009,.512),l(.522,.404),l(1.422,-.778),l(1.66,-.021),l(1.506,-.145),l(2.354,.014),l(1.919,.155),l(.854,.034),l(1.204,.033),l(-.271,.74),l(.354,.333),l(2.043,.154),l(.848,.121),l(.698,.069),l(1.035,.103),l(2.49,-.145),l(1.209,-.02),l(1.42,.348),l(1.405,-.932),l(-.161,-.352),l(-.038,-.229),l(-.034,-.105),l(1.806,-.48),l(.521,-.019),l(.802,.104),l(1.148,.298),l(.851,.281),l(1.711,.032),l(1.354,-.073),l(1.384,.033),l(1.323,.431),l(.409,.181),l(.058,.386),l(-.52,.088),l(-.268,.036),l(-1.905,.406),l(-2.438,.737),l(-.233,.227),l(.253,.069),l(1.033,.067),l(.957,.016),l(.659,.155),l(.659,.293),l(1.014,.396),l(.583,.172),l(.78,.481),l(1.27,.805),l(1.814,.801),l(1.351,.305),l(.612,-.018),l(.795,-.394),l(.843,-.72),l(1.093,-1.051),l(.601,-.329),l(.29,.017),l(.236,.465),l(.772,.308),l(1.346,.29),l(1.105,.135),l(.848,-.087),l(1.973,-.468),l(.778,-.07),l(.813,.067),l(1.196,.239),l(1.921,.734),l(.315,-.052),l(.186,-.069),l(.491,-.258),l(.221,-.258),l(-.137,-.051),l(.013,-.189),l(.726,-.312),l(.509,-.018),l(.5,.257),l(.575,.188),l(1.302,.032),l(.181,-.5),l(-.194,-.466),l(.15,-.363),l(.093,-.521),l(-1.131,.159),l(-.643,.001),l(-.179,-.104),l(.442,-.296),l(.318,-.087),l(.986,-.089),l(1.021,-.02),l(.832,-.141),l(1.566,-.648),l(.254,0),l(1.76,.241),l(1.561,.137),l(2.036,.188),l(.997,.068),l(.654,.103),l(2.307,.065),l(-1.732,.628),l(.865,.051),l(1.011,-.089),l(.335,.138),l(-.305,.381),l(-.926,.192),l(-.846,.261),l(-.177,.293),l(.664,.033),l(.52,-.122),l(.916,-.14),l(.978,-.33),l(1.62,-.799),l(2.766,.012),l(1.196,.067),l(.903,.172),l(.946,.137),l(.205,.19),l(.221,.104),l(-2.247,.59),l(.559,.137),l(1.674,.289),l(2.174,.202),l(.946,.204),l(.801,.375),l(.367,.427),l(.564,.357),l(.522,.152),l(1.459,-.037),l(1.364,-.105),l(1.138,-.139),l(2.518,-.329),l(2.208,-.107),l(3.008,.131),l(1.515,.134),l(.734,.118),l(1.168,.424),l(.655,.169),l(.525,.338),l(.361,.39),l(-.123,.491),l(-.286,.521),l(.509,.25),l(.764,.065),l(.835,.015),l(.643,.083),l(-.017,.685),l(.419,.416),l(.686,-.168),l(.545,-.435),l(1.211,-.387),l(.348,-.067),l(.35,.049),l(1.696,-.02),l(1.521,-.288),l(.736,.032),l(.588,.434),l(.707,.116),l(1.541,.014),l(2.176,.062),l(.869,-.118),l(1.378,-.504),l(.406,.2),l(.93,.533),l(.396,.216),l(1.095,.265),l(.875,.332),l(.282,.398),l(.612,.148),l(1.556,-.136),l(1.653,-.319),l(.16,-.25),l(-.248,-.333),l(-.805,-.833),l(-.833,-.115),l(.4,-.336),l(.479,-.571),l(1.89,.098),l(1.214,.082),l(1.135,.065),l(1.221,.166),l(.222,.318),l(1.396,-.153),l(2.084,-.054),l(2.304,.013),l(1.292,.148),l(.786,.199),l(1.185,.199),l(1.391,.098),l(.751,.182),l(1.302,.332),l(.747,.065),l(.703,.182),l(1.145,.505),l(0,2.126),l(0,2.222),l(0,2.222),l(0,1.292),l(0,.157),l(0,.576),l(0,.219),l(-1.083,.371),l(-.651,.03),l(-.645,.37),l(-.56,.065),l(-1.044,.065),l(-.355,-.079),l(-.928,-.052),l(-.118,-.343),l(-.271,-.211),l(-.501,.027),l(.241,-.185),l(-.938,.324),l(-.846,.02),l(-.337,-.211),l(-.478,-.079),l(.424,.501),l(-.569,.29),l(.32,.103),l(.942,.205),l(.634,-.36),l(.395,.041),l(.335,.079),l(0,.477),l(.248,.206),l(.76,.269),l(1.059,-.228),l(-.439,.322),l(.741,-.243),l(.065,.336),l(.247,.206),l(.187,.363),l(.068,.189),l(-.722,.522),l(.593,-.064),l(.349,.172),l(.473,.503),l(.501,.157),l(.145,.251),l(-.162,.456),l(.792,-.111),l(-.125,.393),l(.023,.25),l(-.43,.299),l(-.691,.205),l(-.635,-.046),l(-.448,-.14),l(-1.243,-.154),l(-.889,-.077),l(-.347,-.14),l(.123,-.267),l(-.493,-.046),l(-.304,.032),l(-.559,.55),l(-.069,.11),l(-3.06,.913),l(-1.155,.174),l(-.245,0),l(-.43,.203),l(-.219,.188),l(-.719,.22),l(-.991,.033),l(-.308,.11),l(-.48,.405),l(-.462,.203),l(-.946,.033),l(-.854,.622),l(-.24,.279),l(-1.67,.452),l(-.392,.449),l(-1.229,.25),l(-.406,.14),l(-.151,.293),l(.01,.292),l(-.473,.292),l(-.406,.016),l(-.586,-.306),l(-.183,-.262),l(-.169,-.37),l(-.67,-.308),l(-1.074,-.044),l(-1.021,.048),l(-1.159,.172),l(-1.301,.188),l(-.523,.217),l(-1.333,.756),l(-.536,.277),l(-.184,-.138),l(.575,-1.293),l(-.55,.094),l(-.392,-.097),l(-.811,.531),l(-.67,.186),l(-.401,.155),l(-.114,.506),l(-.66,.154),l(-.317,-.168),l(-.253,-.49),l(-.483,-.261),l(-1.024,.636),l(.261,-.204),l(-.557,.062),l(-.283,.092),l(-.628,.522),l(-.141,.261),l(.126,.229),l(.344,.152),l(-.932,.521),l(-.182,.199),l(.342,.167),l(-.647,.352),l(-.88,.55),l(-.626,.503),l(-.298,.35),l(-.01,.531),l(.421,.317),l(.477,.09),l(1.382,-.048),l(.562,.166),l(.11,.167),l(-.436,.394),l(-.752,.455),l(-.181,.302),l(.224,.512),l(.292,.452),l(.786,.089),l(.165,.391),l(-.014,.616),l(-.349,.361),l(-.528,.061),l(-.481,-.209),l(-.017,-.21),l(.388,-.527),l(-.444,-.014),l(-.454,.242),l(-1.014,.843),l(-.56,.675),l(-.237,.599),l(.321,.672),l(.647,.311),l(.154,.237),l(-.294,.387),l(-.688,.313),l(-.956,.031),l(-.664,-.088),l(-.344,.001),l(-.619,.179),l(-.837,.476),l(-.214,.149),l(-.525,.504),l(-.137,.341),l(.111,.281),l(.492,.398),l(.038,.221),l(-.056,.133),l(-.679,.238),l(-.604,.016),L(753.44,82.4),l(-.727,.296),l(-.065,.251),l(.067,.28),l(-.161,.854),l(-.293,.412),l(-.8,.78),l(-1.53,.971),l(-.854,.5),l(-.285,.103),l(-.295,-.614),l(-.198,-.821),l(-.25,-.69),l(-.064,-.794),l(-.351,-.75),l(-.305,-.383),l(-.214,-.915),l(-.514,-1.36),l(-.008,-.578),l(-.154,-.563),l(-.017,-.327),l(-.105,-.193),l(-.262,-.817),l(-.026,-.792),l(.116,-.808),l(.271,-1.396),l(.167,-.226),l(1.185,-.86),l(.716,-.424),l(.57,-.695),l(.14,-.227),l(-.085,-.318),l(-.139,-.166),l(1.632,-.367),l(1.001,-.305),l(.811,-.32),l(1.729,-.884),l(.641,-.412),l(.431,-.428),l(.14,-.335),l(1.784,-.889),l(.872,-.445),l(1.535,-.861),l(.368,-.293),l(.26,-.433),l(1.252,-.435),l(2.106,-.514),l(.257,-.434),l(.773,-.528),l(.086,-.233),l(-.568,-.216),l(.814,-.904),l(-.036,-.483),l(.183,-.391),l(.598,-.204),l(1.729,-.082),l(.513,-.063),l(-.485,-.328),l(-2.065,-.215),l(-.71,.095),l(-1.062,.174),l(-.777,.189),l(.042,.328),l(-.664,.923),l(.125,.202),l(-.04,.14),l(-.662,.11),l(-.479,.11),l(-1.555,.718),l(-1.979,1.042),l(-1.169,.342),l(-.249,-.062),l(.156,-.325),l(.352,-.465),l(-.933,-.076),l(-.16,-.263),l(.252,-.451),l(.442,-.467),l(.207,-.328),l(-.069,-.202),l(-.339,-.031),l(-1.136,.454),l(-.496,.032),l(-.277,-.358),l(-.589,-.17),l(-1.606,.144),l(-1.312,.111),l(-.956,.08),l(-.606,.157),l(-.894,.359),l(-.093,.436),l(.082,.186),l(-1.262,.53),l(-.408,.233),l(.149,.495),l(-1.294,.357),l(-1.019,.434),l(-.84,.479),l(-.496,.461),l(-.332,.46),l(.004,.383),l(.527,.213),l(1.269,.043),l(.278,.275),l(.062,.122),l(-1.152,.139),l(-1.028,.262),l(-1.045,-.059),l(-.698,-.136),l(-.382,.031),l(-.311,.107),l(-.721,.398),l(-.695,-.35),l(-1.112,.383),l(-.747,.139),l(-.487,-.09),l(-.284,-.137),l(.108,-.29),l(.748,-.124),l(.868,-.124),l(.164,-.046),l(-.741,-.64),L(736.444,68),l(-1.06,.017),l(-.854,.155),l(-.353,-.061),l(-.868,-.458),l(-.775,-.029),l(-.745,.047),l(-.704,.246),l(.042,.398),l(-.26,.229),l(-.477,.215),l(-.695,-.243),l(-.408,-.122),l(-1.26,.063),l(-.784,.093),l(-.651,-.075),l(-.887,-.136),l(-.563,.078),l(-.067,.122),l(-.147,.474),l(-.677,.017),l(-.311,-.137),l(-.038,-.382),l(-.203,-.259),l(-1.241,.094),l(-1.014,-.059),l(-1.257,.033),l(-1.158,.063),l(-.836,-.029),l(-.18,.016),l(-1.085,.292),l(-.964,.444),l(-.74,.474),l(-.536,.504),l(-.789,.245),l(-.904,.336),l(-.194,.152),l(-1.047,1.17),l(-1.634,.684),l(-.949,.471),l(-1.157,.711),l(-1.653,1.253),l(-.828,.572),l(-1.573,.873),l(-.893,.376),l(-1.889,.871),l(-.632,.388),l(-.203,.298),l(.018,.357),l(.428,.281),l(.485,.043),l(.918,.013),l(1.046,-.15),l(.656,.043),l(-.329,1.261),l(.016,.415),l(.303,.103),l(.63,-.09),l(.601,-.371),l(.761,.117),l(-.127,.148),L(705.293,81),l(-.112,.222),l(.373,.073),l(1.645,-.018),l(.566,-.238),l(.39,-.519),l(.017,-.638),l(.763,.014),l(.647,-.001),l(.726,.014),l(.951,.265),l(.658,.354),l(.486,.591),l(.847,.575),l(.426,.176),l(.506,.324),l(-.07,.148),l(-.581,.355),l(.453,.221),l(.13,.309),l(-.336,.723),l(.491,.117),l(.215,.235),l(-.291,.515),l(-.348,.397),l(-.532,.559),l(-.724,1.364),l(-.181,.688),l(.057,.219),l(.24,.701),l(-.188,.917),l(-.098,.741),l(-.403,1.408),l(-.146,.493),l(-1.928,1.538),l(-.371,.435),l(-.217,.65),l(-.587,.42),l(-.741,.579),l(-.241,.361),l(-.574,.981),l(-.587,.606),l(-.941,.778),l(-1.784,1.512),l(-.464,.474),l(-.235,.458),l(-.323,.33),l(-.758,.388),l(-.618,.416),l(-.574,.702),l(-.431,.458),l(-.875,.673),l(-.955,.487),l(-1.838,.475),l(-.798,.244),l(-.278,-.427),l(-.519,-.085),l(-.243,.043),l(-.337,-.185),l(-.337,-.513),l(-.663,.272),l(-.464,.101),l(.424,-.586),l(-.624,.173),l(-.506,.486),l(-.649,.543),l(-1.326,1.001),l(-.072,.049),l(-.167,-.393),l(-.298,-.439),l(.111,-.058),l(1.252,-.462),l(.511,-.43),l(.156,-.329),l(-.112,-.299),l(.097,-.128),l(.025,-.385),l(.006,-.613),l(-.062,-.656),l(-.332,-.897),l(.048,-.557),l(1.664,-.982),l(.396,.041),l(.685,.24),l(.679,.225),l(.547,.098),l(.47,-.347),l(.551,-.69),l(.329,-.432),l(.627,-1.08),l(.538,-1.066),l(.278,-.893),l(.291,-.707),l(.66,-.393),l(.566,-.407),l(-.017,-.504),l(-.116,-.389),l(-.064,-.259),l(-.246,-.114),l(-.902,.034),l(-1.181,.208),l(-1.357,.31),l(-.953,.308),l(-.604,.22),l(-1.657,.052),l(-.649,.018),l(-.68,.033),l(-.261,-.446),l(-.44,-1.283),l(-.297,-.866),l(-.205,-.144),l(-2.659,-.839),l(-1.523,-.253),l(-1.247,-.341),l(-.507,-.2),l(-.436,-.389),l(-.927,-1.903),l(-.94,-1.588),l(-1.087,-2.384),l(-.742,-.952),l(-.763,-.467),l(-.539,-.026),l(-1.386,.125),l(-.683,-.188),l(-1.037,-.481),l(-1.148,-.215),l(-.917,.049),l(-1.203,.109),l(-.836,.123),l(-1.854,.143),l(-.602,.136),l(-.478,.165),l(-1.193,.787),l(-.375,.282),l(-.119,.25),l(.822,-.078),l(.558,.026),l(.465,.306),l(.107,.249),l(-.167,.794),l(-1.371,.608),l(-.599,.545),l(-.667,.779),l(-.416,.543),l(-.422,.426),l(-.103,.249),l(.062,.146),l(.35,.348),l(.056,.306),l(-.123,.233),l(-.779,.339),l(-2.44,.752),l(-.438,.089),l(-.343,.016),l(-1.126,-.574),l(-.452,-.172),l(-.046,-.018),l(-.431,-.168),l(-.622,.018),l(-1.228,.297),l(-.86,-.169),l(-.34,-.129),l(-.751,-.506),l(-.74,-.156),l(-.609,.047),l(-.333,.002),l(-1.165,.487),l(-.755,.498),l(-.447,.394),l(-.604,.264),l(-.526,.163),l(-1.147,.136),l(-.867,.106),l(-.532,.075),l(-1.018,.063),l(-1.602,.11),l(-.739,-.039),l(-.984,-.082),l(-.905,-.241),l(-1.318,-.254),l(-.812,-.373),l(-1.132,-.313),l(-.623,-.331),l(-1.333,-.75),l(-.769,-.229),l(-1.423,-.022),l(-1.172,-.037),l(-.796,.077),l(-2.48,.538),l(-.673,-.113),l(-1.643,-.531),l(-.421,-.333),l(-.408,-.451),l(-.182,-.481),l(-.004,-.541),l(-.145,-.204),l(-.767,-.143),l(-.989,-.317),l(-.702,-.231),l(-1.748,-.328),l(-1.036,-.185),l(-1.028,-.098),l(-.84,-.201),l(-1.269,.96),l(-.905,.839),l(-.098,.293),l(.409,.86),l(.396,.304),l(.116,.204),l(-.163,.526),l(-.744,.572),l(-.31,.162),l(-.755,.28),l(-.562,.018),l(-.576,-.186),l(-.312,-.114),l(-.875,-.068),l(-.85,.004),l(-.719,-.083),l(-1.458,.008),l(-.699,-.113),l(-.393,-.406),l(-.694,-.755),l(-.831,-.083),l(-1.842,-.122),l(-.932,-.156),l(-.953,-.097),l(-.84,.18),l(-1.512,.476),l(-1.143,.341),l(-.787,.398),l(-.971,.692),l(-.017,.012),l(-.727,.381),l(-.603,.148),l(-1.387,.08),l(-.599,.207),l(-.799,.425),l(-.154,.044),l(-.244,.074),l(-.569,.003),l(-.228,.014),l(-.064,-.145),l(-.589,0),l(-.294,-.478),l(-.441,-.331),l(.073,-.331),l(-.625,.184),l(-.478,.368),l(-.993,-.074),l(-.882,-.073),l(-.662,-.699),l(-.588,-.552),l(-.956,-.147),l(-.331,-.625),l(-.772,-.588),l(-.698,-.441),l(-.993,.037),l(-.771,.221),l(-.993,.221),l(-.992,0),l(-.589,0),l(-.184,-.184),l(-.258,-.257),l(-.478,0),l(0,-.368),l(-.367,-.331),l(-.92,0),l(-.367,.515),l(-.331,.257),l(-.515,.257),l(-1.104,-1.434),l(-.846,-.882),l(-1.69,-2.133),l(-1.066,-1.029),l(-1.287,-.772),l(-.809,-.294),l(-1.104,-.588),l(.11,-.368),l(.515,-.11),l(0,-.441),l(-.809,.074),l(-.515,.22),l(-.772,.221),l(-.956,.515),l(-1.103,.257),l(-.772,.441),l(-.294,.294),l(-.552,-.184),l(-.441,-.037),l(-.771,.073),l(-.441,.11),l(-.331,-.184),l(.331,-.441),l(.441,-.184),l(.146,-.294),l(-.367,0),l(-.441,.221),l(-.478,-.11),l(-.405,-.294),l(-.478,-.037),l(-.184,.147),l(-.147,.147),l(-.367,-.221),l(-.295,-.368),l(-.294,-.11),l(-.331,.221),l(-.367,-.074),l(-.368,.147),l(-.44,-.11),l(-.295,.147),l(-.478,-.074),l(-.184,-.257),l(.33,-.037),l(-.073,-.331),l(.147,-.257),l(.11,-.331),l(-.515,-.22),l(-.147,-.221),l(.037,-.331),l(-.368,-.404),l(-.882,.037),l(-.625,.11),l(-.772,-.257),l(-.515,-.11),l(-.919,-.147),l(-.735,.037),l(-.11,.221),l(-.589,.184),l(-.515,.037),l(0,.294),l(-.367,.368),l(-.625,.074),l(-1.876,.073),l(-2.021,.405),l(-1.177,.037),l(-.625,.331),l(-.221,.331),l(-.331,-.073),l(-.588,.073),l(-1.545,.11),l(-.735,.11),l(-1.029,.037),l(-1.396,.405),l(-.368,.184),l(-.772,0),l(-.515,0),L(537.304,80),l(-.33,.074),l(-.185,.515),l(.074,.441),l(.294,.221),l(-.294,.074),l(0,.331),l(1.065,.11),l(.956,.294),l(-.11,.257),l(-.515,.073),l(-1.103,-.147),l(-.698,.184),l(-.662,.515),l(.146,.257),l(.441,.478),l(-.331,.294),l(-.588,.147),l(-.735,.368),l(-.467,.067),l(.164,.274),l(.239,0),l(.377,.137),l(-.068,.171),l(.377,.137),l(.651,.069),l(.274,.308),l(1.165,.171),l(.24,.24),l(-.138,.686),l(-.137,.309),l(-1.577,.411),l(-.959,-.034),l(-.343,-.343),l(-.24,0),l(-.171,.309),l(-.651,.343),l(-.411,-.171),l(-.754,-.137),l(-.926,-.309),l(-.274,-.548),l(-.754,-.103),l(-1.062,.103),l(-.137,.412),l(-.617,.068),l(-.651,-.411),l(-.65,-.035),l(-.823,-.068),l(-.514,.377),l(-.377,.343),l(-.274,.274),l(-.686,.171),l(-.411,-.24),l(-.686,-.137),l(-.582,-.548),l(-.72,-.068),l(.034,.24),l(.205,.48),l(-.239,.274),l(-.274,-.137),l(-.068,-.583),l(-.411,-.274),l(-.789,-.343),l(-.582,-.206),l(0,-.343),l(-.96,-.171),l(-.617,.069),l(-.788,-.035),l(-.411,-.514),l(-.411,-.069),l(-.617,.24),l(-.273,.137),l(-.651,.137),l(-.309,-.274),l(-.479,0),l(-.651,-.069),l(-.515,.309),l(-.548,.343),l(-.788,.377),l(-.549,.068),l(-.514,.171),l(-.309,.309),l(-.172,.24),L(509.58,87.5),l(-.479,.206),l(.068,.445),l(.171,.411),l(-.068,.446),l(-.411,.24),l(-.651,0),l(-.514,-.411),l(-.48,-.548),l(-.514,-.24),l(-.411,.069),l(-.103,.308),l(-.343,.549),l(-.823,.137),l(-.205,1.303),l(.343,.171),l(.239,.274),l(-.239,.206),l(-.446,.274),l(-.65,1.165),l(1.37,.343),l(.138,.377),l(-.068,.309),l(.514,.514),l(.103,-.343),l(.583,.206),l(.343,-.034),l(.514,.034),l(.515,.445),l(.479,.206),l(.343,.514),l(.96,1.131),l(-.138,.103),l(-.445,-.103),l(-.309,-.103),l(-.343,.103),l(.068,.308),l(.857,.377),l(.616,.19),l(-.167,.2),l(-.399,.28),l(-.38,.12),l(-.12,0),l(0,.14),l(0,.22),l(-.14,.08),l(-.3,-.2),l(-.34,.2),l(-.399,.26),l(-.64,.12),l(-.319,.08),l(-.26,-.08),l(-.181,-.08),l(-.1,.04),l(-.06,.16),l(.12,.26),l(-.221,.2),l(-.18,.3),l(-.18,.319),l(-.319,.42),l(-.18,.28),l(-.32,.16),l(-.34,.24),l(-.14,.32),l(.08,.2),l(.34,.2),l(.319,.04),l(.18,.3),l(.24,.04),l(.239,.34),l(.28,.419),l(-.06,.38),l(-.101,.2),l(.061,.16),l(.1,-.2),l(.1,-.34),l(.12,-.22),l(.16,-.02),l(-.141,.439),l(-.22,.36),l(.061,.4),l(.12,.1),l(-.16,.2),l(-.04,.4),l(.38,.24),l(.119,.1),l(.12,.52),l(.28,.06),l(.359,.42),l(.2,.28),l(.439,.419),l(.18,.36),l(.359,.06),l(.047,.146),l(-.292,.449),l(-.496,.284),l(-.283,.094),l(-.308,.331),l(-.165,.213),l(-.379,.047),l(-.449,-.142),l(-.591,-.094),l(0,-.308),l(-.283,-.284),l(-.118,0),l(-.095,-.118),l(-.473,-.284),l(-.142,-.189),H(504.5,0),l(-.213,.047),L(504.264,107),l(-.229,.023),l(-.126,-.189),l(-.236,-.071),l(-.236,.023),l(-.284,-.047),l(-.26,-.094),l(-.284,-.166),l(-.354,-.284),l(.118,-.307),l(.118,-.189),l(-.118,-.142),l(-.354,-.024),l(-.378,0),l(-.213,-.166),l(-.189,-.118),l(-.212,0),l(-.143,-.094),l(-.236,-.118),l(-.118,0),l(-.095,.071),l(-.142,.166),l(-.188,-.142),l(-.261,-.071),l(-.354,0),l(-.213,.071),l(-.094,.095),l(-.166,.166),l(-.283,0),l(-.261,.118),l(-.212,-.071),l(-.261,-.118),l(.048,-.118),l(.142,-.118),l(-.308,-.119),l(-.236,-.118),l(-.354,-.071),l(-.52,-.118),l(-.284,-.213),l(-.095,-.142),l(-.354,-.166),l(-.283,.047),l(-.189,0),l(-.401,-.166),l(-.544,0),l(-.426,.095),l(-.307,0),l(-.355,-.047),l(-.307,-.071),l(-.261,-.095),l(-.212,-.166),l(-.213,0),l(-.331,0),l(-.189,-.047),l(-.188,-.094),l(-.284,-.142),l(-.283,-.095),l(-.449,-.023),l(-.402,-.023),l(-.07,-.047),l(-.284,-.047),l(-.26,.166),l(-.112,.309),l(-1.421,-1.012),l(-1.188,-.842),l(-.817,-.385),l(-.62,-.084),l(-.373,-.157),l(-.509,-.5),l(-.236,-.057),l(-.338,.159),l(-.329,-.042),l(-.347,-.515),l(-.795,-.674),l(.595,-.188),l(.519,-.001),l(.445,-.073),l(.1,-.519),l(.359,-.476),L(485,97.85),l(.526,-.03),l(.516,-.131),l(-.432,-.532),l(-.654,-.273),l(-.474,-.36),l(.243,-.116),l(.367,-.03),l(.82,-.117),l(.715,-.348),l(1.244,-.436),l(-.196,-.375),l(-.076,-.058),l(-.799,.088),l(-1.312,.175),l(.012,-.126),l(.021,-.112),l(0,-.224),l(.09,-.514),l(.224,-.089),l(.357,-.022),l(.38,-.134),l(.223,-.179),l(.022,-.179),l(.269,0),l(.736,-.045),l(.805,.157),l(.335,-.134),l(0,-.156),l(.156,-.291),l(.156,-.491),l(-.066,-.067),l(-.09,-.201),l(-.045,-.179),l(-.044,-.134),l(-.179,-.067),l(-.156,-.067),l(.044,-.224),l(.045,-.179),l(.246,0),l(.312,0),l(.134,-.156),l(-.29,-.044),l(-.269,-.089),l(-.223,-.246),l(.312,-.044),l(.357,-.201),l(.156,-.067),l(.201,-.089),l(.045,-.224),l(-.09,-.179),l(-.111,-.089),l(.022,-.179),l(.089,-.111),l(-.156,-.089),l(-.201,.089),l(-.134,.044),l(-.269,0),l(-.357,-.156),l(-.111,-.224),l(-.469,-.022),l(-.291,-.089),l(-.201,-.179),l(-.357,.067),l(-.268,-.112),l(-.469,-.112),l(-.425,-.067),l(-.29,-.268),l(-.224,.067),l(-.045,.157),l(-.29,.134),l(-.224,-.112),l(-.179,-.179),l(-.402,-.044),l(-.022,-.134),l(-.201,-.179),l(0,-.134),l(-.268,-.179),l(-.111,-.156),l(-.357,.067),l(-.536,.134),l(-.269,0),l(-.312,.112),l(-.425,.112),l(-.179,-.156),l(-.179,-.022),l(-.201,.067),l(-.469,-.291),l(-.268,-.067),l(-.47,.067),l(-.268,.179),l(-.291,-.29),l(-.179,-.089),l(-.089,-.224),l(.089,-.179),l(-.089,-.246),l(-.224,-.268),l(0,-.357),l(-.402,0),l(0,-.312),l(-.38,-.022),l(-.514,.067),l(-.156,-.112),l(-.647,0),l(-.269,-.29),l(-.111,-.357),l(-.134,-.291),l(.312,-.134),l(.312,.022),l(0,-.268),l(-.312,-.156),l(-.246,-.156),l(-.134,-.201),l(-.246,-.335),l(-.312,-.134),l(-.201,-.268),l(-.514,.134),l(-.692,-.112),l(-.67,.223),l(-.536,.022),l(-.536,-.246),l(-.134,.268),l(-.179,.291),l(-.313,.156),l(-.469,-.022),l(-.357,-.089),M(527.156,37.071),l(-.59,-.14),l(-.955,-.21),l(-1.128,-.139),l(-.739,.054),l(-.959,.037),l(-.732,.143),l(-.411,-.105),l(-1.025,-.476),l(.737,-.303),l(1.21,-.429),l(.654,-.09),l(1.549,-.002),l(.135,-.357),l(-.728,-.338),l(.351,-.269),l(.419,-.144),l(.676,-.02),l(.852,-.181),l(-.25,-.161),l(-.526,-.233),l(1.539,-.895),l(.513,-.129),l(.226,.073),l(.892,.017),l(.981,-.535),l(.863,-.333),l(1.02,-.261),l(.975,-.15),l(1.305,-.113),l(1.274,.053),l(.738,-.15),l(.786,-.615),l(.273,.018),l(.873,-.132),l(1.722,.276),l(.471,-.038),l(1.93,-.321),l(.958,-.039),l(2.184,-.247),l(1.864,-.116),l(.771,-.564),l(.376,-.152),l(2.511,-.137),l(1.965,-.079),l(.471,.131),l(.442,.225),l(.154,.357),l(-.812,.47),l(-.541,.169),l(-1.346,.319),l(-2.609,.433),l(-4.329,.49),l(-2.187,.281),l(-2.122,.299),l(-1.842,.316),l(-2.102,.242),l(-.941,.203),l(-.288,.274),l(.644,.216),l(-.422,.217),l(-.943,.361),l(-.527,.037),l(-2.047,-.068),l(-.432,.18),l(-.119,.233),l(.621,.249),l(-.331,.233),l(-1.206,.448),l(-.402,-.142),l(-.752,-.087),l(-.592,.304),l(.877,.283),l(.052,.319),l(-1.094,.657),l(-.822,.284),M(517.491,38.443),l(1.041,-.37),l(.512,-.299),l(.428,-.212),l(1.426,-.021),l(1.316,-.249),l(.987,-.02),l(1.412,-.091),l(.551,.069),l(.988,.227),l(-.063,.176),l(-.463,.528),l(-.302,.158),l(-.697,.071),l(-.443,.228),l(-.233,.385),l(.006,.818),l(.445,1.039),l(.957,.826),l(.505,.308),l(.775,.307),l(1.162,.392),l(-.028,.282),l(-2.62,-.089),l(-.844,.053),l(-.917,.326),l(-.596,.086),l(-.676,-.494),l(-.382,-.034),l(-1.091,.088),l(-.673,-.102),l(-.031,-.359),l(1.347,-.362),l(.073,-.24),l(-.102,-.017),l(-.944,-.273),l(-1.442,-.411),l(-1.519,-.17),l(-.33,.156),l(-.624,.122),l(-.681,-.033),l(-.625,-.396),l(-.114,-.415),l(.229,-.312),l(.39,-.209),l(.344,-.036),l(.318,.104),l(.65,.016),l(.518,-.192),l(1.121,-.768),l(.243,-.35),l(-.322,0),l(-.981,-.243),M(.125,56.089),l(0,-.562),l(0,-.576),l(0,-.157),l(0,-1.292),V(0,51.28),l(0,-2.222),l(0,-2.12),l(2.917,.61),l(1.693,.598),l(.933,.181),l(3.819,.99),l(1.059,.395),l(.204,.149),l(.074,.214),l(.445,.429),l(.406,.789),l(-.209,.428),l(1.034,.8),l(.982,.26),l(-.02,-.18),l(.297,-.148),l(-.051,-.196),l(-.638,-.392),l(.016,-.542),l(.077,-.296),l(1.026,-.183),l(.984,.278),l(.573,.098),l(.767,.064),l(1.003,-.117),l(.933,.13),l(.93,.425),l(.694,.359),l(1.676,.684),l(.32,.081),l(.584,.179),l(.43,.211),l(.09,.13),l(-.343,.033),l(-1.026,-.096),l(-.364,.034),l(-.808,.798),l(-1.539,-.468),l(.138,.178),l(.438,.227),l(.465,.324),l(-1.177,-.111),l(-1.008,.05),l(-1.202,-.387),l(-.708,-.096),l(.135,.129),l(.289,.259),l(.084,0),l(.561,.259),l(.205,.307),l(.131,.453),l(-.056,.339),l(-.814,.05),l(-.805,.065),l(-.189,.161),l(.5,.865),l(-.115,.272),l(-1.04,-.078),l(-.397,.081),l(-1.193,-.174),l(-.264,-.352),l(-1.795,-.51),l(-.253,.273),L(9.85,55.79),l(-.276,-.161),l(-.265,-.403),l(.174,-.178),l(-.321,-.42),l(-.87,-.339),l(-.565,-.063),l(-.762,.034),l(-.858,.229),l(-1.343,.084),L(3.57,54.443),l(.059,-.325),l(-.155,-.325),l(-.618,-.487),L(1.958,53.43),l(-.45,.409),l(-.655,1.228),l(-.166,.715),l(-.562,.307),
-N(449.401,22.792),l(-1.596,-.014),l(-2.019,-.016),l(-1.739,.063),l(-.764,.061),l(-1.972,-.316),l(.812,-.456),l(.826,-.172),l(.735,-.453),l(1.148,-.588),l(1.354,.691),l(.998,.105),l(1.116,-.088),l(.9,.084),l(.704,.341),l(.865,-.323),l(.53,-.454),l(.868,-.306),l(-.311,.823),l(.086,.32),l(.851,-.001),l(.991,-.495),l(1.061,-.261),l(.803,.128),l(.559,.472),l(.705,.041),l(2.007,-.111),l(1.543,.189),l(.551,.376),l(-.507,.201),l(-2.004,.622),l(-1.623,.38),l(-1.069,.062),l(-.976,.14),l(-1.324,.366),l(-6.271,-.097),l(-.033,-.377),l(1.492,-.26),l(.702,-.677),M(430.027,22.752),l(.068,.697),l(.252,.119),l(1.694,.155),l(.221,-.377),l(.13,-.418),l(.573,-.141),l(.523,-.041),l(.949,.477),l(1.192,.771),l(.798,.235),l(.568,-.218),l(-.222,-.296),l(-.46,-.356),l(-.327,-.477),l(-.04,-.22),l(.91,-.407),l(1.001,.103),l(.485,.18),l(1.278,.018),l(.586,.179),l(-.08,.419),l(-.169,.298),l(.104,.159),l(.549,.118),l(.743,-.338),l(.44,-.1),l(.662,.396),l(.678,.335),l(.785,.156),l(.948,.117),l(1.672,.429),l(.498,.234),l(-1.305,.277),l(-1.981,.218),l(-.696,.293),l(-.731,1.144),l(-.885,.885),l(-1.243,.117),l(-.766,.535),l(-.455,.589),l(-.029,.378),l(-.786,.209),l(-.556,-.018),l(-1.593,-.355),l(-1.883,-.507),l(-1.365,-.568),l(.651,-.364),l(1.565,-.041),l(1.788,-.137),l(.944,-.386),l(-.652,-.249),l(-1.822,.139),l(-1.566,.118),l(-1.694,.042),l(-.502,-.519),l(.959,-.06),l(1.371,-.215),l(2.149,-.314),l(1.547,-.45),l(-2.525,-.405),l(-.881,-.292),l(-.589,.138),l(-1.036,.646),l(-1.069,.293),l(-.562,.059),l(-1.236,-.172),l(-.338,-.174),l(-1.05,-.368),l(-.807,-.233),l(-.698,-.41),l(1.698,-.396),l(-.817,-.571),l(-1.359,.319),l(-.467,-.078),l(-.924,-.751),l(.812,-.36),l(.516,-.021),l(1.075,-.122),l(1.017,.038),l(.577,-.061),l(1.188,-.042),M(425.42,68.82),l(-.148,-.21),l(-.629,.132),l(-.134,-.026),l(-.249,-.237),l(-.239,-.343),l(.188,-.158),l(-.143,-.291),l(-.361,.185),l(-.062,.29),l(.113,.237),l(-.147,.105),l(-.339,.316),l(-.086,.185),l(-.521,.105),l(-.533,-.131),l(-.781,.342),l(.057,.131),l(-.502,.289),l(-.498,.263),l(-1.658,.813),L(418.697,71),l(-.274,.052),l(-.271,0),l(-2.111,.209),l(-.188,-.236),l(-.33,-.131),l(-.183,.209),L(414.976,71),l(.384,-.184),l(-.935,-.236),l(-.794,-.341),l(-.574,-.052),l(-.479,-.578),l(.292,-.368),l(-.126,-.21),l(.34,.026),l(.085,.316),l(.284,-.21),l(.667,.263),l(-.244,-.197),l(.127,-.145),l(.5,-.092),l(-.479,.026),l(-.245,.105),l(-.263,-.184),l(-.111,-.132),l(.579,-.276),l(.455,-.185),l(-.482,.066),l(-.317,-.132),l(.441,-.237),l(.083,-.237),l(-.661,.475),l(-.036,-.264),l(-.265,-.171),l(.005,.211),l(.076,.171),l(-.419,.158),l(-.41,0),l(.014,-.277),l(-.15,.264),l(-.235,-.079),l(-.2,-.448),l(.658,-.449),l(.08,.436),l(.068,-.317),l(.438,.158),l(.211,-.092),l(-.166,-.106),l(.674,-.079),l(.479,-.251),l(-.611,.159),l(-.48,0),l(-.335,-.159),l(.196,-.132),l(.387,-.146),l(.196,-.471),l(-.821,-.014),l(-.546,.094),l(-.406,-.309),l(.368,-.14),l(.643,-.404),l(-.212,-.186),l(-.445,.063),l(-.399,-.062),l(-.211,-.217),l(.284,-.482),l(.619,-.265),l(-.595,-.248),l(-.225,-.374),l(.272,-.188),l(-.089,-.687),l(.106,-.094),l(.594,-.063),l(.392,-.045),l(.455,.044),l(.082,-.11),l(-.255,-.134),l(-.425,-.118),l(-.228,-.17),l(.098,-.188),l(.211,-.125),l(.575,-.064),l(.511,-.346),l(.567,.109),l(.498,-.111),l(.179,-.55),l(.835,.093),l(.668,.125),l(.571,-.252),l(-.989,-.234),l(-.266,-.314),l(.236,-.143),l(1.151,.014),l(.851,-.08),l(.538,.219),l(.06,-.473),l(.477,-.27),l(.297,-.333),l(.78,-.175),l(.438,.189),l(.138,.079),l(.5,-.476),l(.869,-.413),l(.084,-.429),l(.437,-.398),l(1.497,-.735),l(.335,-.192),l(.235,-.048),l(.481,.175),l(.335,-.001),l(.319,-.224),l(-.225,-.223),l(.141,-.128),l(.488,-.224),l(.457,-.305),l(.481,-.483),l(.245,.064),l(.676,-.017),l(-.067,-.612),l(-.471,-.112),l(.434,-.405),l(.511,-.648),l(.841,.063),l(.047,-.341),l(.096,-.228),l(.954,-.116),l(-.396,-.357),l(-.327,-.097),l(-.193,-.146),l(.164,-.245),l(.313,-.246),l(.464,.048),l(.888,-.067),l(-.543,-.522),l(.249,-.082),l(.435,-.034),l(.707,-.263),l(.592,-.067),l(.308,-.208),l(-.358,-.064),l(-.105,-.187),l(.289,-.1),l(.616,-.33),l(.557,.032),l(.351,.098),l(.434,-.264),l(.369,-.031),l(.035,-.176),l(-.421,-.321),l(.627,-.232),l(.146,-.275),l(.336,.01),l(.359,.297),l(.397,.082),l(.526,-.381),l(-.281,-.656),l(.438,.065),l(.698,-.058),l(.207,-.174),l(-.604,-.315),l(.411,-.224),l(.816,-.251),l(.093,-.257),l(.261,-.194),l(.73,-.135),l(.074,.067),l(.274,-.051),l(.102,-.067),l(.492,-.67),l(.521,.25),l(.96,-.153),l(.411,.133),l(.265,.1),l(.646,.065),l(.536,-.419),l(.747,-.84),l(.286,-.085),l(.16,.168),l(-.178,.286),l(-.182,.587),l(.791,-.454),l(.403,-.572),l(.819,-.085),l(.688,-.439),l(.437,.117),l(.665,.353),l(.567,-.643),l(.318,-.272),l(.976,.1),l(1.019,.506),l(.197,-.152),l(.479,-.595),l(.709,-.444),l(.283,-.052),l(.562,.067),l(.338,-.308),l(.469,-.291),l(.619,-.189),l(1.2,-.173),l(.984,.015),l(-1.337,.755),l(-.24,.273),l(-.107,.646),l(.42,.084),l(.691,-.579),l(1.53,-.941),l(.764,-.275),l(.028,.257),l(-.004,.905),l(.704,-.172),l(.438,-.239),l(.855,-.874),l(.959,-.104),l(.586,-.001),l(.216,.154),l(-.383,.257),l(-.335,.257),l(.074,.239),l(-.319,.41),l(.921,.118),l(.221,-.443),l(.902,-.651),l(.421,.017),l(1.682,.561),l(.667,.135),l(.935,.015),l(.649,.237),l(.1,.272),l(-1.216,.393),l(-1.148,.036),l(-2.233,-.047),l(.193,.084),l(.585,.304),l(1.058,.284),l(.383,.302),l(.728,-.052),l(.679,-.102),l(.831,.032),l(.708,.25),l(-.404,.288),l(-.514,.204),l(-.824,.021),l(-.77,.121),l(-1.023,.49),l(-1.013,.672),l(-.689,.303),l(-.001,-.2),l(.096,-.367),l(.874,-.923),l(-.044,-.268),l(-.88,-.348),l(-.672,-.114),l(-1.125,-.431),l(-.556,.003),l(-.555,.07),l(-2.004,.095),l(-.865,.374),l(-.567,.422),l(-.26,.437),l(-.079,.501),l(-.188,.5),l(-1.25,.472),l(-.582,.368),l(-.31,-.148),l(-1.288,-.492),l(-1.657,.225),l(-1.411,-.042),l(-.536,-.13),l(-.861,-.595),l(-.994,-.612),l(-.486,-.082),l(-.355,.103),l(-1.012,.656),l(-.114,-.063),l(-.41,-.031),l(-.865,.038),l(-.281,1.066),l(-.164,.449),l(-.271,.25),l(-.323,-.015),l(-.67,-.129),l(-.972,-.144),l(-1.731,-.389),l(-.168,.183),l(-.021,.663),l(-.083,.199),l(-.318,.299),l(-.695,.004),l(-.871,-.095),l(-.279,-.015),l(-.465,.167),l(-1.484,1.176),l(.05,.213),l(.171,.507),l(-.188,.345),l(-.615,.346),l(-1.325,.919),l(-.687,.442),l(-.981,.021),l(-.121,.244),l(-.06,.971),l(-.32,.598),l(-.383,.469),l(-.574,.499),l(-.495,.545),l(.339,.125),l(.381,.269),l(.252,.587),l(-.17,.176),l(-.44,.177),l(-.733,.036),l(-.932,-.027),l(-.618,.114),l(-.613,.257),l(-.617,.479),l(-.389,.492),l(-.077,.664),l(-.349,1.093),l(.65,.729),l(-.335,1.171),l(.582,.39),l(.715,.186),l(.297,.243),l(-.432,.67),l(-.941,.16),l(.571,.735),l(.26,.427),l(-.249,.346),l(-.029,.532),l(-.769,.384),l(-.414,.013),l(-.117,.423),l(-.506,.224),l(.22,.831),l(-.324,.737),l(-.41,.013),l(-.15,-.342),l(-.293,-.132),
-N(464.349,47.431),l(-.024,.283),l(-.258,.465),l(.116,.529),l(.563,.212),l(.872,.194),l(.964,.506),l(.543,.392),l(-.421,.364),l(-1.303,.777),l(-.328,.296),l(1.402,1.394),l(.772,1.195),l(-.196,.356),l(-.44,.535),l(-.187,.403),l(-.029,.37),l(.37,.509),l(1.286,1.395),l(.151,.253),l(-.057,.254),l(-.542,.415),l(-.327,.191),l(.439,.33),l(1.357,.499),l(.703,.265),l(.436,.392),l(.161,.346),l(-.105,.409),l(-.43,.536),l(-.591,.536),l(-1.385,.758),l(-1.983,1.195),l(-1.946,1.145),l(-.174,.285),l(-.935,.206),l(-1.195,.188),l(-.149,.181),l(-.506,-.217),l(-.518,.146),l(-.052,.134),l(-.688,-.07),l(-.193,-.108),l(.057,-.387),l(-.241,.527),l(-.268,.14),l(-.633,.047),l(-.328,.03),l(-.1,.267),l(-.589,-.326),l(-.29,.275),l(-.676,.064),l(-.34,.178),l(-.052,-.127),l(-.504,.108),l(-.504,.108),l(-.211,.266),l(-.311,-.152),l(-.672,.126),l(-.04,-.114),l(-.658,.215),l(-.547,.013),l(-.482,.025),l(-.487,-.253),l(-.223,-.274),l(.273,-.34),l(-.846,.017),l(-.517,.177),l(.065,-.382),l(-.446,.076),l(-.644,-.271),l(-.409,-.061),l(-.415,-.231),l(-.26,-.403),l(-.036,-.714),l(.158,-.374),l(.05,-.436),l(.09,-.234),l(-.347,-.483),l(-.431,-.375),l(.3,-.658),l(-.02,-.392),l(-.305,-.204),l(-.37,-.093),l(.062,-.299),l(.295,-.331),l(.637,-.285),l(.144,-.189),l(-.113,-.331),l(.382,-.143),l(.633,.125),l(.274,.063),l(.483,-.222),l(.303,-.427),l(.104,-.459),l(.207,-.27),l(.301,.316),l(.27,0),l(1.678,-1.114),l(1.142,-.654),l(.835,-.576),l(1.026,-.401),l(.874,.03),l(.06,-.304),l(-.13,-.144),l(-.357,-.16),l(.119,-.371),l(.146,-.387),l(-.329,-.274),l(-1.139,-.095),l(-.836,-.451),l(-.594,-.024),l(-.113,-.234),l(-.327,-.307),l(-.208,-.535),l(.5,-.8),l(-.028,-.392),l(-.405,-.685),l(-.507,-.637),l(.004,-.526),l(.062,-.413),l(-.77,-.558),l(-.508,-.229),l(-1.583,-.207),l(-1.085,-.292),l(-1.286,-.658),l(-.616,-.463),l(-.146,-.033),l(1.012,-.656),l(.355,-.103),l(.486,.082),l(.994,.612),l(.861,.595),l(.536,.13),l(1.411,.042),l(1.657,-.225),l(1.288,.492),l(.31,.148),l(.582,-.368),l(1.25,-.472),l(.188,-.5),l(.079,-.501),l(.26,-.437),l(.567,-.422),l(.865,-.374),l(2.004,-.095),l(.555,-.07),l(.556,-.003),l(1.125,.431),l(.672,.114),l(.88,.348),l(.044,.268),l(-.874,.923),l(-.096,.367),l(.001,.2),
-N(453.795,53.873),l(-.23,-.004),l(-.975,.164),l(-.447,.098),l(-.902,-.387),l(-.339,-.178),l(-.347,.114),l(-.641,.374),l(-.542,.599),l(-.309,.146),l(-.658,.018),l(-.545,.355),l(.325,.241),l(.146,.192),l(-.355,.273),l(-.907,.401),l(.317,.271),l(.385,.159),l(.33,.302),l(-.749,.367),l(-.405,.43),l(-.368,.461),l(-1.591,.669),l(-.699,.286),l(-.456,-.205),l(-.326,.08),l(-.538,.539),l(-.646,.144),l(-.663,.348),l(-.217,.284),l(-.191,.142),l(-.746,.033),l(-.221,-.031),l(.151,.535),l(-.484,.425),L(439,61.33),l(.216,.533),l(.243,.25),l(-.244,.955),l(-.498,.063),l(-.217,.204),l(.189,.757),l(-.009,.544),l(.381,.444),l(-.287,.175),l(.926,.082),l(.225,.187),l(.499,-.082),l(.652,.594),l(.428,.314),l(.86,.163),l(.198,.406),l(.32,.139),l(.014,.335),l(-.391,0),l(-.508,.323),l(-.861,.3),l(-.492,.162),l(-.521,-.012),l(-.146,-.115),l(-.805,-.115),l(-.66,-.173),l(-.634,-.069),l(-.137,.104),l(-.446,-.115),l(-.257,.3),l(.819,-.069),l(.497,.265),l(.591,.046),l(.205,.208),l(.481,.069),l(.021,-.127),l(.616,.069),l(.258,-.196),l(.297,.011),l(.481,-.104),l(.226,.081),l(.026,-.15),l(.164,0),l(.214,.15),l(-.029,.081),l(-.722,.023),l(.219,.288),l(-.792,.265),l(-.168,.288),l(-.386,.08),l(-.089,-.092),l(.042,-.161),l(-.014,-.276),l(-.258,.023),l(-.091,.46),l(-.501,.333),l(-.248,.058),l(-.36,-.069),l(-.005,.218),l(-1.418,.035),l(.156,.458),l(.513,.258),l(.066,.609),l(-.109,.33),l(-.281,.051),l(-.308,-.064),l(.038,.429),l(.29,.081),l(-.126,.268),l(.24,.228),l(-.365,.364),l(-.222,.455),l(-.041,.56),l(-.766,1.043),l(-.58,.71),l(-.165,-.062),l(-.442,-.236),l(-.614,.193),l(-1.262,-.089),l(-.106,.311),l(-.252,-.083),l(-.518,.264),l(-.295,.517),l(.356,.336),l(-.376,.374),l(-.48,-.129),l(-.173,-.037),l(-1.158,.269),l(-1.11,-.116),l(-.001,-.142),l(.19,-.078),l(-.062,-.181),l(.281,-.297),l(-.638,-.53),l(-.413,-.479),l(-.22,-.272),l(.529,-.116),l(-.082,-.312),l(.421,.077),l(.147,-.245),l(-.19,-.234),l(-.285,.013),l(-.292,-.377),l(-.527,-.221),l(-.63,-.99),l(-.286,0),l(.011,-.408),l(-.256,-.364),l(-.348,-.298),l(.221,-.484),l(.206,-.341),l(-.418,-.154),l(-.405,.102),l(-.055,-.288),l(-.412,.051),l(-.18,-1.207),l(-.225,-.131),l(.311,-.355),l(.293,.132),l(.15,.342),l(.41,-.013),l(.324,-.737),l(-.22,-.831),l(.506,-.224),l(.117,-.423),l(.414,-.013),l(.769,-.384),l(.029,-.532),l(.249,-.346),l(-.26,-.427),l(-.571,-.735),l(.941,-.16),l(.432,-.67),l(-.297,-.243),l(-.715,-.186),l(-.582,-.39),l(.335,-1.171),l(-.65,-.729),l(.349,-1.093),l(.077,-.664),l(.389,-.492),l(.617,-.479),l(.613,-.257),l(.618,-.114),l(.932,.027),l(.733,-.036),l(.44,-.177),l(.17,-.176),l(-.252,-.587),l(-.381,-.269),l(-.339,-.125),l(.495,-.545),l(.574,-.499),l(.383,-.469),l(.32,-.598),l(.06,-.971),l(.121,-.244),l(.981,-.021),l(.687,-.442),l(1.325,-.919),l(.615,-.346),l(.188,-.345),l(-.171,-.507),l(-.05,-.213),l(1.484,-1.176),l(.465,-.167),l(.279,.015),l(.871,.095),l(.695,-.004),l(.318,-.299),l(.083,-.199),l(.021,-.663),l(.168,-.183),l(1.731,.389),l(.972,.144),l(.67,.129),l(.323,.015),l(.271,-.25),l(.164,-.449),l(.281,-1.066),l(.865,-.038),l(.41,.031),l(.114,.063),l(.146,.033),l(.616,.463),l(1.286,.658),l(1.085,.292),l(1.583,.207),l(.508,.229),l(.77,.558),l(-.062,.413),l(-.004,.526),l(.507,.637),l(.405,.685),l(.028,.392),l(-.5,.8),l(.208,.535),l(.327,.307),l(.113,.234),
-N(238.107,361.753),l(.515,-.688),l(.859,0),l(1.202,-.515),l(-.171,-.858),l(-3.091,.344),l(-2.061,.515),l(-1.545,-.344),l(-.515,-.858),l(1.374,-.515),l(1.202,-.172),l(3.091,-.172),l(1.374,-.515),l(-.172,-1.03),l(.859,-.516),l(0,-1.374),l(-1.326,-1.054),l(.982,-.491),l(1.202,-.344),l(1.545,-.172),l(.858,.344),l(.858,.858),l(1.03,1.374),l(1.374,1.202),l(1.03,1.373),l(-.515,2.061),l(-1.545,.516),l(-1.545,.858),l(-3.434,.172),l(-3.435,0),M(172.686,360.379),l(3.091,-.687),l(3.262,0),l(5.495,0),l(2.919,1.202),l(-2.748,.687),l(-3.759,-.337),l(-5.169,-.35),l(-3.091,-.516),M(65.13,371.085),l(1.194,-.265),l(1.393,.133),l(.796,.464),l(-1.99,0),l(-1.393,-.332),M(277.944,379.954),l(.515,-1.202),l(2.404,-1.03),l(2.748,-.172),l(2.061,-.171),l(1.545,-.859),l(.343,-1.545),l(1.374,-.687),l(3.091,-.688),l(4.464,0),l(2.404,0),l(3.434,.688),l(.687,1.889),l(0,1.202),l(-2.061,1.201),l(-11.848,1.03),l(-11.161,.344),M(36.004,376.434),l(1.202,-.858),l(2.061,-.343),l(4.121,.515),l(4.293,1.374),l(-.887,.482),l(-2.719,.204),l(-4.293,-.515),l(-3.777,-.859),M(777.843,385.46),l(3.823,.391),l(.899,.029),l(.322,.234),l(1.202,.294),l(2.329,.088),l(2.126,-.003),l(5.218,.329),l(3.046,.348),l(1.144,-.059),l(.762,.029),l(1.411,.37),l(0,2.175),l(0,2.223),l(0,2.222),l(0,2.223),l(0,2.222),l(0,1.551),l(-.041,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.182,0),l(-.041,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.223,0),l(-2.182,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.223,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),l(-2.222,0),H(9.014,0),H(6.792,0),H(4.569,0),H(2.347,0),H(.125,0),l(0,-1.544),l(0,-2.222),l(0,-2.223),l(0,-2.222),l(0,-2.223),l(0,-2.223),l(3.941,.297),l(10.131,0),l(7.898,.516),l(6.868,.172),l(8.586,.858),l(6.353,.515),l(8.757,.172),l(4.808,-.172),l(6.525,-.172),l(2.404,.344),l(3.606,-.858),l(16.312,.344),l(4.638,-.013),l(1.143,-.467),l(-14.366,-.551),l(-9.616,-.688),l(-2.232,0),l(-3.091,-.172),l(-.858,-.171),l(-1.545,-.344),l(-.498,-.455),l(.155,-1.434),l(.687,-.858),l(1.889,-.688),l(-3.263,-.687),l(-2.232,-.344),l(-.953,-.503),l(1.589,-.521),l(-2.891,-.6),l(-3.074,-.208),l(-.104,-.261),l(2.857,-.312),l(2.748,0),l(6.525,.343),l(3.434,0),l(2.576,.344),l(4.636,-1.202),l(2.404,-.687),l(-2.748,-1.03),l(-3.778,-.858),l(-4.391,-.405),l(-2.649,-.625),l(-3.262,-.172),l(-2.919,0),l(-2.919,-.858),l(2.576,-.516),l(1.28,-.342),l(-1.28,-.517),l(-2.919,.516),H(52.66,0),l(-1.717,-.344),L(49.054,373),l(.343,-1.202),l(1.956,-.07),l(1.65,-.273),l(4.98,0),l(4.626,.493),l(3.272,.709),l(1.374,.172),l(4.465,-.858),l(4.089,.243),l(0,-.729),l(.066,-.597),l(-2.255,-.73),l(-2.93,-.075),l(-2.576,-.344),l(2.404,-.687),l(4.121,.171),l(1.717,-.343),l(3.091,-.516),l(3.09,-.343),l(5.667,-.688),l(4.465,-.343),l(3.949,-.516),l(4.464,-.515),l(2.748,.343),l(5.667,0),l(4.464,.258),l(4.121,-.515),l(7.898,.343),l(7.555,-.687),l(3.091,.172),l(1.545,-.688),l(1.545,.516),l(5.323,-.172),l(.121,-.87),l(1.758,-.293),l(1.433,.325),l(.586,.554),l(-.423,.813),l(2.364,.329),l(1.38,-.264),l(-.006,-.938),l(1.438,-.267),l(1.48,.267),l(.212,1.036),l(-1.009,.423),l(.521,.781),l(3.024,-.351),l(1.889,.343),l(3.434,.172),l(2.576,-.687),l(3.778,.086),l(4.868,.33),l(2.344,.013),l(1.449,.109),l(.693,-.53),l(-.611,-.285),l(-2.202,-.122),l(1.305,-.285),l(.041,-.408),l(-.367,-.245),l(-1.386,.123),l(-.693,.04),l(-.856,-.979),l(-2.178,-.337),l(-.676,-.193),l(-.182,-.665),l(4.056,.462),l(3.874,-.245),l(-1.224,-.489),l(-6.035,-.163),l(-.774,-.082),l(-.653,-.489),l(0,-.815),l(2.301,.105),l(.839,.67),l(5.301,-.204),l(7.253,.736),l(2.404,-.172),l(3.262,-.172),l(4.464,.172),l(3.263,.172),l(2.061,-.516),l(.687,-.687),l(1.202,0),l(.344,1.03),l(2.576,.343),l(2.404,-.343),l(.858,.515),l(3.435,.688),l(3.777,.343),l(2.061,.172),l(1.03,-.515),l(.687,-1.202),l(2.747,-.172),l(1.03,.515),l(1.717,.688),l(3.091,-.172),l(3.434,.258),l(4.121,-.344),l(4.979,-.516),l(5.495,-.858),l(3.091,-.515),l(1.202,-.688),l(0,-1.373),l(-1.374,-1.202),l(-.859,-1.545),l(-1.202,-.688),l(-.344,-1.03),l(1.202,-1.03),l(1.717,-.343),l(.858,-1.202),l(-.343,-.858),l(-.172,-1.03),l(-1.202,-.516),l(.344,-1.545),l(1.889,-.172),l(2.404,-1.374),l(1.545,-.515),l(.859,-.859),l(1.03,-.687),l(2.919,-1.202),l(3.606,-.515),l(2.404,-1.202),l(2.404,-.172),l(2.232,-1.03),l(1.545,-.343),l(.343,1.03),l(-1.374,.515),l(-1.03,.344),l(-1.202,.515),l(-.858,0),l(-1.202,0),l(-2.919,1.202),l(-1.03,.687),l(-1.717,1.374),l(-.172,1.202),l(-.687,.687),l(-1.374,-.344),l(-1.03,0),l(-1.202,.516),l(-1.202,.687),l(-1.03,.688),l(-.687,1.201),l(.515,.688),l(.687,.687),l(1.374,.344),l(1.545,0),l(.858,.515),l(.687,1.202),l(1.545,1.546),l(.687,.858),l(1.03,.687),l(.687,1.374),l(.858,1.373),l(.344,1.546),l(-.344,.858),l(-.858,1.717),l(-2.919,1.889),l(-1.202,.172),l(-1.03,.858),l(-1.717,1.03),l(-3.263,.344),l(-4.979,.858),l(-2.404,.344),l(-2.919,.687),l(-7.377,-.141),l(-4.556,-.316),l(-.773,-.401),l(-1.717,-.344),l(-1.717,-.343),l(-1.374,0),l(-.859,.515),l(.515,.858),l(2.061,.688),l(4.121,1.202),l(4.995,.04),l(1.202,.759),l(-3.278,.574),l(-5.667,-.343),l(-4.979,-.516),l(-3.097,-.285),l(-2.151,.253),l(.823,.696),l(1.164,.538),l(3.262,.172),l(2.232,0),l(1.374,.343),l(-.249,.402),l(-.782,.113),l(-2.232,.515),l(-5.151,-.171),l(-1.374,-.172),l(-2.232,-1.202),l(-2.404,0),l(.128,.917),l(2.62,1.144),l(1.03,.172),l(1.202,-.172),l(1.374,.344),l(2.404,0),l(4.98,-.516),l(3.09,.687),l(.385,.431),l(-.041,.6),l(-2.061,.172),l(-3.263,.172),l(-2.608,-.185),l(3.811,.871),l(3.656,-.238),l(1.324,.41),l(2.576,.687),l(6.869,.859),l(8.585,.858),l(10.646,1.373),l(6.525,.516),l(2.061,.858),l(.687,1.03),l(3.091,-.344),l(5.323,-1.545),l(6.525,-.687),l(2.455,-.066),l(6.474,-.105),l(9.788,-.344),l(1.889,.344),l(2.576,-1.202),l(8.414,-1.03),l(11.333,-.172),l(8.929,-.858),l(1.202,-.858),l(-1.202,-.516),l(-.271,-1.07),l(-1.184,-.338),l(-5.071,.035),l(-2.232,.172),l(-4.808,-.344),l(-3.091,0),l(0,-1.202),l(3.263,-1.545),l(3.949,-1.202),l(2.404,-.172),l(4.121,-1.03),l(9.444,-1.202),l(5.323,-.858),l(6.525,0),l(4.979,-.516),l(2.747,-2.061),l(6.039,-1.541),l(-1.23,-.52),l(-2.576,.516),l(-2.061,-.344),l(1.545,-1.03),l(1.545,-.343),l(2.48,-.249),l(.696,-.742),l(3.85,-.742),l(1.577,-.418),l(.603,-.557),l(-1.716,-.881),l(-.093,-.604),l(1.252,-.231),l(.464,.742),l(1.017,-.097),l(2.061,-.858),l(1.03,-.343),l(.858,.171),l(1.203,1.544),l(2.403,-.342),l(.242,-.91),l(.96,-.807),l(1.889,-.516),l(1.374,.516),l(-1.162,.574),l(-.139,.604),l(3.189,-.319),l(4.808,.258),l(3.263,-.172),l(1.03,.858),l(1.545,-.344),l(1.717,-.515),l(5.839,-.858),l(7.212,-1.03),l(4.292,-.858),l(2.061,0),l(2.061,1.373),l(1.718,.344),l(1.889,-.344),l(1.545,-.858),l(7.556,-.344),l(3.434,-.171),l(4.293,.171),l(6.697,.945),l(2.575,0),l(4.293,-.516),l(6.01,-.687),l(5.151,-.688),l(2.404,-.515),l(2.231,-.344),l(.615,-.959),l(1.148,-.835),l(1.671,-.095),l(.938,.965),l(1.294,.409),l(1.732,1.052),l(1.009,.139),l(1.009,-.661),l(1.322,-.174),l(.209,.522),l(-.835,.312),l(.661,.244),l(.8,.278),l(.383,-.383),l(.313,-.383),l(.312,.209),l(-.174,.348),l(0,.521),l(.592,-.174),l(1.913,-.557),l(.418,-1.704),l(5.102,-1.137),l(1.374,-.687),l(3.605,-.172),l(1.363,-.646),l(2.758,-.126),l(.21,-.27),l(-.165,-.297),l(.692,-.23),l(1.221,.165),l(.197,.593),l(.66,.231),l(2.165,-.536),l(1.265,-.223),l(-.726,-.297),l(-.561,-.264),l(.099,-.362),l(1.451,-.1),l(1.562,.215),l(.647,.28),l(.692,-.132),l(-.066,-.33),l(-.527,-.33),l(0,-.561),l(.297,-.23),l(.846,-.242),l(4.292,-.858),l(2.92,-.172),l(3.058,.115),l(2.296,1.076),l(1.316,.023),l(.741,.144),l(.023,.383),l(-.908,.096),l(-.168,.454),l(1.723,.216),l(4.892,.646),l(5.571,.453),l(1.546,.172),l(1.717,-.172),l(7.556,.688),l(5.323,0),l(.687,.687),l(.2,1.075),l(-.73,1.232),l(-.672,.439),l(-.425,1.113),l(-.73,.319),l(-.905,-.402),l(-.83,.402),l(-.73,.959),l(1.507,.457),l(.594,.045),l(.959,-.593),l(.411,.365),l(-.867,1.05),l(-1.215,.062),l(-1.717,1.374),l(0,.858),l(1.889,.688),l(2.919,0),l(1.718,-.859),l(1.889,-1.545),l(1.717,-1.717),l(1.374,-.688),l(4.121,-1.03),l(2.231,-.687),l(3.263,-.344),l(2.061,-1.03),l(1.03,-1.03),l(3.435,-1.03),l(2.403,-.687),l(2.061,-.687),l(2.061,-.172),l(6.182,-.687),l(3.778,.171),l(1.204,-.542),l(.169,-.659),l(.54,-.759),l(.49,-.101),l(.471,.776),l(.305,.775),l(4.892,-.35),l(5.838,0),l(4.979,-.172),l(3.091,.344),l(2.112,-.214),l(1.328,.085),l(1.018,.594),l(1.188,-.764),l(2.714,-1.046),l(1.866,-.226),l(.664,-.028),l(.594,-.028),l(.777,-.057),l(1.512,.311),l(1.166,-.172),l(3.606,.687),l(3.777,.344),l(1.03,0),l(1.064,.573),l(.745,.088),l(2.149,-.088),l(1.271,-.263),l(1.315,-.438),l(-.192,-.216),l(.28,-.53),l(1.447,-.131),l(.921,-.088),l(.786,.062),l(2.195,-.501),l(2.097,.501),l(.688,.687),l(.373,.435),l(1.842,-.131),l(.921,-.044),l(.985,.255),l(1.889,.688),l(2.919,.515),l(2.919,-.343),l(4.121,-.258),l(2.232,-.344),l(2.404,0),l(3.521,.315),l(.702,-.755),l(2.158,-.162),l(.863,1.133),l(4.909,.323),l(.917,-1.133),l(1.889,-.593),l(5.988,.013),l(.756,-.283),l(1.996,.108),l(-.432,-1.403),l(.054,-.809),l(1.232,-.36),l(.872,1.277),l(-.647,1.079),l(.805,.219),l(2.81,.482),l(5.262,.376),l(5.494,.344),l(2.278,.583),l(1.283,.14),l(1.396,-.167),l(2.204,.446),l(1.961,-.167),l(.719,.278),l(-.435,.431),l(-.151,.351),l(.293,.123),l(2.081,.331),l(1.078,.484),l(2.706,-.134),l(.377,.595),l(1.038,.227),l(4.808,.515),l(-.123,.536),l(.567,.236),l(2.695,-.095),l(3.214,.181),l(-.329,-.984),l(.71,-.095),l(.804,.426),l(.331,.709),l(1.135,.284),l(2.672,.519),l(2.576,-.343),l(4.017,.999),l(1.626,.495),l(1.672,.871),l(1.626,.023),l(.504,.187),l(.532,-.021),l(.754,-.047),l(.777,.047),l(.896,.589),l(.541,.118),l(.542,.07),l(.142,-.259),l(.471,0),l(1.484,-.048),l(1.416,.237),l(5.951,.535),l(.729,.516),l(1.733,.323),l(2.979,.944),l(.43,-.335),l(.551,.191),l(.454,.67),l(-.741,.215),l(-1.124,.167),l(-.216,.359),l(.168,.263),l(.55,-.048),l(-.024,.67),l(-.43,-.048),l(-.096,.287),l(-.312,.071),l(-.598,.622),l(-.526,.12),l(-.55,.287),l(-.168,.669),l(-1.603,.096),l(-1.339,-.239),l(-1.794,.359),l(-2.153,.425),l(-2.629,.764),l(1.271,1.103),l(-1.907,.212),l(-1.23,-.255),l(-.763,.212),l(-.043,.637),l(-2.374,.169),l(.136,.514),l(.924,.632),l(-.127,.763),l(-.382,.085),l(-.466,.467),l(.551,.466),l(.085,.764),l(-.764,.424),l(.637,.254),l(.763,0),l(.764,.255),l(.339,.509),l(.17,.721),l(1.284,-.187),l(.836,.907),l(2.035,.297),l(.339,.339),l(2.672,.552),l(-4.113,0),l(-2.799,.138),l(-2.332,.541),l(-1.823,-.085),l(-.806,.212),l(-1.611,.339),l(-1.326,-.32),l(-.546,.426),l(1.116,.529),l(-.503,.447),l(-.669,.195),l(-1.117,.753),l(-2.623,.642),l(.475,.391),l(2.205,-.111),l(.53,0),l(.809,.307),l(.168,.363),l(.499,.18),l(.422,.183),l(.111,.894),l(.209,.502),l(3.195,.279),l(2.874,.948),l(3.662,.801),l(5.151,1.202),l(1.456,.062),l(1.015,.17),l(-.146,.234),l(-1.67,.264),l(-.47,.264),l(1.173,.088),l(2.198,-.293),l(1.988,.166),
-E(0,0)
-};
-
-#undef N
-#undef M
-#undef L
-#undef l
-#undef E
diff --git a/perf/micro/zrusin-another.h b/perf/micro/zrusin-another.h
deleted file mode 100644
index f6e72aed4..000000000
--- a/perf/micro/zrusin-another.h
+++ /dev/null
@@ -1,668 +0,0 @@
-/* The data in this file was created by Zack Rusin and downloaded from:
-
- http://ktown.kde.org/~zrusin/examples/cairorender.tar.bz2
-
- It is included in the cairo performance test suite by his
- permission, (given in email to Carl Worth on 2006-10-23)
-*/
-point_t zrusin_another[] = {
-{107.893088734820,103.841923410053}, {106.908713734820,104.920048410053},
-{106.605078419636,105.201721390261}, {102.286079757931,107.612435141518},
-{95.848592904540,109.855345077872}, {95.820873452616,109.863161445001},
-{90.517184462013,111.170008329713}, {87.125000000000,111.625000000000},
-{82.393245921775,111.316572641568}, {77.855183975790,110.402282596173},
-{73.577390672683,108.898617908665}, {69.626442523093,106.822066623894},
-{69.373711344187,106.641023992165}, {57.717461344187,97.141023992165},
-{60.861283165549,97.153157587308}, {52.861026127481,102.679312400770},
-{43.297199733607,107.707604120505}, {38.061787185467,109.824994465236},
-{32.824736230810,111.354170438973}, {27.636335844151,112.281599723349},
-{22.546875000000,112.593750000000}, {19.478437557032,111.949288129016},
-{16.158848619890,110.212087077375}, {13.224557514711,107.109984243309},
-{12.401022392395,105.215121771751}, {12.109375000000,103.234375000000},
-{12.857968117079,98.340329228563}, {15.050447208669,93.495802782054},
-{18.606861885297,88.792446786896}, {23.447261757492,84.321912369510},
-{23.462751811761,84.309735859104}, {29.835792474114,80.170241641945},
-{36.826339837257,77.183700966953}, {44.355342734713,75.374150023260},
-{52.343750000000,74.765625000000}, {54.172214431835,74.493658379815},
-{55.005326273741,73.240819884599}, {54.891695624471,73.637732784350},
-{55.835419478567,69.288398667240}, {56.941029555972,65.553969608663},
-{57.993585771605,68.524034756036}, {53.681468264740,66.410473849442},
-{48.062136369578,64.586219029579}, {42.258612309644,63.317877950046},
-{37.437500000000,62.906250000000}, {32.573685233275,63.044800246717},
-{26.989159126193,63.632907811096}, {20.752015377001,64.279295952574},
-{16.562500000000,64.484375000000}, {16.408072340842,64.479600861137},
-{11.611197340842,64.182725861137}, {11.453516511116,64.167941148499},
-{6.725716011250,62.845442977500}, {4.607850691978,60.769517471259},
-{3.781250000000,57.859375000000}, {4.373461857036,55.042556375256},
-{5.951936001924,52.702230099626}, {6.143541831166,52.540844514692},
-{9.884650718045,51.301737345381}, {10.233131146503,51.254965794601},
-{14.936256146503,50.958090794601}, {15.093750000000,50.953125000000},
-{19.896489079886,51.056672881330}, {25.533897731570,51.448761318515},
-{25.296875000000,51.437500000000}, {30.909892241200,52.067729129895},
-{30.484375000000,52.031250000000}, {39.960841830525,52.410121686268},
-{48.752300459876,53.538988916016}, {48.757228534847,53.539874692156},
-{54.123571896675,54.731960341587}, {58.970980406852,56.270657465230},
-{63.248918806945,58.141504425356}, {66.906851838519,60.330039584234},
-{66.896289983187,60.322652661852}, {70.654761046586,63.581911162241},
-{73.423041490057,67.400928399521}, {75.133561184297,71.670457102504},
-{75.718750000000,76.281250000000}, {74.721151272876,79.892293861068},
-{72.068677652167,83.513297493231}, {70.325052633091,85.868624092784},
-{69.828125000000,88.250000000000}, {70.186304443223,90.552747673203},
-{71.326302526678,92.735137555366}, {73.346308881046,94.894011912335},
-{76.344513137007,97.126213009954}, {79.989627194854,99.164217236556},
-{83.789048154438,100.596188457783}, {87.811323321056,101.441306202608},
-{92.125000000000,101.718750000000}, {97.462586180660,101.070932456387},
-{97.557831952069,101.055648080491}, {103.015964519671,99.851433056816},
-{103.984375000000,99.656250000000}, {106.046875000000,99.656250000000},
-{107.893088734820,103.841923410053}, {106.046875000000,104.656250000000},
-{103.984375000000,104.656250000000}, {104.952785480329,104.461066943184},
-{98.254668047931,106.006851919509}, {98.349913819340,105.991567543613},
-{92.125000000000,106.718750000000}, {87.170121991444,106.371193797392},
-{82.386733095562,105.341311542217}, {77.843380617646,103.648282763444},
-{73.608611862993,101.311286990046}, {69.914433306454,98.422394337665},
-{67.154166223322,95.217987444634}, {65.426000244277,91.794908576797},
-{64.828125000000,88.250000000000}, {65.079958470471,86.099459712769},
-{65.803853616909,83.955594657216}, {68.478197347833,80.033577506769},
-{70.243692477124,77.869424888932}, {70.718750000000,76.281250000000},
-{70.335188815703,72.767042897496}, {69.139458509943,69.692821600479},
-{67.063988953414,66.949338837759}, {64.041210016813,64.427347338148},
-{64.030648161481,64.419960415766}, {57.122769593148,60.885592534770},
-{47.867771465153,58.460125307844}, {47.872699540124,58.461011083984},
-{39.531345669475,57.386753313732}, {30.484375000000,57.031250000000},
-{30.058857758800,56.994770870105}, {25.296875000000,56.437500000000},
-{25.059852268430,56.426238681485}, {19.697260920114,56.052702118670},
-{15.093750000000,55.953125000000}, {15.251243853497,55.948159205399},
-{10.548118853497,56.245034205399}, {10.896599281955,56.198262654619},
-{9.168958168834,56.521655485308}, {9.360563998076,56.360269900374},
-{8.781250000000,57.859375000000}, {8.758601803360,58.189255218076},
-{8.735899308021,58.292982528741}, {8.961783988750,58.373307022500},
-{12.077733488884,59.207058851501}, {11.920052659158,59.192274138863},
-{16.716927659158,59.489149138863}, {16.562500000000,59.484375000000},
-{20.310484622999,59.298829047426}, {26.432715873807,58.663967188904},
-{32.129439766725,58.064574753283}, {37.437500000000,57.906250000000},
-{42.956231440356,58.377434549954}, {49.359738630422,59.757530970421},
-{55.603687985260,61.808276150558}, {60.600164228395,64.257215243964},
-{61.652720444028,67.227280391337}, {60.695830521433,70.461601332760},
-{59.795804375529,74.612267215650}, {59.682173726259,75.009180115401},
-{58.534870256371,76.967235761415}, {56.827785568165,78.467279120185},
-{54.713289027441,79.427384197713}, {52.343750000000,79.765625000000},
-{45.078251015287,80.284053101740}, {38.408035162743,81.855361533047},
-{32.254051275886,84.503586483055}, {26.537248188239,88.252764140896},
-{26.552738242508,88.240587630490}, {22.301341239703,92.064975088104},
-{19.363615291331,95.777634717946}, {17.659610007921,99.470217646437},
-{17.109375000000,103.234375000000}, {17.462942485289,104.745484506691},
-{18.934901380110,106.053537922625}, {21.052812442968,107.257743120984},
-{22.546875000000,107.593750000000}, {27.127336030849,107.323869026651},
-{31.729951269190,106.505204561027}, {36.405009689533,105.124224284764},
-{41.202800266393,103.167395879495}, {50.256161372519,98.422250099230},
-{57.732466834451,93.253092412692}, {60.876288655813,93.265226007835},
-{72.532538655813,102.765226007835}, {72.279807476907,102.584183376106},
-{75.647218702317,104.376772716335}, {79.199503524210,105.636779903827},
-{83.003238453225,106.380692983432}, {87.125000000000,106.625000000000},
-{94.491626547384,105.043088554999}, {94.463907095460,105.050904922128},
-{100.135795242069,103.121939858482}, {103.519921580364,101.267028609739},
-{103.216286265180,101.548701589947}, {104.200661265180,100.470576589947},
-{106.046875000000,104.656250000000}, {107.893088734820,103.841923410053},
-{55.872490683787,89.763134548637}, {54.997490683787,85.841259548637},
-{55.036476188094,85.993355189713}, {52.343750000000,85.750000000000},
-{46.702141892082,86.180801752650}, {41.285068752391,87.490050907175},
-{36.021375201732,89.703013308437}, {30.839905860908,92.844954801298},
-{30.840393168266,92.844613599752}, {24.841774707763,97.553563991314},
-{23.093750000000,100.109375000000}, {23.668337709691,101.518994849695},
-{23.371174656526,101.224323797050}, {23.620948599883,101.397798979282},
-{24.023420115060,101.552272092059}, {25.484375000000,101.718750000000},
-{29.298199671143,101.348354407082}, {33.545396502623,100.218839979757},
-{38.283160693967,98.302715245167}, {43.568687444697,95.572488730454},
-{43.462444284634,95.635929361188}, {56.978069284634,87.104679361188},
-{55.872490683787,89.763134548637}, {107.893088734820,103.841923410053},
-{59.646930715366,91.332820638812}, {46.131305715366,99.864070638812},
-{46.025062555303,99.927511269546}, {40.294964306033,102.857441004833},
-{34.923353497377,104.984285020243}, {29.967425328857,106.280551842918},
-{25.484375000000,106.718750000000}, {22.429704884940,106.291477907941},
-{20.160075343474,105.056926202950}, {19.862912290309,104.762255150305},
-{18.581942192719,102.559691058502}, {18.093750000000,100.109375000000},
-{18.781885833597,97.630167914546}, {20.751975292237,94.868311008686},
-{27.972106831734,88.749136400248}, {27.972594139092,88.748795198702},
-{33.744249798268,85.287221066563}, {39.777431247609,82.783386592825},
-{46.000983107918,81.262557622350}, {52.343750000000,80.750000000000},
-{54.881053553302,80.995299290410}, {57.121823397686,81.724997675285},
-{58.847249996203,82.929795925088}, {59.838523811906,84.600394810287},
-{59.877509316213,84.752490451363}, {60.752509316213,88.674365451363},
-{59.646930715366,91.332820638812}, {107.893088734820,103.841923410053},
-{155.484375000000,101.859375000000}, {154.564834615754,105.515207938449},
-{152.115670325806,108.366761454651}, {148.955163295626,109.891294781728},
-{145.437500000000,110.437500000000}, {142.960397099416,109.918703000637},
-{140.390467597390,108.438024620128}, {137.806753458193,106.109033784838},
-{135.288296646094,103.045299421136}, {135.165845369106,102.859481271949},
-{127.322095369106,89.718856271949}, {127.315939322101,89.708486304067},
-{123.037165252408,83.240466071649}, {119.422893480005,79.457711309224},
-{123.333764624626,78.181432151290}, {119.923748586047,88.267600564284},
-{116.288451493331,96.371224650234}, {116.310270123205,96.328970526240},
-{111.013619195867,105.085481651574}, {104.498474377631,112.833853093888},
-{102.718750000000,113.578125000000}, {98.109375000000,113.578125000000},
-{95.790533815800,112.012456612681}, {92.715536961613,101.759617602767},
-{90.624767168816,88.808240839597}, {90.625938562396,88.818553777181},
-{88.018863793847,68.357428789163}, {88.022375537533,68.374401202625},
-{86.904794319936,64.234191072834}, {85.466909526601,60.964474099786},
-{83.670654326939,58.467433589062}, {81.477961890361,56.645252846242},
-{80.463845731714,53.674615230649}, {82.823220731714,47.205865230649},
-{82.883587418943,47.055653464335}, {83.966380643129,44.754922491868},
-{85.291281927099,42.535861182972}, {88.514402164445,41.595109434025},
-{91.785870247761,43.817111177877}, {94.599270325866,47.029404143594},
-{96.906293571887,51.130222797294}, {98.658631158949,56.017801605095},
-{98.664492355983,56.039251079522}, {100.006630671722,63.228131068770},
-{101.762541190731,76.272848032637}, {101.765778670251,76.300425005941},
-{103.467098832178,87.353480411923}, {105.697048617918,94.795754781373},
-{102.319980907406,93.545204629259}, {104.354680083199,92.248641487426},
-{106.296883956259,90.334282557687}, {110.081726403105,84.371439341729},
-{110.069085073875,84.396782220394}, {112.413266990492,78.560599894318},
-{114.080111889746,71.934817013191}, {115.075734612596,64.464258680566},
-{115.406250000000,56.093750000000}, {117.906250000000,53.593750000000},
-{122.515625000000,53.593750000000}, {124.596624760838,54.708311442938},
-{155.065374760838,100.473936442938}, {155.484375000000,101.859375000000},
-{107.893088734820,103.841923410053}, {150.903375239162,103.244813557062},
-{120.434625239162,57.479188557062}, {122.515625000000,58.593750000000},
-{117.906250000000,58.593750000000}, {120.406250000000,56.093750000000},
-{120.037546637404,64.922460069434}, {118.935513110254,72.987057986809},
-{117.106264259508,80.232368855682}, {114.555914926125,86.603217779606},
-{114.543273596895,86.628560658271}, {112.308927321184,90.508291033149},
-{109.859366043741,93.751654942313}, {107.239069916801,96.288467887574},
-{104.492519092594,98.048545370741}, {101.115451382082,96.797995218627},
-{98.626651167822,88.552769588077}, {96.796721329749,76.855824994059},
-{96.799958809269,76.883401967363}, {95.087119328278,64.107806431230},
-{93.835507644017,57.335748920478}, {93.841368841051,57.357198394905},
-{92.427690803113,53.221339702706}, {90.736667174134,50.033095856406},
-{88.719989127239,47.690701322123}, {86.329347835555,46.092390565975},
-{89.552468072901,45.151638817028}, {88.346119356871,47.166952508132},
-{87.460162581057,49.069346535665}, {87.520529268286,48.919134769351},
-{85.161154268286,55.387884769351}, {84.147038109639,52.417247153758},
-{87.106689423061,54.909519535937}, {89.579965473399,58.293338400214},
-{91.528799430064,62.470887052166}, {92.915124462467,67.344348797375},
-{92.918636206153,67.361321210837}, {95.592811437604,88.243946222819},
-{95.593982831184,88.254259160403}, {97.565713038387,100.591944897233},
-{100.428216184200,110.143793387319}, {98.109375000000,108.578125000000},
-{102.718750000000,108.578125000000}, {100.939025622369,109.322396906112},
-{106.962943304133,102.180143348427}, {111.845979876795,94.077279473760},
-{111.867798506669,94.035025349766}, {115.287188913953,86.412086935716},
-{118.541235375374,76.756067848710}, {122.452106519995,75.479788690776},
-{126.837834747592,80.025158928351}, {131.621560677899,87.166513695933},
-{131.615404630894,87.156143728051}, {139.459154630894,100.296768728051},
-{139.336703353906,100.110950578864}, {142.906407402610,104.257287879872},
-{145.437500000000,105.437500000000}, {147.478430454374,105.175111468272},
-{149.243704674194,104.273863545349}, {150.251571634246,103.277760811551},
-{150.484375000000,101.859375000000}, {150.903375239162,103.244813557062},
-{107.893088734820,103.841923410053}, {231.343750000000,91.875000000000},
-{230.760913847107,95.964970754466}, {229.068047862611,99.735912943733},
-{226.348615757792,103.075786207286}, {222.686081243924,105.872550184609},
-{222.648873373705,105.894655312846}, {215.093162016193,109.098726800095},
-{205.138412990776,111.389009633945}, {205.099511514392,111.395066324151},
-{196.531910121565,112.292873746127}, {187.093750000000,112.593750000000},
-{180.736641615184,112.156201510495}, {174.578395035074,110.855968371846},
-{168.685194057574,108.711669078852}, {163.123222480588,105.741922126310},
-{163.102786019362,105.728945017668}, {158.065383006950,101.833715472335},
-{154.350564084671,97.489870440862}, {152.052565874896,92.798170193375},
-{151.265625000000,87.859375000000}, {151.531470468770,85.013668760581},
-{152.287360086651,82.060400295498}, {152.321821893194,81.964698849566},
-{155.704155919825,73.828381186220}, {158.270837388345,69.249451319292},
-{158.258242073026,69.265568807584}, {162.161895999987,65.281962610977},
-{167.278829839386,61.794937132641}, {173.532669176810,58.834467171163},
-{180.847039597849,56.430527525129}, {179.144548452656,58.005986305326},
-{180.222673452656,54.974736305326}, {180.222279555972,54.975844608663},
-{182.650011718926,50.400876966176}, {185.678714551395,49.466466465483},
-{192.833058049629,52.996232862321}, {201.831199616962,58.692914409530},
-{211.602112156950,65.789874557518}, {220.243790039283,73.085988470431},
-{220.250361498213,73.092084369790}, {227.553434625305,81.089470457139},
-{229.783449199558,84.667905408782}, {230.987849850362,87.897461316292},
-{231.037603485703,88.222391630780}, {231.334478485703,91.659891630780},
-{231.343750000000,91.875000000000}, {107.893088734820,103.841923410053},
-{226.353021514297,92.090108369220}, {226.056146514297,88.652608369220},
-{226.105900149638,88.977538683708}, {225.181394550443,86.544985216218},
-{223.368440374695,83.730842042861}, {216.843388501787,76.751665630210},
-{216.849959960717,76.757761529569}, {208.538512843050,69.741375442482},
-{199.012550383038,62.822710590470}, {190.370066950371,57.347517137679},
-{183.790035448605,54.096033534517}, {186.818738281074,53.161623033824},
-{184.933970444028,56.649155391337}, {184.933576547344,56.650263694674},
-{183.855451547344,59.681513694674}, {182.152960402151,61.256972474871},
-{175.418502698190,63.429204703837}, {169.900857660614,65.978500367359},
-{165.523650875013,68.934834264023}, {162.210507926974,72.328181192416},
-{162.197912611655,72.344298680708}, {160.116156580175,76.155993813780},
-{156.990678106806,83.754051150434}, {157.025139913349,83.658349704502},
-{156.265625000000,87.859375000000}, {156.814621625104,91.570970431625},
-{158.524435915329,95.017942059138}, {161.489304493050,98.301050152665},
-{165.803463980638,101.521054982332}, {165.783027519412,101.508077873690},
-{170.773790317426,104.198487171148}, {175.945042464926,106.097156628154},
-{181.362967759816,107.222704739505}, {187.093750000000,107.593750000000},
-{196.179027378435,107.308688753873}, {204.369238485608,106.448683675849},
-{204.330337009224,106.454740366055}, {213.484962983807,104.385648199905},
-{220.132376626295,101.574094687154}, {220.095168756076,101.596199815391},
-{222.954118617208,99.523823167714}, {224.892889637389,97.287524556267},
-{225.994945527893,94.775263620534}, {226.343750000000,91.875000000000},
-{226.353021514297,92.090108369220}, {107.893088734820,103.841923410053},
-{219.781250000000,95.890625000000}, {219.378166433508,93.853798730227},
-{218.111752188172,91.489941446073}, {212.645950385807,85.475693519170},
-{212.685981945341,85.511936058310}, {206.545320157918,80.643069684901},
-{198.180220478697,74.962876659750}, {198.191932106006,74.970352872652},
-{191.582535336704,71.037624006410}, {191.504903114611,70.993386859602},
-{190.358726480976,70.329891393482}, {194.093750000000,68.156250000000},
-{193.486799914207,72.326466575586}, {191.750022838432,75.648693620488},
-{191.727672642897,75.674671879974}, {189.796209835616,77.308949639626},
-{187.307360975056,78.497446987452}, {184.374093537693,79.223076311545},
-{181.109375000000,79.468750000000}, {178.539517280969,79.274893727068},
-{176.586499975916,78.676142180991}, {173.086052480141,74.877460550577},
-{176.026873378540,75.790765650642}, {173.637934677835,76.966105971818},
-{171.454775584042,78.628861257931}, {167.479150931130,83.659399177979},
-{167.492959438562,83.636441477986}, {164.707555748674,89.579684053440},
-{164.890625000000,88.640625000000}, {165.429801946489,91.718738201013},
-{167.140367049889,94.413281660069}, {170.161871706101,96.828214751252},
-{174.633867311024,99.067496848641}, {174.595883286589,99.052025896332},
-{183.311717611230,101.570655775842}, {188.036065935963,102.270678900324},
-{192.781250000000,102.500000000000}, {204.722829878151,102.082467436594},
-{212.458857303872,100.833616072622}, {214.905535432122,99.897801735668},
-{216.940228691241,98.604487224303}, {220.087216056537,94.692203098109},
-{219.781250000000,95.890625000000}, {107.893088734820,103.841923410053},
-{224.475283943463,97.089046901891}, {222.495392805158,99.992428606532},
-{220.012896308759,102.426762775697}, {217.106183317878,104.328760764332},
-{213.853642696128,105.635133927378}, {205.324045121849,107.034720063406},
-{192.781250000000,107.500000000000}, {187.549871564037,107.241039849676},
-{182.344532388770,106.476219224158}, {172.747866713411,103.697974103668},
-{172.709882688976,103.682503151359}, {167.310784543899,100.802644623748},
-{163.281507950111,97.266405839931}, {160.761604303511,93.177746173987},
-{160.111277146626,90.958745814619}, {159.890625000000,88.640625000000},
-{160.073694251326,87.701565946560}, {163.194540561438,81.082308522014},
-{163.208349068870,81.059350822021}, {165.573405849355,77.703241627766},
-{168.240536915958,74.886763742069}, {171.153080947165,72.670612778182},
-{174.254376621460,71.115484349358}, {177.195197519859,72.028789449423},
-{178.991625024084,74.292607819009}, {181.109375000000,74.468750000000},
-{185.450451524944,73.971303012548}, {187.959827357103,72.387828120026},
-{187.937477161568,72.413806379512}, {188.825700085793,70.736033424413},
-{189.093750000000,68.156250000000}, {192.828773519024,65.982608606518},
-{194.057596885389,66.694113140398}, {193.979964663296,66.649875993590},
-{200.870567893994,70.748397127348}, {200.882279521303,70.755873340250},
-{209.532804842082,76.638180315099}, {216.001518054659,81.769313941690},
-{216.041549614192,81.805556480830}, {219.736550554799,85.597619431325},
-{222.481997811828,89.260058553927}, {224.192146066492,92.716513769773},
-{224.781250000000,95.890625000000}, {224.475283943463,97.089046901891},
-{107.893088734820,103.841923410053}, {274.375000000000,74.921875000000},
-{274.375000000000,76.000000000000}, {273.941340954992,77.877573018672},
-{272.878932097861,79.515803527315}, {273.201644884750,79.109789854043},
-{272.240878131027,80.634530144823}, {272.178064435979,80.731878545843},
-{270.366672394243,82.164949472839}, {268.046875000000,82.703125000000},
-{266.183148747233,82.484226579792}, {265.676843902484,82.347511014208},
-{261.919943241226,81.056638412991}, {261.845529920936,81.035610157726},
-{257.771892015055,80.000491652766}, {254.812500000000,79.671875000000},
-{253.064641952966,80.017766952966}, {253.029646790629,80.052082662255},
-{253.183319188544,79.921363850038}, {253.251518993920,79.984611568497},
-{253.185946392942,81.106825858762}, {253.000000000000,86.578125000000},
-{253.496255380785,102.128843883245}, {253.498940253820,102.192840332413},
-{254.068093288267,110.651263719025}, {251.578125000000,113.375000000000},
-{246.875000000000,113.375000000000}, {246.340326851360,113.317155732979},
-{244.239667843345,112.409341061474}, {241.449240399376,110.489665586259},
-{233.966932708158,103.861287459859}, {233.964253154933,103.858697290509},
-{230.739570245917,99.429986748935}, {227.863465886694,92.900734302334},
-{227.865566738278,92.906614054351}, {224.904456445713,83.297192679644},
-{223.890625000000,76.390625000000}, {224.718172891760,73.652424627265},
-{226.991950628026,71.671512863124}, {230.398659300280,70.468125917422},
-{234.625000000000,70.062500000000}, {239.436000436064,69.828681464349},
-{240.453125000000,69.140625000000}, {239.621272369169,63.470278877568},
-{237.983036171748,55.833595299706}, {237.978023315197,55.813489579321},
-{235.265625000000,42.968750000000}, {235.414374888933,43.818233911095},
-{223.164374888933,9.911983911095}, {223.454623060848,7.647483743269},
-{225.610873060848,4.506858743269}, {225.803351703291,4.260965402925},
-{227.719534150475,2.932735689909}, {230.078782966130,2.347671229322},
-{230.218750000000,2.343750000000}, {231.580832848366,2.789728316683},
-{232.871346377781,3.980786060276}, {235.131457239225,7.716876589460},
-{240.051188613236,19.745668022304}, {244.970104457946,33.805503176211},
-{247.762510801176,44.143184476801}, {247.777764624530,44.225329525617},
-{252.184014624530,70.381579525617}, {251.352799675865,68.904817480577},
-{254.575226795957,69.673348314939}, {260.406250000000,70.359375000000},
-{270.523910039912,70.690857394210}, {273.186407177161,72.174765791999},
-{274.049624252688,73.457293811137}, {274.375000000000,74.921875000000},
-{107.893088734820,103.841923410053}, {269.375000000000,74.921875000000},
-{269.694839960088,75.621642605790}, {260.406250000000,75.359375000000},
-{253.596648204043,74.576651685061}, {250.197596782742,73.718304003256},
-{248.084700324135,72.688932519423}, {247.253485375470,71.212170474383},
-{242.847235375470,45.055920474383}, {242.862489198824,45.138065523199},
-{240.182239292054,35.233559323790}, {235.370686386764,21.504331977696},
-{230.614636510775,9.861248410540}, {229.674552059719,7.679370189724},
-{229.774391761009,7.390935745817}, {230.218750000000,7.343750000000},
-{230.358717033870,7.339828770678}, {229.540398296709,7.582784597075},
-{229.732876939152,7.336891256731}, {227.576626939152,10.477516256731},
-{227.866875111067,8.213016088905}, {240.116875111067,42.119266088905},
-{240.265625000000,42.968750000000}, {242.834476684803,54.624010420679},
-{242.829463828252,54.603904700294}, {244.534977630831,62.545346122432},
-{245.453125000000,69.140625000000}, {244.611402180226,71.735213821357},
-{242.306187063936,73.585381035651}, {238.867409665678,74.693638982119},
-{234.625000000000,75.062500000000}, {229.906486871974,75.367549636876},
-{229.092373983240,75.779215997735}, {228.934535185216,76.058687905577},
-{228.890625000000,76.390625000000}, {229.790856054287,82.319994820356},
-{232.571933261722,91.218385945649}, {232.574034113306,91.224265697666},
-{234.986992254083,96.851263251065}, {237.441996845067,100.266302709491},
-{237.439317291842,100.263712540141}, {244.074197100624,106.275959413741},
-{247.409673148640,108.432844267021}, {246.875000000000,108.375000000000},
-{251.578125000000,108.375000000000}, {249.088156711733,111.098736280975},
-{248.501059746180,102.338409667587}, {248.503744619215,102.402406116755},
-{248.000000000000,86.578125000000}, {248.204678607058,80.674424141238},
-{248.635199756080,78.226325931503}, {249.564103209371,76.447917337745},
-{249.529108047034,76.482233047034}, {251.855421271850,75.142541341903},
-{254.812500000000,74.671875000000}, {258.571857984945,75.077633347234},
-{263.279470079064,76.245639842274}, {263.205056758774,76.224611587009},
-{267.479406097516,77.683738985792}, {266.973101252767,77.547023420208},
-{268.046875000000,77.703125000000}, {268.247054721136,77.733964370993},
-{268.227077605757,77.803800527161}, {268.040685564021,77.924371454157},
-{267.977871868973,78.021719855177}, {268.985855115250,76.421460145957},
-{269.308567902139,76.015446472685}, {269.418034045008,75.973989481328},
-{269.375000000000,76.000000000000}, {269.375000000000,74.921875000000},
-{107.893088734820,103.841923410053}, {243.911209450369,105.662056821622},
-{240.832004992147,102.845101845416}, {236.815516984936,97.742848726260},
-{236.813922800164,97.740633958664}, {232.773597278734,91.287437871638},
-{230.710552894044,85.924483215760}, {230.745327869205,86.067653416413},
-{229.840275149638,82.415038683708}, {229.855893749637,82.481339062591},
-{229.093750000000,78.546875000000}, {229.510257350732,77.264688549054},
-{230.557731326090,76.286764971873}, {233.333290689663,75.138571514324},
-{238.843750000000,74.468750000000}, {241.980836948934,74.687319511759},
-{245.189547085049,75.561169162745}, {247.167986856352,77.549353232692},
-{248.217702574415,80.638507879225}, {248.687500000000,88.140625000000},
-{248.194671228610,98.736670034806}, {248.200295344311,98.650162873539},
-{247.698246960594,103.850772804200}, {243.911209450369,105.662056821622},
-{107.893088734820,103.841923410053}, {242.739253039406,103.211727195800},
-{243.205954655689,98.412337126461}, {243.211578771390,98.325829965194},
-{243.687500000000,88.140625000000}, {243.282297425585,81.439617120775},
-{243.185452914951,80.141955837255}, {241.300413051066,79.640805488241},
-{238.843750000000,79.468750000000}, {234.557334310337,79.986428485676},
-{234.323615830224,80.043375869145}, {234.139295619945,80.082650511165},
-{233.899908001681,80.106538837663}, {233.805549923910,79.924172528127},
-{234.093750000000,78.546875000000}, {234.706606250363,81.268660937409},
-{234.722224850362,81.334961316292}, {235.567172130795,84.744846583587},
-{235.601947105956,84.888016784240}, {237.273277721266,89.165687128362},
-{240.873577199836,94.821866041336}, {240.871983015064,94.819651273740},
-{244.355495007853,99.326773154584}, {246.526290549631,101.400443178378},
-{242.739253039406,103.211727195800}, {107.893088734820,103.841923410053},
-{304.579027849556,115.887559254375}, {299.647333003501,118.498603127587},
-{299.601234810263,118.526555579345}, {296.960609810263,120.089055579345},
-{295.687500000000,120.437500000000}, {292.434178516679,119.763451801101},
-{289.591538470777,117.850158805700}, {287.263626957927,114.860898415742},
-{285.554491073762,110.958948033170}, {285.546168760441,110.932189402305},
-{283.409425227272,100.413450166388}, {283.408069329655,100.405281467271},
-{280.968147929764,87.644193704042}, {284.218299056292,87.914012723915},
-{279.519746335556,93.766171451312}, {279.798545332977,93.224824860858},
-{274.937093489612,105.343910553875}, {272.454127837569,109.762553039486},
-{269.772550129691,112.314814767144}, {266.294988321147,110.999865652887},
-{264.699764075525,105.167535274279}, {264.676753039406,105.022647804200},
-{264.221109604112,100.702343060691}, {264.171875000000,98.828125000000},
-{263.607902205199,91.869081828698}, {263.613915250645,91.062865437610},
-{263.781250000000,89.718750000000}, {263.644962649638,88.985351183708},
-{262.873500431741,86.703985451358}, {262.739182179139,86.219942105230},
-{260.786057179139,74.844942105230}, {260.786249814804,74.846062487964},
-{256.958124814804,52.611687487964}, {256.955473276820,52.595988114755},
-{254.892973276820,40.142863114755}, {254.909488793847,40.232428789163},
-{254.331363793847,37.388678789163}, {254.339079247810,37.425229542768},
-{253.651579247810,34.284604542768}, {253.593750000000,33.750000000000},
-{254.239654341050,30.319069019177}, {254.154681406546,30.589185956325},
-{256.319133024351,26.771372253672}, {258.818704827809,25.924919245868},
-{261.217531024880,26.988383072536}, {263.253153025566,28.888095452080},
-{264.856582863559,31.480336604342}, {265.958832572550,34.621386749163},
-{266.013105788729,34.918097636045}, {267.200714432551,44.731495841479},
-{267.198350954149,44.712535224402}, {269.443623734153,61.037071609407},
-{269.421396014347,60.906344576785}, {270.652021489737,67.736566992690},
-{271.992261513603,76.440263813345}, {271.992747064473,76.443809223415},
-{273.038636247453,85.686082548185}, {273.390625000000,92.953125000000},
-{273.238407027301,96.898129287691}, {272.771685367998,99.590064317759},
-{267.989237947004,98.132898258783}, {271.223612947004,86.961023258783},
-{271.391159168632,86.533772766328}, {274.526090303798,81.379570646076},
-{274.584318175231,81.310286998919}, {276.982682022500,78.600716011250},
-{277.142029400154,78.326905342657}, {279.265919333198,75.301911531816},
-{279.298622345235,75.258362091268}, {281.876153531632,73.009942282517},
-{284.906250000000,72.125000000000}, {287.318073492888,72.767987310135},
-{289.339116026344,74.544184270464}, {290.903803647217,77.224443425871},
-{291.946562402359,80.579617321243}, {291.963278527291,80.666832095730},
-{293.477578855570,88.491377103079}, {294.532438780850,92.026218792971},
-{294.690170210143,92.371639700252}, {298.832669585147,102.687317191341},
-{298.821447919079,102.663322107333}, {301.483679194839,107.248880594573},
-{302.541048238599,108.202972500861}, {303.515625000000,108.484375000000},
-{306.015625000000,110.984375000000}, {306.015625000000,113.625000000000},
-{304.579027849556,115.887559254375}, {107.893088734820,103.841923410053},
-{301.015625000000,113.625000000000}, {301.015625000000,110.984375000000},
-{303.515625000000,113.484375000000}, {300.984342386401,112.859527499139},
-{298.555383305161,111.094869405427}, {296.303526841571,108.355227332168},
-{294.303552080921,104.805427892667}, {294.292330414853,104.781432808659},
-{289.997329789857,94.097110299748}, {290.155061219150,94.442531207029},
-{288.709921144430,89.953935396921}, {287.036721472709,81.520667904270},
-{287.053437597641,81.607882678757}, {286.004633973656,77.940190729536},
-{284.906250000000,77.125000000000}, {284.500063101353,77.160595459408},
-{284.155096468369,77.318182717483}, {283.263877654765,78.304137908732},
-{283.296580666802,78.260588468184}, {281.295470599846,81.110594657343},
-{281.454817977500,80.836783988750}, {278.353181824769,84.595963001081},
-{278.411409696202,84.526679353924}, {275.858840831368,88.778727233672},
-{276.026387052996,88.351476741217}, {272.792012052996,99.523351741217},
-{268.009564632002,98.066185682241}, {268.390625000000,92.953125000000},
-{268.055113752547,86.056104951815}, {267.038502935527,77.118690776585},
-{267.038988486397,77.122236186655}, {265.722978510263,68.575933007310},
-{264.516103985653,61.874905423215}, {264.493876265847,61.744178390593},
-{262.239149045851,45.349964775598}, {262.236785567449,45.331004158521},
-{261.049394211271,35.519402363955}, {261.103667427450,35.816113250837},
-{259.699971974434,32.150967047920}, {257.681295172191,30.793830754132},
-{260.180866975649,29.947377746328}, {259.001568593454,31.817064043675},
-{258.916595658950,32.087180980823}, {258.593750000000,33.750000000000},
-{258.535920752190,33.215395457232}, {259.223420752190,36.356020457232},
-{259.231136206153,36.392571210837}, {259.809261206153,39.236321210837},
-{259.825776723180,39.325886885245}, {261.888276723180,51.779011885245},
-{261.885625185196,51.763312512036}, {265.713750185196,73.997687512036},
-{265.713942820861,73.998807894770}, {267.667067820861,85.373807894770},
-{267.532749568259,84.889764548642}, {268.526912350362,87.905273816292},
-{268.781250000000,89.718750000000}, {268.542334749355,91.905884562390},
-{268.548347794801,91.099668171302}, {269.171875000000,98.828125000000},
-{269.216390395888,100.485156939309}, {269.635746960594,104.383602195800},
-{269.612735924475,104.238714725721}, {270.955011678853,109.187634347113},
-{267.477449870309,107.872685232856}, {268.686497162431,106.569478210514},
-{270.375406510388,103.296714446125}, {275.107704667023,91.493925139142},
-{275.386503664444,90.952578548688}, {278.700840527029,86.470174071108},
-{281.281700943708,83.867237276085}, {284.531852070236,84.137056295958},
-{285.408419686884,85.805066273498}, {286.324716189650,88.997159604327},
-{288.341930670345,99.594718532729}, {288.340574772728,99.586549833612},
-{290.328831239559,109.474060597695}, {290.320508926238,109.447301966830},
-{291.419966792073,112.312929709258}, {292.611586529223,114.157653694300},
-{293.999415233321,115.144751323899}, {295.687500000000,115.437500000000},
-{294.414390189737,115.785944420655}, {297.055015189737,114.223444420655},
-{297.008916996499,114.251396872413}, {302.452222150444,111.362440745625},
-{301.015625000000,113.625000000000}, {107.893088734820,103.841923410053},
-{374.437500000000,106.765625000000}, {373.775309600600,109.463093710969},
-{372.064906958700,112.117295697199}, {372.041004786215,112.144602045402},
-{368.522704503395,114.706400007155}, {366.442611342446,115.399541345014},
-{364.281250000000,115.640625000000}, {355.911205219123,114.726652651698},
-{341.052591424867,111.966274658224}, {341.038040421249,111.963294783992},
-{326.905309277070,108.757693347762}, {319.727026481732,106.439595965247},
-{319.807037817648,106.479160754059}, {310.484453831953,101.696158824691},
-{304.482826587959,97.721718623918}, {304.310358047034,97.564641952966},
-{302.095819571999,95.254869206705}, {298.220153609739,90.667578419636},
-{300.367638895226,91.618501549714}, {296.258263895226,91.915376549714},
-{296.078125000000,91.921875000000}, {293.025957236218,91.709450913344},
-{290.151865257421,91.083888117023}, {285.254658796565,88.663603177256},
-{285.219422230119,88.636374171395}, {281.529900243089,84.536170132203},
-{280.513144708967,82.282593311151}, {280.156250000000,80.015625000000},
-{280.896516775664,77.119922391977}, {282.806537684315,74.726645730656},
-{285.448073147177,73.263018105533}, {288.686079158715,72.443690273534},
-{290.750793112766,73.122099563886}, {293.797668112766,76.059599563886},
-{293.736465601749,76.002539206463}, {295.798965601749,77.861914206463},
-{294.222063773555,77.220634985862}, {301.862688773555,77.517509985862},
-{299.265625000000,80.015625000000}, {299.934685624955,74.754308742711},
-{301.898213943218,69.792099871114}, {305.090729619888,65.230982029954},
-{309.446752320064,61.172938863978}, {309.482902906976,61.145713152252},
-{318.065904047846,56.213131631660}, {329.455658353400,51.953267244508},
-{329.496351456999,51.941186017188}, {336.615241964605,50.572965088062},
-{336.666137267666,50.568817238037}, {342.150512267666,50.178192238037},
-{342.328125000000,50.171875000000}, {347.088673798588,50.461178987176},
-{351.635436696472,51.319590054257}, {355.904450990616,52.732856859568},
-{359.831753977986,54.686728061438}, {363.292951645549,57.250115143707},
-{365.880587968213,60.272932122861}, {367.501493801268,63.647371305944},
-{368.062500000000,67.265625000000}, {367.659428864193,69.524372763002},
-{366.507997055207,71.901249483478}, {362.306741008310,76.690232523947},
-{362.309449580203,76.687848273793}, {355.067416613929,81.592460070084},
-{345.579434368324,85.619156329617}, {345.543296906352,85.631025936969},
-{338.856518222681,87.434049611292}, {331.674077585810,88.726763309129},
-{324.032609882622,89.505258086643}, {315.968750000000,89.765625000000},
-{315.697255981477,89.750839477245}, {313.837880981477,89.547714477245},
-{314.109375000000,89.562500000000}, {315.203325765838,88.142787621838},
-{315.234375000000,87.750000000000}, {315.261368553241,87.459370280378},
-{315.416652198286,87.453346686481}, {316.557907675735,88.522399326740},
-{316.429841220906,88.403882310796}, {319.273591220906,90.857007310796},
-{318.935343465338,90.611377991437}, {331.091593465338,97.970752991437},
-{330.612118984109,97.746034726917}, {334.956642245028,98.975789357391},
-{339.851927078584,99.850564497063}, {351.453125000000,100.546875000000},
-{354.203872313810,100.381670729150}, {355.159915151904,99.886038066767},
-{355.055436157189,100.055596900919}, {357.900435727416,97.290434866877},
-{362.379803562479,95.425955323112}, {363.015625000000,95.343750000000},
-{366.828125000000,95.343750000000}, {368.997562855593,96.601357392681},
-{374.106937855593,105.523232392681}, {374.437500000000,106.765625000000},
-{107.893088734820,103.841923410053}, {369.768062144407,108.008017607319},
-{364.658687144407,99.086142607319}, {366.828125000000,100.343750000000},
-{363.015625000000,100.343750000000}, {363.651446437521,100.261544676888},
-{360.724564272584,101.303315133123}, {359.413313842811,102.506903099081},
-{359.308834848096,102.676461933233}, {358.021570604282,103.932262067178},
-{356.186752686190,104.829266770850}, {351.453125000000,105.546875000000},
-{345.006190631125,105.353277680068}, {339.085572921416,104.774435502937},
-{333.730857754972,103.813273142609}, {328.981631015891,102.472715273083},
-{328.502156534662,102.247997008563}, {316.345906534662,94.888622008563},
-{316.007658779094,94.642992689204}, {313.163908779094,92.189867689204},
-{313.035842324265,92.071350673260}, {311.083347801714,89.820090813519},
-{310.234375000000,87.750000000000}, {310.265424234162,87.357212378162},
-{310.780311953087,86.191927459145}, {311.752715552710,85.312201869144},
-{314.109375000000,84.562500000000}, {314.380869018523,84.577285522755},
-{316.240244018523,84.780410522755}, {315.968750000000,84.765625000000},
-{323.705671367377,84.524038788357}, {330.935297414190,83.796674190871},
-{337.694263027319,82.579622263708}, {344.019203093648,80.868974063031},
-{343.983065631676,80.880843670383}, {352.635708386071,77.251289929916},
-{359.003050419797,72.937151726207}, {359.005758991690,72.934767476053},
-{362.163877944793,69.637813016522}, {363.062500000000,67.265625000000},
-{362.747529636232,64.880949006556}, {361.740505781787,62.777849127139},
-{359.948259291951,60.848517668793}, {357.277621022014,58.985146938562},
-{353.920744321884,57.295463452932}, {350.352844553528,56.106191195743},
-{346.509959013911,55.403078825324}, {342.328125000000,55.171875000000},
-{342.505737732334,55.165557761963}, {337.021362732334,55.556182761963},
-{337.072258035395,55.552034911938}, {330.878648543001,56.746313982812},
-{330.919341646600,56.734232755492}, {320.246595952154,60.693118368340},
-{312.454597093024,65.166786847748}, {312.490747679936,65.139561136022},
-{308.794036005112,68.485814845046}, {306.234598556782,72.012587628886},
-{304.746955000045,75.821863132289}, {304.265625000000,80.015625000000},
-{301.668561226445,82.513740014138}, {294.027936226445,82.216865014138},
-{292.451034398251,81.575585793537}, {290.388534398251,79.716210793537},
-{290.327331887234,79.659150436114}, {287.280456887234,76.721650436114},
-{289.345170841285,77.400059726466}, {287.321458102823,77.850263144467},
-{285.927837315685,78.632729269344}, {285.271451974336,79.274608858023},
-{285.175338636761,79.581613557521}, {285.156250000000,80.015625000000},
-{285.837287256911,82.245079867797}, {288.311827769881,84.707375828605},
-{288.276591203435,84.680146822744}, {291.660634742579,86.384861882977},
-{296.078125000000,86.921875000000}, {295.897986104774,86.928373450286},
-{300.007361104774,86.631498450286}, {302.154846390261,87.582421580364},
-{305.732305428001,91.823255793295}, {307.845891952966,94.029108047034},
-{307.673423412041,93.872031376082}, {313.085858668047,97.436653675309},
-{321.942962182352,101.958339245941}, {322.022973518268,101.997904034753},
-{328.415003222930,104.000119152238}, {342.055709578751,107.067955216008},
-{342.041158575133,107.064975341776}, {356.698169780877,109.788972348302},
-{364.281250000000,110.640625000000}, {366.516357996605,110.246724992845},
-{368.302745213785,108.824147954598}, {368.278843041300,108.851454302801},
-{369.437500000000,106.765625000000}, {369.768062144407,108.008017607319},
-{107.893088734820,103.841923410053}, {359.034454681034,69.861443602839},
-{357.173548986071,72.638610976591}, {353.435826646756,75.215386191513},
-{347.992418306797,77.582163291606}, {341.014454609897,79.729336320871},
-{326.426284670840,82.761098429090}, {319.640717587115,83.525315463381},
-{313.234375000000,83.781250000000}, {312.706760041223,83.724940335389},
-{311.331760041223,83.428065335389}, {311.389194323030,83.439762979730},
-{309.920444323030,83.158512979730}, {310.390625000000,83.203125000000},
-{309.032298883605,83.610801187634}, {305.860259182280,80.222501196670},
-{308.487654632717,75.272571710106}, {311.451975717975,70.927537861140},
-{314.718319876723,67.239682598354}, {318.251784547635,64.261288870324},
-{318.235984828743,64.272646821685}, {322.460311501394,61.735717754517},
-{327.134482463160,59.899177687483}, {332.183220900533,58.782772982128},
-{337.531250000000,58.406250000000}, {345.475041381297,58.786142249068},
-{351.020038715603,59.929523334009}, {351.130689531816,59.972424607386},
-{353.699762084814,61.379594420291}, {355.915109055748,63.288105475323},
-{357.703808635445,65.619192847673}, {358.992939014732,68.294091612533},
-{359.034454681034,69.861443602839}, {107.893088734820,103.841923410053},
-{354.288310985268,69.987158387467}, {352.366140944252,66.657207024677},
-{349.213060468184,64.590075392614}, {349.323711284397,64.632976665991},
-{344.735896118703,63.713857750932}, {337.531250000000,63.406250000000},
-{332.857794724467,63.703555142872}, {328.623330036840,64.608634812517},
-{324.752579123606,66.141235370483}, {321.170265171257,68.321103178315},
-{321.154465452365,68.332461129676}, {318.096133248277,70.895083026646},
-{315.305836782025,74.049024638860}, {312.748673492282,77.846568914895},
-{310.389740817720,82.339998803330}, {307.217701116395,78.951698812366},
-{310.390625000000,78.203125000000}, {310.860805676970,78.247737020270},
-{312.329555676970,78.528987020270}, {312.386989958777,78.540684664611},
-{313.761989958777,78.837559664611}, {313.234375000000,78.781250000000},
-{319.326079287885,78.541090786619}, {325.753402829160,77.817026570910},
-{339.735545390103,74.895663679129}, {350.446985853244,71.354926308487},
-{353.125279138929,69.816467148409}, {354.246795318966,68.419806397161},
-{354.288310985268,69.987158387467}, {107.893088734820,103.841923410053},
-{412.906150029990,61.293260146951}, {409.761470127352,62.134684085464},
-{407.280172710472,63.259435125605}, {407.285792255081,63.256184676520},
-{404.793374271599,64.364965077547}, {402.406250000000,64.781250000000},
-{400.799037804796,64.455489160260}, {399.281565012266,63.565560595750},
-{396.896451926356,60.617324020679}, {395.843750000000,59.187500000000},
-{394.132759007664,59.586356110398}, {392.227223295325,60.862510968959},
-{387.514233459670,66.524236094764}, {387.523930329881,66.510005317299},
-{384.972470502350,70.813073903396}, {383.182220364063,75.072391356081},
-{382.127155126215,79.356608210051}, {381.781250000000,83.734375000000},
-{382.036891605602,86.926476407739}, {382.837535469594,90.232985146136},
-{382.953125000000,90.984375000000}, {382.953125000000,110.781250000000},
-{380.453125000000,113.281250000000}, {374.875000000000,113.281250000000},
-{372.797350977108,112.469290573921}, {370.771127450416,110.197059087430},
-{366.940746762890,102.253660683699}, {366.931766441279,102.229357657717},
-{364.988344509233,95.969248633492}, {363.592635453443,89.400212341223},
-{362.750737781251,82.563409292771}, {362.468750000000,75.500000000000},
-{362.469585639102,75.564633561058}, {362.375835639102,71.939633561058},
-{362.376194806642,71.952282634846}, {362.282444806642,68.921032634846},
-{362.281250000000,68.843750000000}, {362.557974048920,65.558176179264},
-{363.371209408870,62.925233614273}, {365.078767647837,60.585701488502},
-{367.830147985199,58.062445160283}, {369.390625000000,57.515625000000},
-{372.609375000000,57.515625000000}, {375.044088155839,59.448023159988},
-{375.637838155839,61.994898159988}, {375.701153736333,62.463240580013},
-{375.794903736333,64.822615580013}, {375.796875000000,64.921875000000},
-{375.796875000000,66.390625000000}, {375.727843254951,66.974057381188},
-{375.364882971473,68.609156073692}, {375.377354243352,68.535253718305},
-{374.986729243352,71.082128718305}, {375.015625000000,70.703125000000},
-{375.946084438562,73.051058522014}, {371.472688855144,73.407169646001},
-{374.338903268299,66.961197216653}, {377.510670879106,61.308691210684},
-{380.962283852915,56.499192859154}, {384.668034355078,52.582243393122},
-{384.668120639869,52.582165462116}, {388.032154904598,50.002880989291},
-{391.626628158728,48.110057708285}, {395.367786243461,46.944465688666},
-{399.171875000000,46.546875000000}, {400.072873198005,46.714879663986},
-{404.885373198005,48.574254663986}, {404.871260445955,48.568850974212},
-{412.883679720929,50.905386234424}, {414.906250000000,53.359375000000},
-{414.906250000000,58.843750000000}, {412.906150029990,61.293260146951},
-{107.893088734820,103.841923410053}, {409.906250000000,58.843750000000},
-{409.906250000000,53.359375000000}, {411.928820279071,55.813363765576},
-{403.097489554045,53.243649025788}, {403.083376801995,53.238245336014},
-{398.270876801995,51.378870336014}, {399.171875000000,51.546875000000},
-{396.227916881538,51.823112436334}, {393.443684341272,52.679004791715},
-{390.735423220402,54.155322135709}, {388.019379360131,56.292834537884},
-{388.019465644922,56.292756606878}, {384.707638022085,59.784010265846},
-{381.637766620894,64.074121289316}, {378.784143606701,69.212630908347},
-{376.121061144856,75.249080353999}, {371.647665561438,75.605191477986},
-{370.464152438185,73.063686657060}, {370.015625000000,70.703125000000},
-{370.044520756648,70.324121281695}, {370.435145756648,67.777246281695},
-{370.447617028527,67.703343926308}, {370.865906745049,65.807192618812},
-{370.796875000000,66.390625000000}, {370.796875000000,64.921875000000},
-{370.798846263667,65.021134419987}, {370.705096263667,62.661759419987},
-{370.768411844161,63.130101840012}, {370.174661844161,60.583226840012},
-{372.609375000000,62.515625000000}, {369.390625000000,62.515625000000},
-{370.951102014801,61.968804839717}, {367.847540591130,65.152891385727},
-{367.281250000000,68.843750000000}, {367.280055193358,68.766467365154},
-{367.373805193358,71.797717365154}, {367.374164360898,71.810366438942},
-{367.467914360898,75.435366438942}, {367.468750000000,75.500000000000},
-{367.725824718749,82.182684457229}, {368.501114546557,88.552912658777},
-{369.800717990767,94.651845116508}, {371.630733558721,100.520642342283},
-{371.621753237110,100.496339316301}, {374.875000000000,108.281250000000},
-{380.453125000000,108.281250000000}, {377.953125000000,110.781250000000},
-{377.953125000000,90.984375000000}, {378.068714530406,91.735764853864},
-{377.111545894398,87.698523592261}, {376.781250000000,83.734375000000},
-{377.206829248785,78.659016789949}, {378.466217135937,73.583858643919},
-{380.533388872650,68.577551096604}, {383.382319670119,63.708744682701},
-{383.392016540330,63.694513905236}, {386.493443824758,59.714265008269},
-{389.655589204675,56.723426531041}, {392.798881617336,54.841378264602},
-{395.843750000000,54.187500000000}, {397.450962195204,54.513260839740},
-{398.968434987734,55.403189404250}, {401.353548073644,58.351425979321},
-{402.406250000000,59.781250000000}, {404.776707744919,58.931315323480},
-{404.782327289528,58.928064874395}, {408.035404872648,57.459065914536},
-{411.906349970010,56.394239853049}, {409.906250000000,58.843750000000},
-{107.893088734820, 103.841923410053}
-};
diff --git a/perf/micro/zrusin.c b/perf/micro/zrusin.c
deleted file mode 100644
index 3dee74d23..000000000
--- a/perf/micro/zrusin.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright © 2006 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Author: Carl D. Worth <cworth@cworth.org>
- */
-
-#include "cairo-perf.h"
-
-typedef struct {
- double x;
- double y;
-} point_t;
-
-#include "zrusin-another.h"
-
-static void
-zrusin_another_path (cairo_t *cr)
-{
- unsigned int i;
-
- for (i=0; i < ARRAY_LENGTH (zrusin_another); i++)
- cairo_line_to (cr, zrusin_another[i].x, zrusin_another[i].y);
-}
-
-static cairo_time_t
-zrusin_another_tessellate (cairo_t *cr, int width, int height, int loops)
-{
- zrusin_another_path (cr);
-
- cairo_perf_timer_start ();
-
- /* We'd like to measure just tessellation without
- * rasterization. For now, we can do that with cairo_in_fill. But
- * we'll have to be careful since cairo_in_fill might eventually
- * be optimized to have an implementation that doesn't necessarily
- * include tessellation. */
- while (loops--)
- cairo_in_fill (cr, 50, 50);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-static cairo_time_t
-zrusin_another_fill (cairo_t *cr, int width, int height, int loops)
-{
- zrusin_another_path (cr);
- cairo_set_source_rgb (cr, 0.0, 0.0, 0.8); /* blue */
-
- cairo_perf_timer_start ();
-
- while (loops--)
- cairo_fill_preserve (cr);
-
- cairo_perf_timer_stop ();
-
- cairo_new_path (cr);
-
- return cairo_perf_timer_elapsed ();
-}
-
-cairo_bool_t
-zrusin_enabled (cairo_perf_t *perf)
-{
- return cairo_perf_can_run (perf, "zrusin", NULL);
-}
-
-void
-zrusin (cairo_perf_t *perf, cairo_t *cr, int width, int height)
-{
-
- cairo_perf_run (perf, "zrusin-another-tessellate", zrusin_another_tessellate, NULL);
- cairo_perf_run (perf, "zrusin-another-fill", zrusin_another_fill, NULL);
-}
diff --git a/util/Makefile.am b/util/Makefile.am
index 82d0a804c..ef7867997 100644
--- a/util/Makefile.am
+++ b/util/Makefile.am
@@ -11,11 +11,11 @@ SUBDIRS += cairo-script
endif
if CAIRO_HAS_TRACE
-SUBDIRS += cairo-trace
+#SUBDIRS += cairo-trace
if CAIRO_HAS_DLSYM
if CAIRO_HAS_SCRIPT_SURFACE
if CAIRO_HAS_TEE_SURFACE
-SUBDIRS += cairo-fdr
+#SUBDIRS += cairo-fdr
endif
endif
endif
@@ -25,7 +25,7 @@ if BUILD_SPHINX
if CAIRO_HAS_DLSYM
if CAIRO_HAS_SCRIPT_SURFACE
if CAIRO_HAS_TEE_SURFACE
-SUBDIRS += cairo-sphinx
+#SUBDIRS += cairo-sphinx
endif
endif
endif
diff --git a/util/cairo-fdr/Makefile.am b/util/cairo-fdr/Makefile.am
deleted file mode 100644
index 34215a659..000000000
--- a/util/cairo-fdr/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-cairolibdir = $(libdir)/cairo
-
-#bin_SCRIPTS = cairo-fdr
-cairolib_LTLIBRARIES = cairo-fdr.la
-
-AM_CPPFLAGS = -I$(top_srcdir)/src \
- -I$(top_builddir)/src
-
-cairo_fdr_la_SOURCES = fdr.c
-cairo_fdr_la_CPPFLAGS = $(AM_CPPFLAGS)
-cairo_fdr_la_CFLAGS = $(CAIRO_CFLAGS)
-cairo_fdr_la_LDFLAGS = -module -no-undefined
-if CAIRO_HAS_DL
-cairo_fdr_la_LIBADD = -ldl
-endif
diff --git a/util/cairo-fdr/fdr.c b/util/cairo-fdr/fdr.c
deleted file mode 100644
index 08d9c0113..000000000
--- a/util/cairo-fdr/fdr.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* cairo-fdr - a 'flight data recorder', a black box, for cairo
- *
- * Copyright © 2009 Chris Wilson
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#define _GNU_SOURCE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <cairo.h>
-#include <cairo-script.h>
-#include <cairo-tee.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <signal.h>
-
-#include <dlfcn.h>
-
-static void *_dlhandle = RTLD_NEXT;
-#define DLCALL(name, args...) ({ \
- static typeof (&name) name##_real; \
- if (name##_real == NULL) { \
- name##_real = dlsym (_dlhandle, #name); \
- if (name##_real == NULL && _dlhandle == RTLD_NEXT) { \
- _dlhandle = dlopen ("libcairo.so", RTLD_LAZY); \
- name##_real = dlsym (_dlhandle, #name); \
- assert (name##_real != NULL); \
- } \
- } \
- (*name##_real) (args); \
-})
-
-#define RINGBUFFER_SIZE 16
-static cairo_surface_t *fdr_ringbuffer[RINGBUFFER_SIZE];
-static int fdr_position;
-static int fdr_dump;
-
-static const cairo_user_data_key_t fdr_key;
-
-static void
-fdr_replay_to_script (cairo_surface_t *recording, cairo_device_t *ctx)
-{
- if (recording != NULL) {
- DLCALL (cairo_script_write_comment, ctx, "--- fdr ---", -1);
- DLCALL (cairo_script_from_recording_surface, ctx, recording);
- }
-}
-
-static void
-fdr_dump_ringbuffer (void)
-{
- cairo_device_t *ctx;
- int n;
-
- ctx = DLCALL (cairo_script_create, "/tmp/fdr.trace");
-
- for (n = fdr_position; n < RINGBUFFER_SIZE; n++)
- fdr_replay_to_script (fdr_ringbuffer[n], ctx);
-
- for (n = 0; n < fdr_position; n++)
- fdr_replay_to_script (fdr_ringbuffer[n], ctx);
-
- DLCALL (cairo_device_destroy, ctx);
-}
-
-static void
-fdr_sighandler (int sig)
-{
- fdr_dump = 1;
-}
-
-static void
-fdr_urgent_sighandler (int sig)
-{
- fdr_dump_ringbuffer ();
-}
-
-static void
-fdr_atexit (void)
-{
- if (fdr_dump)
- fdr_dump_ringbuffer ();
-}
-
-static void
-fdr_pending_signals (void)
-{
- static int initialized;
-
- if (! initialized) {
- initialized = 1;
-
- signal (SIGUSR1, fdr_sighandler);
-
- signal (SIGSEGV, fdr_urgent_sighandler);
- signal (SIGABRT, fdr_urgent_sighandler);
- atexit (fdr_atexit);
- }
-
- if (fdr_dump) {
- fdr_dump_ringbuffer ();
- fdr_dump = 0;
- }
-}
-
-static void
-fdr_get_extents (cairo_surface_t *surface,
- cairo_rectangle_t *extents)
-{
- cairo_t *cr;
-
- cr = DLCALL (cairo_create, surface);
- DLCALL (cairo_clip_extents, cr,
- &extents->x, &extents->y, &extents->width, &extents->height);
- DLCALL (cairo_destroy, cr);
-
- extents->width -= extents->x;
- extents->height -= extents->y;
-}
-
-static void
-fdr_surface_destroy (void *surface)
-{
- DLCALL (cairo_surface_destroy, surface);
-}
-
-static void
-fdr_surface_reference (void *surface)
-{
- DLCALL (cairo_surface_reference, surface);
-}
-
-static cairo_surface_t *
-fdr_surface_get_tee (cairo_surface_t *surface)
-{
- return DLCALL (cairo_surface_get_user_data, surface, &fdr_key);
-}
-
-static cairo_surface_t *
-fdr_tee_surface_index (cairo_surface_t *surface, int index)
-{
- return DLCALL (cairo_tee_surface_index, surface, index);
-}
-
-cairo_t *
-cairo_create (cairo_surface_t *surface)
-{
- cairo_surface_t *record, *tee;
-
- fdr_pending_signals ();
-
- tee = fdr_surface_get_tee (surface);
- if (tee == NULL) {
- cairo_rectangle_t extents;
- cairo_content_t content;
-
- fdr_get_extents (surface, &extents);
- content = DLCALL (cairo_surface_get_content, surface);
-
- tee = DLCALL (cairo_tee_surface_create, surface);
- record = DLCALL (cairo_recording_surface_create, content, &extents);
- DLCALL (cairo_tee_surface_add, tee, record);
-
- DLCALL (cairo_surface_set_user_data, surface,
- &fdr_key, tee, fdr_surface_destroy);
- } else {
- int n;
-
- record = fdr_tee_surface_index (tee, 1);
-
- /* update the position of the recording surface in the ringbuffer */
- for (n = 0; n < RINGBUFFER_SIZE; n++) {
- if (record == fdr_ringbuffer[n]) {
- fdr_ringbuffer[n] = NULL;
- break;
- }
- }
- }
-
- fdr_surface_destroy (fdr_ringbuffer[fdr_position]);
- fdr_ringbuffer[fdr_position] = record;
- fdr_position = (fdr_position + 1) % RINGBUFFER_SIZE;
-
- return DLCALL (cairo_create, tee);
-}
-
-static void
-fdr_remove_tee (cairo_surface_t *surface)
-{
- fdr_surface_reference (surface);
- DLCALL (cairo_surface_set_user_data, surface, &fdr_key, NULL, NULL);
- fdr_surface_destroy (surface);
-}
-
-void
-cairo_destroy (cairo_t *cr)
-{
- cairo_surface_t *tee;
-
- tee = DLCALL (cairo_get_target, cr);
- DLCALL (cairo_destroy, cr);
-
- if (DLCALL (cairo_surface_get_reference_count, tee) == 1)
- fdr_remove_tee (fdr_tee_surface_index (tee, 0));
-}
-
-void
-cairo_pattern_destroy (cairo_pattern_t *pattern)
-{
- if (DLCALL (cairo_pattern_get_type, pattern) == CAIRO_PATTERN_TYPE_SURFACE) {
- cairo_surface_t *surface;
-
- if (DLCALL (cairo_pattern_get_surface, pattern, &surface) == CAIRO_STATUS_SUCCESS &&
- DLCALL (cairo_surface_get_type, surface) == CAIRO_SURFACE_TYPE_TEE &&
- DLCALL (cairo_surface_get_reference_count, surface) == 2)
- {
- fdr_remove_tee (fdr_tee_surface_index (surface, 0));
- }
- }
-
- DLCALL (cairo_pattern_destroy, pattern);
-}
-
-cairo_surface_t *
-cairo_get_target (cairo_t *cr)
-{
- cairo_surface_t *tee;
-
- tee = DLCALL (cairo_get_target, cr);
- return fdr_tee_surface_index (tee, 0);
-}
-
-cairo_surface_t *
-cairo_get_group_target (cairo_t *cr)
-{
- cairo_surface_t *tee;
-
- tee = DLCALL (cairo_get_group_target, cr);
- return fdr_tee_surface_index (tee, 0);
-}
-
-cairo_pattern_t *
-cairo_pattern_create_for_surface (cairo_surface_t *surface)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- return DLCALL (cairo_pattern_create_for_surface, surface);
-}
-
-cairo_status_t
-cairo_pattern_get_surface (cairo_pattern_t *pattern,
- cairo_surface_t **surface)
-{
- cairo_status_t status;
- cairo_surface_t *tee;
-
- status = DLCALL (cairo_pattern_get_surface, pattern, surface);
- if (status != CAIRO_STATUS_SUCCESS)
- return status;
-
- tee = fdr_surface_get_tee (*surface);
- if (tee != NULL)
- *surface = tee;
-
- return CAIRO_STATUS_SUCCESS;
-}
-
-void
-cairo_set_source_surface (cairo_t *cr,
- cairo_surface_t *surface,
- double x, double y)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- DLCALL (cairo_set_source_surface, cr, surface, x, y);
-}
-
-cairo_surface_t *
-cairo_surface_create_similar (cairo_surface_t *surface,
- cairo_content_t content,
- int width, int height)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- return DLCALL (cairo_surface_create_similar,
- surface, content, width, height);
-}
-
-cairo_surface_t *
-cairo_surface_create_for_rectangle (cairo_surface_t *surface,
- double x,
- double y,
- double width,
- double height)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- return DLCALL (cairo_surface_create_for_rectangle,
- surface, x, y, width, height);
-}
diff --git a/util/cairo-sphinx/.gitignore b/util/cairo-sphinx/.gitignore
deleted file mode 100644
index 56ecd5de8..000000000
--- a/util/cairo-sphinx/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-cairo-sphinx
diff --git a/util/cairo-sphinx/Makefile.am b/util/cairo-sphinx/Makefile.am
deleted file mode 100644
index 10bc10c27..000000000
--- a/util/cairo-sphinx/Makefile.am
+++ /dev/null
@@ -1,43 +0,0 @@
-cairolibdir = $(libdir)/cairo
-
-cairolib_LTLIBRARIES = cairo-sphinx.la
-bin_PROGRAMS = cairo-sphinx
-
-AM_CPPFLAGS = -I$(top_srcdir)/src \
- -I$(top_builddir)/src \
- -I$(top_srcdir)/boilerplate \
- -I$(top_srcdir)/util/cairo-script
-
-cairo_sphinx_la_SOURCES = fdr.c
-cairo_sphinx_la_CPPFLAGS = $(AM_CPPFLAGS)
-cairo_sphinx_la_CFLAGS = $(CAIRO_CFLAGS)
-cairo_sphinx_la_LDFLAGS = -module -no-undefined
-if CAIRO_HAS_DL
-cairo_sphinx_la_LIBADD = -ldl
-endif
-
-cairo_sphinx_SOURCES = sphinx.c
-cairo_sphinx_CPPFLAGS = $(AM_CPPFLAGS) -DLIBDIR="\"$(cairolibdir)\""
-cairo_sphinx_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS) $(glib_CFLAGS)
-cairo_sphinx_LDADD = \
- $(real_pthread_LIBS) \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la \
- $(glib_LIBS) \
- $(CAIRO_LDADD) \
- $(shm_LIBS)
-cairo_sphinx_DEPENDENCIES = \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la
-
-# Install rules to rebuild the libraries and add explicit dependencies
-$(top_builddir)/boilerplate/libcairoboilerplate.la: $(top_builddir)/src/libcairo.la
- cd $(top_builddir)/boilerplate && $(MAKE) $(AM_MAKEFLAGS) libcairoboilerplate.la
-
-$(top_builddir)/src/libcairo.la:
- cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) libcairo.la
-
-$(top_builddir)/util/cairo-script/libcairo-script-interpreter.la: $(top_builddir)/src/libcairo.la
- cd $(top_builddir)/util/cairo-script && $(MAKE) $(AM_MAKEFLAGS) libcairo-script-interpreter.la
diff --git a/util/cairo-sphinx/fdr.c b/util/cairo-sphinx/fdr.c
deleted file mode 100644
index aeda89bcd..000000000
--- a/util/cairo-sphinx/fdr.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* cairo-fdr - a 'flight data recorder', a black box, for cairo
- *
- * Copyright © 2009 Chris Wilson
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#define _GNU_SOURCE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <cairo.h>
-#include <cairo-script.h>
-#include <cairo-tee.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <assert.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <dlfcn.h>
-
-static void *_dlhandle = RTLD_NEXT;
-#define DLCALL(name, args...) ({ \
- static typeof (&name) name##_real; \
- if (name##_real == NULL) { \
- name##_real = dlsym (_dlhandle, #name); \
- if (name##_real == NULL && _dlhandle == RTLD_NEXT) { \
- _dlhandle = dlopen ("libcairo.so", RTLD_LAZY); \
- name##_real = dlsym (_dlhandle, #name); \
- assert (name##_real != NULL); \
- } \
- } \
- (*name##_real) (args); \
-})
-
-static cairo_device_t *fdr_context;
-static const cairo_user_data_key_t fdr_key;
-
-static void
-fdr_get_extents (cairo_surface_t *surface,
- cairo_rectangle_t *extents)
-{
- cairo_t *cr;
-
- cr = DLCALL (cairo_create, surface);
- DLCALL (cairo_clip_extents, cr,
- &extents->x, &extents->y, &extents->width, &extents->height);
- DLCALL (cairo_destroy, cr);
-
- extents->width -= extents->x;
- extents->height -= extents->y;
-}
-
-static void
-fdr_surface_destroy (void *surface)
-{
- DLCALL (cairo_surface_destroy, surface);
-}
-
-static void
-fdr_surface_reference (void *surface)
-{
- DLCALL (cairo_surface_reference, surface);
-}
-
-static cairo_surface_t *
-fdr_surface_get_tee (cairo_surface_t *surface)
-{
- return DLCALL (cairo_surface_get_user_data, surface, &fdr_key);
-}
-
-static cairo_surface_t *
-fdr_tee_surface_index (cairo_surface_t *surface, int index)
-{
- return DLCALL (cairo_tee_surface_index, surface, index);
-}
-
-static cairo_status_t
-fdr_write (void *closure, const unsigned char *data, unsigned int len)
-{
- int fd = (int) (intptr_t) closure;
- while (len) {
- int ret = write (fd, data, len);
- if (ret < 0) {
- switch (errno) {
- case EAGAIN:
- case EINTR:
- continue;
- default:
- return CAIRO_STATUS_WRITE_ERROR;
- }
- } else if (ret == 0) {
- return CAIRO_STATUS_WRITE_ERROR;
- } else {
- data += ret;
- len -= ret;
- }
- }
- return CAIRO_STATUS_SUCCESS;
-}
-
-cairo_t *
-cairo_create (cairo_surface_t *surface)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee == NULL) {
- cairo_surface_t *script;
- cairo_rectangle_t extents;
- cairo_content_t content;
-
- if (fdr_context == NULL) {
- const char *env = getenv ("CAIRO_SPHINX_FD");
- int fd = env ? atoi (env) : 1;
- fdr_context = DLCALL (cairo_script_create_for_stream,
- fdr_write, (void *) (intptr_t) fd);
- }
-
- fdr_get_extents (surface, &extents);
- content = DLCALL (cairo_surface_get_content, surface);
-
- tee = DLCALL (cairo_tee_surface_create, surface);
- script = DLCALL (cairo_script_surface_create,
- fdr_context, content, extents.width, extents.height);
- DLCALL (cairo_tee_surface_add, tee, script);
-
- DLCALL (cairo_surface_set_user_data, surface,
- &fdr_key, tee, fdr_surface_destroy);
- }
-
- return DLCALL (cairo_create, tee);
-}
-
-static void
-fdr_remove_tee (cairo_surface_t *surface)
-{
- fdr_surface_reference (surface);
- DLCALL (cairo_surface_set_user_data, surface, &fdr_key, NULL, NULL);
- fdr_surface_destroy (surface);
-}
-
-void
-cairo_destroy (cairo_t *cr)
-{
- cairo_surface_t *tee;
-
- tee = DLCALL (cairo_get_target, cr);
- DLCALL (cairo_destroy, cr);
-
- if (DLCALL (cairo_surface_get_reference_count, tee) == 1)
- fdr_remove_tee (fdr_tee_surface_index (tee, 0));
-}
-
-void
-cairo_pattern_destroy (cairo_pattern_t *pattern)
-{
- if (DLCALL (cairo_pattern_get_type, pattern) == CAIRO_PATTERN_TYPE_SURFACE) {
- cairo_surface_t *surface;
-
- if (DLCALL (cairo_pattern_get_surface, pattern, &surface) == CAIRO_STATUS_SUCCESS &&
- DLCALL (cairo_surface_get_type, surface) == CAIRO_SURFACE_TYPE_TEE &&
- DLCALL (cairo_surface_get_reference_count, surface) == 2)
- {
- fdr_remove_tee (fdr_tee_surface_index (surface, 0));
- }
- }
-
- DLCALL (cairo_pattern_destroy, pattern);
-}
-
-cairo_surface_t *
-cairo_get_target (cairo_t *cr)
-{
- cairo_surface_t *tee;
-
- tee = DLCALL (cairo_get_target, cr);
- return fdr_tee_surface_index (tee, 0);
-}
-
-cairo_surface_t *
-cairo_get_group_target (cairo_t *cr)
-{
- cairo_surface_t *tee;
-
- tee = DLCALL (cairo_get_group_target, cr);
- return fdr_tee_surface_index (tee, 0);
-}
-
-cairo_pattern_t *
-cairo_pattern_create_for_surface (cairo_surface_t *surface)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- return DLCALL (cairo_pattern_create_for_surface, surface);
-}
-
-cairo_status_t
-cairo_pattern_get_surface (cairo_pattern_t *pattern,
- cairo_surface_t **surface)
-{
- cairo_status_t status;
- cairo_surface_t *tee;
-
- status = DLCALL (cairo_pattern_get_surface, pattern, surface);
- if (status != CAIRO_STATUS_SUCCESS)
- return status;
-
- tee = fdr_surface_get_tee (*surface);
- if (tee != NULL)
- *surface = tee;
-
- return CAIRO_STATUS_SUCCESS;
-}
-
-void
-cairo_set_source_surface (cairo_t *cr,
- cairo_surface_t *surface,
- double x, double y)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- DLCALL (cairo_set_source_surface, cr, surface, x, y);
-}
-
-cairo_surface_t *
-cairo_surface_create_similar (cairo_surface_t *surface,
- cairo_content_t content,
- int width, int height)
-{
- cairo_surface_t *tee;
-
- tee = fdr_surface_get_tee (surface);
- if (tee != NULL)
- surface = tee;
-
- return DLCALL (cairo_surface_create_similar,
- surface, content, width, height);
-}
diff --git a/util/cairo-sphinx/sphinx.c b/util/cairo-sphinx/sphinx.c
deleted file mode 100644
index 238d40064..000000000
--- a/util/cairo-sphinx/sphinx.c
+++ /dev/null
@@ -1,1545 +0,0 @@
-/*
- * The intention for sphinx is for detection of rendering errors inside
- * applications by simultaneously rendering on to the target device and on
- * an image surface and comparing the two. If it found a discrepancy, it
- * would then dump the trace that reproduces the error. (Then apply
- * delta-debugging to reduce that down to a minimal trace.)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <sys/poll.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <errno.h>
-#include <assert.h>
-#include <pthread.h>
-
-#include <cairo.h>
-#include <cairo-script.h>
-#include <cairo-script-interpreter.h>
-#include <cairo-boilerplate.h>
-
-#include <glib.h> /* for checksumming */
-
-#ifndef CAIRO_HAS_REAL_PTHREAD
-# error "cairo-sphinx needs real pthreads"
-#endif
-
-#ifndef MAP_NORESERVE
-#define MAP_NORESERVE 0
-#endif
-
-#define DATA_SIZE (256 << 20)
-#define SHM_PATH_XXX "/shmem-cairo-sphinx"
-
-struct client {
- int sk;
- const cairo_boilerplate_target_t *target;
- cairo_surface_t *surface;
- void *base;
-
- cairo_script_interpreter_t *csi;
- struct context_closure {
- struct context_closure *next;
- unsigned long id;
- cairo_t *context;
- cairo_surface_t *surface;
- cairo_surface_t *original;
- } *contexts;
-
- unsigned long context_id;
-};
-
-struct surface_tag {
- long width, height;
-};
-static const cairo_user_data_key_t surface_tag;
-
-static int
-client_socket (const char *socket_path);
-
-static int
-writen (int fd, const void *ptr, int len)
-{
-#if 1
- const uint8_t *data = ptr;
- while (len) {
- int ret = write (fd, data, len);
- if (ret < 0) {
- switch (errno) {
- case EAGAIN:
- case EINTR:
- continue;
- default:
- return FALSE;
- }
- } else if (ret == 0) {
- return FALSE;
- } else {
- data += ret;
- len -= ret;
- }
- }
- return TRUE;
-#else
- int ret = send (fd, ptr, len, 0);
- return ret == len;
-#endif
-}
-
-static int
-readn (int fd, void *ptr, int len)
-{
-#if 0
- uint8_t *data = ptr;
- while (len) {
- int ret = read (fd, data, len);
- if (ret < 0) {
- switch (errno) {
- case EAGAIN:
- case EINTR:
- continue;
- default:
- return FALSE;
- }
- } else if (ret == 0) {
- return FALSE;
- } else {
- data += ret;
- len -= ret;
- }
- }
- return TRUE;
-#else
- int ret = recv (fd, ptr, len, MSG_WAITALL);
- return ret == len;
-#endif
-}
-static int
-open_devnull_to_fd (int want_fd, int flags)
-{
- int error;
- int got_fd;
-
- close (want_fd);
-
- got_fd = open("/dev/null", flags | O_CREAT, 0700);
- if (got_fd == -1)
- return -1;
-
- error = dup2 (got_fd, want_fd);
- close (got_fd);
-
- return error;
-}
-
-static int
-daemonize (void)
-{
- void (*oldhup) (int);
-
- /* Let the parent go. */
- switch (fork ()) {
- case -1: return -1;
- case 0: break;
- default: _exit (0);
- }
-
- /* Become session leader. */
- if (setsid () == -1)
- return -1;
-
- /* Refork to yield session leadership. */
- oldhup = signal (SIGHUP, SIG_IGN);
- switch (fork ()) {
- case -1: return -1;
- case 0: break;
- default: _exit (0);
- }
- signal (SIGHUP, oldhup);
-
- /* Establish stdio. */
- if (open_devnull_to_fd (0, O_RDONLY) == -1)
- return -1;
- if (open_devnull_to_fd (1, O_WRONLY | O_APPEND) == -1)
- return -1;
- if (dup2 (1, 2) == -1)
- return -1;
-
- return 0;
-}
-
-static int
-server_socket (const char *socket_path)
-{
- long flags;
- struct sockaddr_un addr;
- int sk;
-
- unlink (socket_path);
-
- sk = socket (PF_UNIX, SOCK_STREAM, 0);
- if (sk == -1)
- return -1;
-
- memset (&addr, 0, sizeof (addr));
- addr.sun_family = AF_UNIX;
- strcpy (addr.sun_path, socket_path);
- if (bind (sk, (struct sockaddr *) &addr, sizeof (addr)) == -1) {
- close (sk);
- return -1;
- }
-
- flags = fcntl (sk, F_GETFL);
- if (flags == -1 || fcntl (sk, F_SETFL, flags | O_NONBLOCK) == -1) {
- close (sk);
- return -1;
- }
-
- if (listen (sk, 5) == -1) {
- close (sk);
- return -1;
- }
-
- return sk;
-}
-
-static int
-readline (int fd, char *line, int max)
-{
- int len = 0;
- do {
- int ret = read (fd, &line[len], 1);
- if (ret <= 0)
- return -1;
- } while (line[len] != '\n' && ++len < max);
- line[len] = '\0';
- return len;
-}
-
-struct clients {
- int count, size;
- int complete;
-
- cairo_surface_t *recording;
- unsigned long serial;
-
- struct client_info {
- int sk;
- int trace;
- unsigned long image_serial;
- cairo_surface_t *image;
- char *name;
- char *target;
- char *reference;
-
- uint8_t *out_buf;
- int out_len;
- int out_size;
- } *clients;
- const char *shm_path;
- unsigned long offset;
- uint8_t *base;
-};
-
-static void *
-clients_shm (const char *shm_path)
-{
- void *base;
- int fd;
-
- shm_unlink (shm_path);
- fd = shm_open (shm_path, O_RDWR | O_EXCL | O_CREAT, 0777);
- if (fd == -1)
- return MAP_FAILED;
-
- if (ftruncate (fd, DATA_SIZE) == -1) {
- close (fd);
- return MAP_FAILED;
- }
-
- base = mmap (NULL, DATA_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- close (fd);
-
- return base;
-}
-
-static int
-clients_init (struct clients *clients)
-{
- clients->count = 0;
- clients->complete = 0;
- clients->size = 4;
- clients->clients = xmalloc (clients->size * sizeof (struct client_info));
-
- clients->shm_path = SHM_PATH_XXX;
- clients->base = clients_shm (clients->shm_path);
- if (clients->base == MAP_FAILED)
- return -1;
- clients->offset = 0;
-
- clients->recording = NULL;
- clients->serial = 0;
-
- return 0;
-}
-
-static void
-clients_add_command (struct clients *clients, int fd, char *info)
-{
- struct client_info *c;
- char buf[1024];
- int len;
- char *str;
-
- if (clients->count == clients->size) {
- clients->size *= 2;
- clients->clients = xrealloc (clients->clients,
- clients->size * sizeof (struct client_info));
- }
-
- c = &clients->clients[clients->count++];
- c->sk = fd;
- c->trace = -1;
- c->image_serial = 0;
- c->image = NULL;
- c->name = c->target = c->reference = NULL;
-
- c->out_size = 8192;
- c->out_buf = xmalloc (c->out_size);
- c->out_len = 0;
-
- str = strstr (info, "name=");
- if (str != NULL) {
- char *sp = strchr (str + 5, ' ');
- int len;
- if (sp)
- len = sp - str - 5;
- else
- len = strlen (str + 5);
- c->name = xmalloc (len + 1);
- memcpy (c->name, str + 5, len);
- c->name[len] = '\0';
- }
-
- str = strstr (info, "target=");
- if (str != NULL) {
- char *sp = strchr (str + 7, ' ');
- int len;
- if (sp)
- len = sp - str - 7;
- else
- len = strlen (str + 7);
- c->target = xmalloc (len + 1);
- memcpy (c->target, str + 7, len);
- c->target[len] = '\0';
- }
-
- str = strstr (info, "reference=");
- if (str != NULL) {
- char *sp = strchr (str + 10, ' ');
- int len;
- if (sp)
- len = sp - str - 10;
- else
- len = strlen (str + 10);
- c->reference = xmalloc (len + 1);
- memcpy (c->reference, str + 10, len);
- c->reference[len] = '\0';
- }
-
- len = sprintf (buf, "%s\n", clients->shm_path);
- writen (fd, buf, len);
-}
-
-static void
-clients_add_trace (struct clients *clients, int fd, char *info)
-{
- char *str, *sp;
- char *name;
- int i;
-
- str = strstr (info, "name=");
- assert (str != NULL);
- sp = strchr (str + 5, ' ');
- if (sp)
- i = sp - str - 5;
- else
- i = strlen (str + 5);
-
- name = xmalloc (i + 1);
- memcpy (name, str + 5, i);
- name[i] = '\0';
-
- for (i = 0; i < clients->count; i++) {
- struct client_info *c = &clients->clients[i];
- if (strcmp (name, c->name) == 0) {
- c->trace = fd;
- break;
- }
- }
-
- free (name);
-}
-
-static int
-clients_image (struct clients *clients, int fd, char *info)
-{
- struct client_info *c = NULL;
- int format, width, height, stride, size;
- int i;
-
- for (i = 0; i < clients->count; i++) {
- if (clients->clients[i].sk == fd) {
- c = &clients->clients[i];
- break;
- }
- }
-
- if (c == NULL)
- return 0;
-
- if (sscanf (info, "%lu %d %d %d %d",
- &c->image_serial, &format, &width, &height, &stride) != 5)
- {
- return 0;
- }
-
- size = height * stride;
- size = (size + 4095) & -4096;
- assert (clients->offset + size <= DATA_SIZE);
-
- c->image =
- cairo_image_surface_create_for_data (clients->base + clients->offset,
- format, width, height, stride);
-
- if (! writen (fd, &clients->offset, sizeof (clients->offset)))
- return 0;
-
- clients->offset += size;
-
- return 1;
-}
-
-static int
-u8_cmp (const void *A, const void *B)
-{
- const uint8_t *a = A, *b = B;
- return (int) *a - (int) *b;
-}
-
-static uint8_t
-median (uint8_t *values, int count)
-{
- /* XXX could use a fast median here if we cared */
- qsort (values, count, 1, u8_cmp);
- return values[count/2];
-}
-
-static uint32_t
-get_pixel32 (int x, int y, const uint8_t *data, int stride)
-{
- return ((uint32_t *)(data + y * stride))[x];
-}
-
-static uint8_t
-get_median_32 (int x, int y, int channel,
- const uint8_t *data, int width, int height, int stride)
-{
- uint8_t neighbourhood[25];
- int cnt = 0;
- int xx, yy;
-
- for (yy = y - 2; yy <= y + 2; yy++) {
- if (yy < 0)
- continue;
- if (yy >= height)
- continue;
-
- for (xx = x - 2; xx <= x + 2; xx++) {
- if (xx < 0)
- continue;
- if (xx >= width)
- continue;
-
- neighbourhood[cnt++] = (get_pixel32 (xx, yy, data, stride) >> (channel*8)) & 0xff;
- }
- }
-
- return median (neighbourhood, cnt);
-}
-
-static uint8_t
-get_pixel8 (int x, int y, const uint8_t *data, int stride)
-{
- return data[y * stride + x];
-}
-
-static uint8_t
-get_median_8 (int x, int y, const uint8_t *data, int width, int height, int stride)
-{
- uint8_t neighbourhood[25];
- int cnt = 0;
- int xx, yy;
-
- for (yy = y - 2; yy <= y + 2; yy++) {
- if (yy < 0)
- continue;
- if (yy >= height)
- continue;
-
- for (xx = x - 2; xx <= x + 2; xx++) {
- if (xx < 0)
- continue;
- if (xx >= width)
- continue;
-
- neighbourhood[cnt++] = get_pixel8 (xx, yy, data, stride);
- }
- }
-
- return median (neighbourhood, cnt);
-}
-
-static cairo_bool_t
-compare_images (cairo_surface_t *a,
- cairo_surface_t *b)
-{
- int width, height, stride;
- const uint8_t *aa, *bb;
- int x, y;
-
- if (cairo_surface_status (a) || cairo_surface_status (b))
- return FALSE;
-
- if (cairo_surface_get_type (a) != cairo_surface_get_type (b))
- return FALSE;
-
- if (cairo_image_surface_get_format (a) != cairo_image_surface_get_format (b))
- return FALSE;
-
- if (cairo_image_surface_get_width (a) != cairo_image_surface_get_width (b))
- return FALSE;
-
- if (cairo_image_surface_get_height (a) != cairo_image_surface_get_height (b))
- return FALSE;
-
- if (cairo_image_surface_get_stride (a) != cairo_image_surface_get_stride (b))
- return FALSE;
-
-
- width = cairo_image_surface_get_width (a);
- height = cairo_image_surface_get_height (a);
- stride = cairo_image_surface_get_stride (a);
-
- aa = cairo_image_surface_get_data (a);
- bb = cairo_image_surface_get_data (b);
- switch (cairo_image_surface_get_format (a)) {
- case CAIRO_FORMAT_ARGB32:
- for (y = 0; y < height; y++) {
- const uint32_t *ua = (uint32_t *) aa;
- const uint32_t *ub = (uint32_t *) bb;
- for (x = 0; x < width; x++) {
- if (ua[x] != ub[x]) {
- int channel;
-
- for (channel = 0; channel < 4; channel++) {
- unsigned va, vb, diff;
-
- va = (ua[x] >> (channel*8)) & 0xff;
- vb = (ub[x] >> (channel*8)) & 0xff;
- diff = abs (va - vb);
- if (diff > 1) {
- va = get_median_32 (x, y, channel, aa, width, height, stride);
- vb = get_median_32 (x, y, channel, bb, width, height, stride);
- diff = abs (va - vb);
- if (diff > 1)
- return FALSE;
- }
- }
- }
- }
- aa += stride;
- bb += stride;
- }
- break;
-
- case CAIRO_FORMAT_RGB24:
- for (y = 0; y < height; y++) {
- const uint32_t *ua = (uint32_t *) aa;
- const uint32_t *ub = (uint32_t *) bb;
- for (x = 0; x < width; x++) {
- if ((ua[x] & 0x00ffffff) != (ub[x] & 0x00ffffff)) {
- int channel;
-
- for (channel = 0; channel < 3; channel++) {
- unsigned va, vb, diff;
-
- va = (ua[x] >> (channel*8)) & 0xff;
- vb = (ub[x] >> (channel*8)) & 0xff;
- diff = abs (va - vb);
- if (diff > 1) {
- va = get_median_32 (x, y, channel, aa, width, height, stride);
- vb = get_median_32 (x, y, channel, bb, width, height, stride);
- diff = abs (va - vb);
- if (diff > 1)
- return FALSE;
- }
- }
- }
- }
- aa += stride;
- bb += stride;
- }
- break;
-
- case CAIRO_FORMAT_A8:
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
- if (aa[x] != bb[x]) {
- unsigned diff = abs (aa[x] - bb[x]);
- if (diff > 1) {
- uint8_t va, vb;
-
- va = get_median_8 (x, y, aa, width, height, stride);
- vb = get_median_8 (x, y, bb, width, height, stride);
- diff = abs (va - vb);
- if (diff > 1)
- return FALSE;
- }
-
- }
- }
- aa += stride;
- bb += stride;
- }
- break;
-
- case CAIRO_FORMAT_A1:
- width /= 8;
- for (y = 0; y < height; y++) {
- if (memcmp (aa, bb, width))
- return FALSE;
- aa += stride;
- bb += stride;
- }
- break;
-
- case CAIRO_FORMAT_INVALID:
- case CAIRO_FORMAT_RGB16_565: /* XXX */
- break;
- }
-
- return TRUE;
-}
-
-static int
-check_images (struct clients *clients)
-{
- int i, j;
-
- for (i = 0; i < clients->count; i++) {
- struct client_info *c = &clients->clients[i];
-
- if (c->reference == NULL)
- continue;
-
- for (j = 0; j < clients->count; j++) {
- struct client_info *ref = &clients->clients[j];
-
- if (strcmp (c->reference, ref->name))
- continue;
-
- if (! compare_images (c->image, ref->image))
- return 0;
- }
- }
-
- return 1;
-}
-
-static gchar *
-checksum (const char *filename)
-{
- gchar *str = NULL;
- gchar *data;
- gsize len;
-
- if (g_file_get_contents (filename, &data, &len, NULL)) {
- str = g_compute_checksum_for_data (G_CHECKSUM_SHA1, (guchar *) data, len);
- g_free (data);
- }
-
- return str;
-}
-
-static void
-write_trace (struct clients *clients)
-{
- cairo_device_t *ctx;
- gchar *csum;
- char buf[4096];
- int i;
-
- mkdir ("output", 0777);
-
- ctx = cairo_script_create ("output/cairo-sphinx.trace");
- cairo_script_from_recording_surface (ctx, clients->recording);
- cairo_device_destroy (ctx);
-
- csum = checksum ("output/cairo-sphinx.trace");
-
- sprintf (buf, "output/%s.trace", csum);
- if (! g_file_test (buf, G_FILE_TEST_EXISTS)) {
- rename ("output/cairo-sphinx.trace", buf);
-
- sprintf (buf, "output/%s.recording.png", csum);
- cairo_surface_write_to_png (clients->recording, buf);
-
- for (i = 0; i < clients->count; i++) {
- struct client_info *c = &clients->clients[i];
- if (c->image != NULL) {
- sprintf (buf, "output/%s.%s.png", csum, c->name);
- cairo_surface_write_to_png (c->image, buf);
- }
- }
- }
-}
-
-static void
-clients_complete (struct clients *clients, int fd)
-{
- int i;
-
- for (i = 0; i < clients->count; i++) {
- if (clients->clients[i].sk == fd) {
- break;
- }
- }
- if (i == clients->count)
- return;
-
- if (++clients->complete != clients->count)
- return;
-
- clients->offset = 0;
- clients->complete = 0;
-
- if (! check_images (clients))
- write_trace (clients);
-
- /* ack */
- for (i = 0; i < clients->count; i++) {
- struct client_info *c = &clients->clients[i];
-
- cairo_surface_destroy (c->image);
- c->image = NULL;
-
- if (! writen (c->sk, &clients->serial, sizeof (clients->serial)))
- continue;
-
- c->image_serial = 0;
- }
-
- clients->recording = NULL;
- clients->serial = 0;
-}
-
-static void
-clients_recording (struct clients *clients, int fd, char *info)
-{
- sscanf (info, "%p %lu", &clients->recording, &clients->serial);
- clients_complete (clients, fd);
-}
-
-static void
-clients_remove (struct clients *clients, int fd)
-{
- int i, j;
-
- for (i = 0; i < clients->count; i++) {
- struct client_info *c = &clients->clients[i];
- if (c->sk == fd) {
- free (c->out_buf);
- break;
- }
- }
-
- for (j = i++; i < clients->count; i++)
- clients->clients[j] = clients->clients[i];
-
- clients->count = j;
-}
-
-static void
-clients_send_trace (struct clients *clients,
- const char * const line, const int len)
-{
- int i;
-
- for (i = 0; i < clients->count; i++) {
- struct client_info *c = &clients->clients[i];
- int ret, rem = len;
-
- if (c->trace == -1)
- continue;
-
- if (c->out_len) {
- ret = write (c->trace, c->out_buf, c->out_len);
- if (ret > 0) {
- c->out_len -= ret;
- if (c->out_len)
- memmove (c->out_buf, c->out_buf + ret, c->out_len);
- }
- }
-
- if (! c->out_len) {
- ret = write (c->trace, line, rem);
- if (ret > 0)
- rem -= ret;
- }
-
- if (rem) {
- if (c->out_len + rem > c->out_size) {
- c->out_size *= 2;
- c->out_buf = xrealloc (c->out_buf, c->out_size);
- }
-
- memcpy (c->out_buf + c->out_len, line, rem);
- c->out_len += rem;
- }
- }
-}
-
-static void
-clients_fini (struct clients *clients)
-{
- shm_unlink (clients->shm_path);
- munmap (clients->base, DATA_SIZE);
- free (clients->clients);
-}
-
-static int
-nonblocking (int fd)
-{
- long flags;
-
- flags = fcntl (fd, F_GETFL);
- if (flags == -1)
- return -1;
-
- return fcntl (fd, F_SETFL, flags | O_NONBLOCK);
-}
-
-static void *
-request_image (struct client *c,
- struct context_closure *closure,
- cairo_format_t format,
- int width, int height, int stride)
-{
- char buf[1024];
- unsigned long offset = -1;
- int len;
-
- assert (format != CAIRO_FORMAT_INVALID);
-
- len = sprintf (buf, ".image %lu %d %d %d %d\n",
- closure->id, format, width, height, stride);
- writen (c->sk, buf, len);
-
- readn (c->sk, &offset, sizeof (offset));
- if (offset == (unsigned long) -1)
- return NULL;
-
- return (uint8_t *) c->base + offset;
-}
-
-static cairo_format_t
-format_for_content (cairo_content_t content)
-{
- switch (content) {
- case CAIRO_CONTENT_ALPHA:
- return CAIRO_FORMAT_A8;
- case CAIRO_CONTENT_COLOR:
- return CAIRO_FORMAT_RGB24;
- default:
- case CAIRO_CONTENT_COLOR_ALPHA:
- return CAIRO_FORMAT_ARGB32;
- }
-}
-
-static void
-get_surface_size (cairo_surface_t *surface,
- int *width, int *height,
- cairo_format_t *format)
-{
- if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE) {
- *width = cairo_image_surface_get_width (surface);
- *height = cairo_image_surface_get_height (surface);
- *format = cairo_image_surface_get_format (surface);
- } else {
- struct surface_tag *tag;
-
- tag = cairo_surface_get_user_data (surface, &surface_tag);
- if (tag != NULL) {
- *width = tag->width;
- *height = tag->height;
- } else {
- double x0, x1, y0, y1;
- cairo_t *cr;
-
- /* presumably created using cairo_surface_create_similar() */
- cr = cairo_create (surface);
- cairo_clip_extents (cr, &x0, &y0, &x1, &y1);
- cairo_destroy (cr);
-
- tag = xmalloc (sizeof (*tag));
- *width = tag->width = ceil (x1 - x0);
- *height = tag->height = ceil (y1 - y0);
-
- if (cairo_surface_set_user_data (surface, &surface_tag, tag, free))
- exit (-1);
- }
- }
-}
-
-
-static void
-send_surface (struct client *c,
- struct context_closure *closure)
-{
- cairo_surface_t *source = closure->surface;
- cairo_surface_t *image;
- cairo_format_t format = CAIRO_FORMAT_INVALID;
- cairo_t *cr;
- int width, height, stride;
- void *data;
- unsigned long serial;
-
- get_surface_size (source, &width, &height, &format);
- if (format == CAIRO_FORMAT_INVALID)
- format = format_for_content (cairo_surface_get_content (source));
-
- stride = cairo_format_stride_for_width (format, width);
-
- data = request_image (c, closure, format, width, height, stride);
- if (data == NULL)
- exit (-1);
-
- image = cairo_image_surface_create_for_data (data,
- format,
- width, height,
- stride);
- cr = cairo_create (image);
- cairo_surface_destroy (image);
-
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- cairo_set_source_surface (cr, source, 0, 0);
- cairo_paint (cr);
- cairo_destroy (cr);
-
- /* signal completion */
- writen (c->sk, ".complete\n", strlen (".complete\n"));
-
- /* wait for image check */
- serial = 0;
- readn (c->sk, &serial, sizeof (serial));
- if (serial != closure->id)
- exit (-1);
-}
-
-static void
-send_recording (struct client *c,
- struct context_closure *closure)
-{
- cairo_surface_t *source = closure->surface;
- char buf[1024];
- int len;
- unsigned long serial;
-
- assert (cairo_surface_get_type (source) == CAIRO_SURFACE_TYPE_RECORDING);
- len = sprintf (buf, ".recording %p %lu\n", source, closure->id);
- writen (c->sk, buf, len);
-
- /* wait for image check */
-
- serial = 0;
- readn (c->sk, &serial, sizeof (serial));
- if (serial != closure->id)
- exit (-1);
-}
-
-static cairo_surface_t *
-_surface_create (void *closure,
- cairo_content_t content,
- double width, double height,
- long uid)
-{
- struct client *c = closure;
- cairo_surface_t *surface;
-
- surface = cairo_surface_create_similar (c->surface,
- content, width, height);
- if (cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_IMAGE) {
- struct surface_tag *tag;
-
- tag = xmalloc (sizeof (*tag));
- tag->width = width;
- tag->height = height;
- if (cairo_surface_set_user_data (surface, &surface_tag, tag, free))
- exit (-1);
- }
-
- return surface;
-}
-
-static cairo_t *
-_context_create (void *closure, cairo_surface_t *surface)
-{
- struct client *c = closure;
- struct context_closure *l;
- cairo_bool_t foreign = FALSE;
-
- l = xmalloc (sizeof (*l));
- l->next = c->contexts;
- l->surface = surface;
- l->original = cairo_surface_reference (surface);
- l->id = ++c->context_id;
- if (l->id == 0)
- l->id = ++c->context_id;
- c->contexts = l;
-
- /* record everything, including writes to images */
- if (c->target == NULL) {
- if (cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_RECORDING) {
- cairo_format_t format;
- int width, height;
-
- get_surface_size (surface, &width, &height, &format);
- l->surface = cairo_surface_create_similar (c->surface,
- cairo_surface_get_content (surface),
- width, height);
- foreign = TRUE;
- }
- }
-
- l->context = cairo_create (l->surface);
- if (foreign) {
- cairo_set_source_surface (l->context, surface, 0, 0);
- cairo_paint (l->context);
- }
-
- return l->context;
-}
-
-static void
-_context_destroy (void *closure, void *ptr)
-{
- struct client *c = closure;
- struct context_closure *l, **prev = &c->contexts;
-
- while ((l = *prev) != NULL) {
- if (l->context == ptr) {
- if (cairo_surface_status (l->surface) == CAIRO_STATUS_SUCCESS) {
- if (c->target == NULL)
- send_recording (c, l);
- else
- send_surface (c, l);
- } else {
- exit (-1);
- }
-
- cairo_surface_destroy (l->original);
- *prev = l->next;
- free (l);
- return;
- }
- prev = &l->next;
- }
-}
-
-static void *
-recorder (void *arg)
-{
- struct client client;
- const cairo_script_interpreter_hooks_t hooks = {
- .closure = &client,
- .surface_create = _surface_create,
- .context_create = _context_create,
- .context_destroy = _context_destroy,
- };
- char *buf;
- int buf_size;
- int len = 0, ret;
- struct pollfd pfd;
-
- client.target = NULL;
- client.sk = client_socket ("/tmp/cairo-sphinx");
- if (client.sk < 0)
- return NULL;
-
- buf_size = 65536;
- buf = xmalloc (buf_size);
-
- len = sprintf (buf, "client-command target=recording name=.recorder\n");
- if (! writen (client.sk, buf, len))
- return NULL;
-
- /* drain the shm_path */
- len = readline (client.sk, buf, buf_size);
-
- pfd.fd = client_socket ("/tmp/cairo-sphinx");
- if (pfd.fd < 0)
- return NULL;
-
- len = sprintf (buf, "client-trace name=.recorder\n");
- if (! writen (pfd.fd, buf, len))
- return NULL;
-
- client.surface = cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA,
- NULL);
-
- client.context_id = 0;
- client.csi = cairo_script_interpreter_create ();
- cairo_script_interpreter_install_hooks (client.csi, &hooks);
-
- nonblocking (pfd.fd);
- pfd.events = POLLIN;
- len = 0;
- while (poll (&pfd, 1, -1) > 0) {
- while ((ret = read (pfd.fd, buf + len, buf_size - len)) > 0) {
- int end;
-
- if (ret == buf_size - len) {
- buf_size *= 2;
- buf = xrealloc (buf, buf_size);
- }
- len += ret;
-
- for (end = len; end > 0 && buf[--end] != '\n'; )
- ;
- if (end > 0) {
- buf[end] = '\0';
- cairo_script_interpreter_feed_string (client.csi, buf, end);
-
- len -= end + 1;
- if (len)
- memmove (buf, buf + end + 1, len);
- }
- }
- if (ret == 0)
- break;
- if (! (errno == EAGAIN || errno == EINTR))
- break;
- }
-
- cairo_script_interpreter_finish (client.csi);
- cairo_script_interpreter_destroy (client.csi);
-
- cairo_surface_destroy (client.surface);
- return NULL;
-}
-
-static int
-do_server (const char *path)
-{
- pthread_t thread;
- struct clients clients;
- char line[4096];
- struct pollfd *pfd;
- int num_pfd, size_pfd;
- int n, cnt, ret = 1;
- int sk, source = -1;
- int waiter = -1, waiter_count = 0;
- int len;
-
- signal (SIGPIPE, SIG_IGN);
-
- if (clients_init (&clients) < 0) {
- fprintf (stderr, "Failed to initialise clients structure\n");
- return -1;
- }
-
- sk = server_socket (path);
- if (sk < 0) {
- fprintf (stderr, "Failed to create server socket\n");
- return 1;
- }
-
- if (daemonize () < 0)
- return 1;
-
- if (pthread_create (&thread, NULL, recorder, NULL) < 0) {
- fprintf (stderr, "Failed to create spawn recording thread\n");
- return 1;
- }
-
- size_pfd = 4;
- pfd = xmalloc (sizeof (*pfd) * size_pfd);
- pfd[0].fd = sk;
- pfd[0].events = POLLIN;
- num_pfd = 1;
-
- while ((cnt = poll (pfd, num_pfd, -1)) > 0) {
- int have_source;
-
- if (pfd[0].revents) {
- while ((sk = accept (pfd[0].fd, NULL, NULL)) != -1) {
- len = readline (sk, line, sizeof (line));
- if (strcmp (line, "source") == 0) {
-
- if (source != -1)
- exit (1);
-
- source = sk;
- if (nonblocking (sk) < 0) {
- close (sk);
- continue;
- }
- } else if (strncmp (line, "client-command", 14) == 0) {
- if (source == -1)
- clients_add_command (&clients, sk, line);
- } else if (strncmp (line, "client-trace", 12) == 0) {
- if (source == -1) {
- clients_add_trace (&clients, sk, line);
- if (nonblocking (sk) < 0) {
- close (sk);
- continue;
- }
-
- if (clients.count == waiter_count) {
- for (n = 1; n < num_pfd; n++) {
- if (pfd[n].fd == waiter) {
- pfd[n].fd = -1;
- break;
- }
- }
- close (waiter);
- waiter_count = -1;
- }
- }
- } else if (strncmp (line, "wait", 4) == 0) {
- int count = atoi (line + 5) + 1;
- if (clients.count == count) {
- close (sk);
- continue;
- } else {
- waiter = sk;
- waiter_count = count;
- }
- }
-
- if (num_pfd == size_pfd) {
- size_pfd *= 2;
- pfd = xrealloc (pfd, sizeof (*pfd) * size_pfd);
- }
-
- pfd[num_pfd].fd = sk;
- pfd[num_pfd].events = POLLIN;
- pfd[num_pfd].revents = 0;
- num_pfd++;
- }
- cnt--;
- }
-
- have_source = 0;
- for (n = 1; cnt && n < num_pfd; n++) {
- if (! pfd[n].revents)
- continue;
- cnt--;
-
- if (pfd[n].fd == -1)
- continue;
-
- if (source == pfd[n].fd) {
- have_source = n;
- } else {
- len = readline (pfd[n].fd, line, sizeof (line));
- if (len < 0) {
- clients_remove (&clients, pfd[n].fd);
- close (pfd[n].fd);
- pfd[n].fd = -1;
- continue;
- }
-
- if (strncmp (line, ".image", 6) == 0) {
- if (! clients_image (&clients, pfd[n].fd, line + 7)) {
- clients_remove (&clients, pfd[n].fd);
- close (pfd[n].fd);
- pfd[n].fd = -1;
- continue;
- }
- } else if (strncmp (line, ".complete", 9) == 0) {
- clients_complete (&clients, pfd[n].fd);
- } else if (strncmp (line, ".recording", 10) == 0) {
- clients_recording (&clients, pfd[n].fd, line + 6);
- } else {
- printf ("do_command (%s)\n", line);
- }
- }
- }
-
- if (have_source) {
- do {
- len = read (source, line, sizeof (line));
- if (len > 0) {
- clients_send_trace (&clients, line, len);
- } else if (len == 0) {
- close (source);
- pfd[have_source].fd = source = -1;
- goto done;
- } else
- break;
- } while (1);
- }
-
- for (n = cnt = 1; n < num_pfd; n++) {
- if (pfd[n].fd != -1) {
- if (cnt != n)
- pfd[cnt] = pfd[n];
- cnt++;
- }
- }
- num_pfd = cnt;
- }
-
-done:
- ret = 0;
- for (n = 0; n < num_pfd; n++) {
- if (pfd[n].fd != -1)
- close (pfd[n].fd);
- }
- free (pfd);
- clients_fini (&clients);
-
- return ret;
-}
-
-static void *
-client_shm (const char *shm_path)
-{
- void *base;
- int fd;
-
- fd = shm_open (shm_path, O_RDWR, 0);
- if (fd == -1)
- return MAP_FAILED;
-
- base = mmap (NULL, DATA_SIZE,
- PROT_READ | PROT_WRITE,
- MAP_SHARED | MAP_NORESERVE,
- fd, 0);
- close (fd);
-
- return base;
-}
-
-static int
-client_socket (const char *socket_path)
-{
- struct sockaddr_un addr;
- int sk;
-
- sk = socket (PF_UNIX, SOCK_STREAM, 0);
- if (sk == -1)
- return -1;
-
- memset (&addr, 0, sizeof (addr));
- addr.sun_family = AF_UNIX;
- strcpy (addr.sun_path, socket_path);
-
- if (connect (sk, (struct sockaddr *) &addr, sizeof (addr)) == -1)
- return -1;
-
- return sk;
-}
-
-static int
-do_client (int fd,
- const char *target,
- const char *name,
- const char *reference,
- cairo_content_t content)
-{
- struct client client;
- const cairo_script_interpreter_hooks_t hooks = {
- .closure = &client,
- .surface_create = _surface_create,
- .context_create = _context_create,
- .context_destroy = _context_destroy,
- };
- void *closure;
- char *buf;
- int buf_size;
- int len = 0, ret;
- struct pollfd pfd;
-
- client.sk = fd;
- client.target = cairo_boilerplate_get_target_by_name (target, content);
- client.context_id = 0;
-
- client.surface = client.target->create_surface (NULL, content, 1, 1, 1, 1,
- CAIRO_BOILERPLATE_MODE_TEST,
- &closure);
- if (client.surface == NULL) {
- fprintf (stderr, "Failed to create target surface: %s.\n",
- client.target->name);
- return 1;
- }
-
- buf_size = 65536;
- buf = xmalloc (buf_size);
-
- if (reference != NULL) {
- len = sprintf (buf,
- "client-command name=%s target=%s reference=%s\n",
- name, target, reference);
- } else {
- len = sprintf (buf,
- "client-command name=%s target=%s\n",
- name, target);
- }
- if (! writen (fd, buf, len))
- return 1;
-
- len = readline (fd, buf, buf_size);
- client.base = client_shm (buf);
- if (client.base == MAP_FAILED) {
- fprintf (stderr, "Failed to map shared memory segment '%s'.\n", buf);
- return 1;
- }
-
- if (daemonize () < 0)
- return 1;
-
- pfd.fd = client_socket ("/tmp/cairo-sphinx");
- if (pfd.fd < 0)
- return 1;
-
- len = sprintf (buf, "client-trace name=%s\n", name);
- if (! writen (pfd.fd, buf, len))
- return 1;
-
- client.csi = cairo_script_interpreter_create ();
- cairo_script_interpreter_install_hooks (client.csi, &hooks);
-
- nonblocking (pfd.fd);
- pfd.events = POLLIN;
- len = 0;
- while (poll (&pfd, 1, -1) > 0) {
- while ((ret = read (pfd.fd, buf + len, buf_size - len)) > 0) {
- int end;
-
- if (ret == buf_size - len) {
- buf_size *= 2;
- buf = xrealloc (buf, buf_size);
- }
- len += ret;
-
- for (end = len; end > 0 && buf[--end] != '\n'; )
- ;
- if (end > 0) {
- buf[end] = '\0';
- cairo_script_interpreter_feed_string (client.csi, buf, end);
-
- len -= end + 1;
- if (len)
- memmove (buf, buf + end + 1, len);
- }
- }
- if (ret == 0)
- break;
- if (! (errno == EAGAIN || errno == EINTR))
- break;
- }
-
- cairo_script_interpreter_finish (client.csi);
- cairo_script_interpreter_destroy (client.csi);
-
- cairo_surface_destroy (client.surface);
- close (fd);
-
- return 0;
-}
-
-static int
-do_exec (int fd, char **argv)
-{
- char buf[4096];
-
- if (*argv == NULL)
- return 0;
-
- snprintf (buf, sizeof (buf), "%s/cairo-trace.so", LIBDIR);
- setenv ("LD_PRELOAD", buf, 1);
-
- snprintf (buf, sizeof (buf), "0");
- setenv ("CAIRO_TRACE_LINE_INFO", buf, 1);
-
- snprintf (buf, sizeof (buf), "%d", fd);
- setenv ("CAIRO_TRACE_FD", buf, 1);
- putenv (buf);
-
- return execvp (argv[0], argv);
-}
-
-static int
-do_wait (int fd)
-{
- char buf;
- int ret = read (fd, &buf, 1);
- return ret != 0;
-}
-
-int
-main (int argc, char **argv)
-{
- char buf[4096];
- int len;
- int fd;
-
- if (argc == 1)
- return do_server ("/tmp/cairo-sphinx");
-
- fd = client_socket ("/tmp/cairo-sphinx");
- if (fd < 0)
- return 1;
-
- if (strcmp (argv[1], "client") == 0) {
- return do_client (fd, argv[2], argv[3], argv[4],
- CAIRO_CONTENT_COLOR_ALPHA);
- }
-
- if (strcmp (argv[1], "wait") == 0) {
- len = snprintf (buf, sizeof (buf), "wait %s\n", argv[2]);
- if (! writen (fd, buf, len))
- return 1;
-
- return do_wait (fd);
- }
-
- if (strcmp (argv[1], "exec") == 0) {
- len = snprintf (buf, sizeof (buf), "source\n");
- if (! writen (fd, buf, len))
- return 1;
-
- return do_exec (fd, argv+2);
- }
-
- if (strcmp (argv[1], "replay") == 0) {
- len = snprintf (buf, sizeof (buf), "replay %s\n", argv[2]);
- return ! writen (fd, buf, len);
- }
-
- return 0;
-}
diff --git a/util/cairo-trace/.gitignore b/util/cairo-trace/.gitignore
deleted file mode 100644
index b5f866669..000000000
--- a/util/cairo-trace/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-cairo-trace
diff --git a/util/cairo-trace/COPYING b/util/cairo-trace/COPYING
deleted file mode 100644
index 37aeee076..000000000
--- a/util/cairo-trace/COPYING
+++ /dev/null
@@ -1,5 +0,0 @@
-Cairo is free software.
-
-cairo-trace is released under the terms of the GNU General Public License
-(GPL) version 3. Please see COPYING-GPL-3 for the precise terms and
-conditions.
diff --git a/util/cairo-trace/COPYING-GPL-3 b/util/cairo-trace/COPYING-GPL-3
deleted file mode 100644
index 94a9ed024..000000000
--- a/util/cairo-trace/COPYING-GPL-3
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/util/cairo-trace/Makefile.am b/util/cairo-trace/Makefile.am
deleted file mode 100644
index 3278abe42..000000000
--- a/util/cairo-trace/Makefile.am
+++ /dev/null
@@ -1,40 +0,0 @@
-cairolibdir = $(libdir)/cairo
-cairooutdir = $(localstatedir)/lib/cairo-trace
-
-bin_SCRIPTS = cairo-trace
-cairolib_LTLIBRARIES = libcairo-trace.la
-
-AM_CPPFLAGS = -I$(top_srcdir)/src \
- -I$(top_builddir)/src
-
-libcairo_trace_la_SOURCES = trace.c
-libcairo_trace_la_CPPFLAGS = -DCAIRO_TRACE_OUTDIR="\"$(cairooutdir)\"" \
- $(AM_CPPFLAGS)
-libcairo_trace_la_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS)
-libcairo_trace_la_LDFLAGS = -no-undefined
-
-libcairo_trace_la_LIBADD = $(real_pthread_LIBS) -lz
-if CAIRO_HAS_DL
-libcairo_trace_la_LIBADD += -ldl
-endif
-
-if CAIRO_HAS_SYMBOL_LOOKUP
-libcairo_trace_la_SOURCES += \
- lookup-symbol.c \
- lookup-symbol.h
-libcairo_trace_la_LIBADD += $(BFD_LIBS)
-endif
-
-
-system-install: install
- -mkdir -p $(cairooutdir)
- -chmod 01777 $(cairooutdir)
- grep -sq $(cairolibdir)/libcairo-trace.so /etc/ld.so.preload || echo $(cairolibdir)/libcairo-trace.so >> /etc/ld.so.preload
-
-system-uninstall: uninstall
- sed -e '/libcairo-trace.so/d' < /etc/ld.so.preload > /tmp/ld.so.preload && mv /tmp/ld.so.preload /etc/ld.so.preload;
-
-EXTRA_DIST = \
- COPYING \
- COPYING-GPL-3 \
- cairo-trace.in
diff --git a/util/cairo-trace/cairo-trace.in b/util/cairo-trace/cairo-trace.in
deleted file mode 100644
index ece90d3eb..000000000
--- a/util/cairo-trace/cairo-trace.in
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/sh
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-nofile=
-flush=
-nocallers=
-nomarkdirty=
-compress=
-
-usage() {
-cat << EOF
-usage: cairo-trace [--no-file] command
-cairo-trace will generate a log of all calls made by command to
-cairo. This log will be stored in a file in the local directory
-called command.pid.trace.
-Whatever else happens is driven by its argument:
- --flush - Flush the output trace after every call.
- --no-file - Disable the creation of an output file. Outputs to the
- terminal instead.
- --no-callers - Do not lookup the caller address/symbol/line whilst tracing.
- --mark-dirty - Record image data for cairo_mark_dirty() [default]
- --no-mark-dirty - Do not record image data for cairo_mark_dirty()
- --compress - Compress the output with LZMA
- --profile - Combine --no-callers and --no-mark-dirty and --compress
-
-Environment variables understood by cairo-trace:
- CAIRO_TRACE_FLUSH - flush the output after every function call.
- CAIRO_TRACE_LINE_INFO - emit line information for most function calls.
-EOF
-exit
-}
-
-skip=1
-while test $skip -eq 1; do
- skip=0
- case $1 in
- --flush)
- skip=1
- flush=1
- ;;
- --no-file)
- skip=1
- nofile=1
- ;;
- --no-callers)
- skip=1
- nocallers=1
- ;;
- --mark-dirty)
- skip=1
- nomarkdirty=
- ;;
- --no-mark-dirty)
- skip=1
- nomarkdirty=1
- ;;
- --compress)
- skip=1
- compress=1
- nofile=1
- ;;
- --profile)
- skip=1
- compress=1
- nomarkdirty=1
- nocallers=1
- nofile=1
- ;;
- --version)
- echo "cairo-trace, version @CAIRO_VERSION_MAJOR@.@CAIRO_VERSION_MINOR@.@CAIRO_VERSION_MICRO@."
- exit
- ;;
- --help)
- usage
- ;;
- esac
- if test $skip -eq 1; then
- shift
- fi
-done
-
-if test $# -eq 0; then
- usage
-fi
-
-CAIRO_TRACE_PROG_NAME="$1"
-export CAIRO_TRACE_PROG_NAME
-
-if test "x$CAIRO_TRACE_SO" = "x"; then
- CAIRO_TRACE_SO=""
- for lib in @libdir@/cairo/libcairo-trace.@SHLIB_EXT@ @libdir@/cairo/libcairo-trace.@SHLIB_EXT@* @libdir@/cairo/libcairo-trace.*.@SHLIB_EXT@ ; do
- if test -h "$lib" -o -f "$lib"; then
- CAIRO_TRACE_SO="$lib"
- break
- fi
- done
-fi
-if test "x$CAIRO_TRACE_SO" = "x"; then
- echo "Could not find the cairo-trace shared library in @libdir@/cairo/." >&2
- echo "Set the CAIRO_TRACE_SO environment variable to the full path of the library." >&2
- exit 15
-fi
-
-LD_PRELOAD="$CAIRO_TRACE_SO"
-DYLD_INSERT_LIBRARIES="$CAIRO_TRACE_SO"
-DYLD_FORCE_FLAT_NAMESPACE=1
-export LD_PRELOAD
-export DYLD_INSERT_LIBRARIES
-export DYLD_FORCE_FLAT_NAMESPACE
-
-if test -n "$nocallers"; then
- CAIRO_TRACE_LINE_INFO=0
- export CAIRO_TRACE_LINE_INFO
-fi
-
-if test -n "$nomarkdirty"; then
- CAIRO_TRACE_MARK_DIRTY=0
- export CAIRO_TRACE_MARK_DIRTY
-fi
-
-if test -n "$flush"; then
- CAIRO_TRACE_FLUSH=1
- export CAIRO_TRACE_FLUSH
-fi
-
-if test -z "$nofile"; then
- CAIRO_TRACE_OUTDIR=`pwd` "$@"
-elif test -n "$compress"; then
- name=`basename $1`
- echo Generating compressed trace file $name.$$.lzma
- CAIRO_TRACE_FD=3 "$@" 3>&1 >/dev/null | lzma -cz9 > $name.$$.lzma
-else
- CAIRO_TRACE_FD=3 "$@" 3>&1 >/dev/null
-fi
diff --git a/util/cairo-trace/lookup-symbol.c b/util/cairo-trace/lookup-symbol.c
deleted file mode 100644
index f9665b36f..000000000
--- a/util/cairo-trace/lookup-symbol.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* cairo-trace - a utility to record and replay calls to the Cairo library.
- *
- * Copyright © 2008 Chris Wilson
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * A less hacky utility to lookup the debug strings for a particular
- * .text address.
- * Derived from backtrace-symbols.c in cairo by Chris Wilson.
- */
-
-/*
- A hacky replacement for backtrace_symbols in glibc
-
- backtrace_symbols in glibc looks up symbols using dladdr which is limited
- in the symbols that it sees. libbacktracesymbols opens the executable and
- shared libraries using libbfd and will look up backtrace information using
- the symbol table and the dwarf line information.
-
- It may make more sense for this program to use libelf instead of libbfd.
- However, I have not investigated that yet.
-
- Derived from addr2line.c from GNU Binutils by Jeff Muizelaar
-
- Copyright 2007 Jeff Muizelaar
- */
-
-/* addr2line.c -- convert addresses to line number and function name
- Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de>
-
- This file was part of GNU Binutils.
- */
-
-#define _GNU_SOURCE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define true 1
-#define false 0
-
-#include "lookup-symbol.h"
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <link.h>
-#include <string.h>
-#include <pthread.h>
-
-#if HAVE_BFD
-#include <bfd.h>
-#include <libiberty.h>
-
-struct symtab {
- bfd *bfd;
- asymbol **syms;
-};
-
-struct symbol {
- int found;
- bfd_vma pc;
- struct symtab *symtab;
- const char *filename;
- const char *functionname;
- unsigned int line;
-};
-
-
-static void
-_symtab_fini (struct symtab *symtab)
-{
- free (symtab->syms);
- if (symtab->bfd != NULL)
- bfd_close (symtab->bfd);
-}
-
-/* Read in the symbol table. */
-static int
-_symtab_init (struct symtab *symtab, const char *filename)
-{
- char **matching;
- long symcount;
- unsigned int size;
-
- symtab->bfd = NULL;
- symtab->syms = NULL;
-
- symtab->bfd = bfd_openr (filename, NULL);
- if (symtab->bfd == NULL)
- goto BAIL;
-
- if (bfd_check_format (symtab->bfd, bfd_archive))
- goto BAIL;
-
- if (! bfd_check_format_matches (symtab->bfd, bfd_object, &matching))
- goto BAIL;
-
- symcount = bfd_read_minisymbols (symtab->bfd, false, (PTR) &symtab->syms, &size);
- if (symcount == 0) {
- symcount = bfd_read_minisymbols (symtab->bfd, true /* dynamic */ ,
- (PTR) &symtab->syms, &size);
- }
- if (symcount < 0)
- goto BAIL;
-
- if ((bfd_get_file_flags (symtab->bfd) & HAS_SYMS) == 0)
- goto BAIL;
-
- return 1;
-
-BAIL:
- _symtab_fini (symtab);
- return 0;
-}
-
-/* Look for an address in a section.
- * This is called via bfd_map_over_sections.
- */
-static void
-find_address_in_section (bfd *abfd,
- asection *section,
- void *data)
-{
- bfd_vma vma;
- bfd_size_type size;
- struct symbol *symbol = data;
- struct symtab *symtab = symbol->symtab;
-
- if (symbol->found)
- return;
-
- if ((bfd_get_section_flags (symtab->bfd, section) & SEC_ALLOC) == 0)
- return;
-
- vma = bfd_get_section_vma (symtab->bfd, section);
- if (symbol->pc < vma)
- return;
-
- size = bfd_section_size (symtab->bfd, section);
- if (symbol->pc >= vma + size)
- return;
-
- symbol->found = bfd_find_nearest_line (symtab->bfd, section,
- symtab->syms,
- symbol->pc - vma,
- &symbol->filename,
- &symbol->functionname,
- &symbol->line);
-}
-
-static void
-_symbol_fini (struct symbol *symbol)
-{
-}
-
-static void
-_symbol_init (struct symbol *symbol, struct symtab *symtab, bfd_vma addr)
-{
- symbol->found = false;
- symbol->symtab = symtab;
- symbol->pc = addr;
-}
-
-static void
-_symbol_print (struct symbol *symbol, char *buf, int buflen, const char *filename)
-{
- const char *name, *h;
- char path[1024];
-
- if (! symbol->found)
- return;
-
- name = symbol->functionname;
- if (name == NULL || *name == '\0')
- name = "??";
-
- if (symbol->filename != NULL)
- filename = symbol->filename;
- if (strcmp (filename, "/proc/self/exe") == 0) {
- int len = readlink ("/proc/self/exe", path, sizeof (path) - 1);
- if (len != -1) {
- path[len] = '\0';
- filename = path;
- }
- }
- h = strrchr (filename, '/');
- if (h != NULL)
- filename = h + 1;
-
- if (symbol->line) {
- snprintf (buf, buflen, "%s() [%s:%u]",
- name, filename, symbol->line);
- } else {
- snprintf (buf, buflen, "%s() [%s]", name, filename);
- }
-}
-#endif
-
-struct file_match {
- const char *file;
- ElfW(Addr) address;
- ElfW(Addr) base;
- void *hdr;
-};
-
-static int
-find_matching_file (struct dl_phdr_info *info, size_t size, void *data)
-{
- struct file_match *match = data;
- /* This code is modeled from Gfind_proc_info-lsb.c:callback() from libunwind */
- long n;
- const ElfW(Phdr) *phdr;
- ElfW(Addr) load_base = info->dlpi_addr;
-
- phdr = info->dlpi_phdr;
- for (n = info->dlpi_phnum; --n >= 0; phdr++) {
- if (phdr->p_type == PT_LOAD) {
- ElfW(Addr) vaddr = phdr->p_vaddr + load_base;
- if (match->address >= vaddr &&
- match->address < vaddr + phdr->p_memsz)
- {
- /* we found a match */
- match->file = info->dlpi_name;
- match->base = info->dlpi_addr;
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-struct symbol_cache_entry {
- const void *ptr;
- struct symbol_cache_entry *hash_prev, *hash_next;
- char name[0];
-};
-
-static struct symbol_cache_entry *symbol_cache_hash[13477];
-static pthread_mutex_t symbol_cache_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-char *
-lookup_symbol (char *buf, int buflen, const void *ptr)
-{
- struct file_match match;
-#if HAVE_BFD
- struct symtab symtab;
- struct symbol symbol;
-#endif
- struct symbol_cache_entry *cache;
- int bucket;
- int len;
-
- bucket = (unsigned long) ptr % (sizeof (symbol_cache_hash) / sizeof (symbol_cache_hash[0]));
- pthread_mutex_lock (&symbol_cache_mutex);
- for (cache = symbol_cache_hash[bucket];
- cache != NULL;
- cache = cache->hash_next)
- {
- if (cache->ptr == ptr) {
- if (cache->hash_prev != NULL) {
- cache->hash_prev->hash_next = cache->hash_next;
- if (cache->hash_next != NULL)
- cache->hash_next->hash_prev = cache->hash_prev;
- cache->hash_prev = NULL;
- cache->hash_next = symbol_cache_hash[bucket];
- symbol_cache_hash[bucket]->hash_prev = cache;
- symbol_cache_hash[bucket] = cache;
- }
-
- pthread_mutex_unlock (&symbol_cache_mutex);
- return cache->name;
- }
- }
- pthread_mutex_unlock (&symbol_cache_mutex);
-
- match.file = NULL;
- match.address = (ElfW(Addr)) ptr;
- dl_iterate_phdr (find_matching_file, &match);
-
- snprintf (buf, buflen, "0x%llx",
- (long long unsigned int) match.address);
-
- if (match.file == NULL || *match.file == '\0')
- match.file = "/proc/self/exe";
-
-#if HAVE_BFD
- if (_symtab_init (&symtab, match.file)) {
- _symbol_init (&symbol, &symtab, match.address - match.base);
- bfd_map_over_sections (symtab.bfd, find_address_in_section, &symbol);
- if (symbol.found)
- _symbol_print (&symbol, buf, buflen, match.file);
- _symbol_fini (&symbol);
-
- _symtab_fini (&symtab);
- }
-#endif
-
- len = strlen (buf);
- cache = malloc (sizeof (struct symbol_cache_entry) + len + 1);
- if (cache != NULL) {
- cache->ptr = ptr;
- memcpy (cache->name, buf, len + 1);
-
- pthread_mutex_lock (&symbol_cache_mutex);
- cache->hash_prev = NULL;
- cache->hash_next = symbol_cache_hash[bucket];
- if (symbol_cache_hash[bucket] != NULL)
- symbol_cache_hash[bucket]->hash_prev = cache;
- symbol_cache_hash[bucket] = cache;
- pthread_mutex_unlock (&symbol_cache_mutex);
- }
-
- return buf;
-}
diff --git a/util/cairo-trace/lookup-symbol.h b/util/cairo-trace/lookup-symbol.h
deleted file mode 100644
index 83817edc6..000000000
--- a/util/cairo-trace/lookup-symbol.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* cairo-trace - a utility to record and replay calls to the Cairo library.
- *
- * Copyright © 2008 Chris Wilson
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef LOOKUP_SYMBOLS_H
-
-char *
-lookup_symbol (char *buf, int len, const void *ptr);
-
-#endif /*LOOKUP_SYMBOLS_H */
diff --git a/util/cairo-trace/trace.c b/util/cairo-trace/trace.c
deleted file mode 100644
index d5d76689c..000000000
--- a/util/cairo-trace/trace.c
+++ /dev/null
@@ -1,5581 +0,0 @@
-/* cairo-trace - a utility to record and replay calls to the Cairo library.
- *
- * Copyright © 2008 Chris Wilson
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#define _GNU_SOURCE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* The autoconf on OpenBSD 4.5 produces the malformed constant name
- * SIZEOF_VOID__ rather than SIZEOF_VOID_P. Work around that here. */
-#if !defined(SIZEOF_VOID_P) && defined(SIZEOF_VOID__)
-# define SIZEOF_VOID_P SIZEOF_VOID__
-#endif
-
-#include <dlfcn.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <errno.h>
-#include <pthread.h>
-#include <zlib.h>
-#include <math.h>
-#include <locale.h> /* for locale independent %f printing */
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <stdarg.h>
-
-#include <cairo.h>
-#if CAIRO_HAS_FT_FONT
-# include <cairo-ft.h>
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-#ifndef CAIRO_TRACE_OUTDIR
-#define CAIRO_TRACE_OUTDIR "."
-#endif
-
-#define DEBUG_STACK 0
-
-#if HAVE_BYTESWAP_H
-# include <byteswap.h>
-#endif
-#ifndef bswap_16
-# define bswap_16(p) \
- (((((uint16_t)(p)) & 0x00ff) << 8) | \
- (((uint16_t)(p)) >> 8))
-#endif
-#ifndef bswap_32
-# define bswap_32(p) \
- (((((uint32_t)(p)) & 0x000000ff) << 24) | \
- ((((uint32_t)(p)) & 0x0000ff00) << 8) | \
- ((((uint32_t)(p)) & 0x00ff0000) >> 8) | \
- ((((uint32_t)(p))) >> 24))
-#endif
-
-#if WORDS_BIGENDIAN
-#define le16(x) bswap_16 (x)
-#define le32(x) bswap_32 (x)
-#define be16(x) x
-#define be32(x) x
-#define to_be32(x) x
-#else
-#define le16(x) x
-#define le32(x) x
-#define be16(x) bswap_16 (x)
-#define be32(x) bswap_32 (x)
-#define to_be32(x) bswap_32 (x)
-#endif
-
-#if CAIRO_HAS_SYMBOL_LOOKUP
-#include "lookup-symbol.h"
-#endif
-
-/* Reverse the bits in a byte with 7 operations (no 64-bit):
- * Devised by Sean Anderson, July 13, 2001.
- * Source: http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
- */
-#define CAIRO_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16)
-
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
-#define CAIRO_PRINTF_FORMAT(fmt_index, va_index) \
- __attribute__((__format__(__printf__, fmt_index, va_index)))
-#else
-#define CAIRO_PRINTF_FORMAT(fmt_index, va_index)
-#endif
-
-/* XXX implement manual vprintf so that the user can control precision of
- * printed numbers.
- */
-
-static void *_dlhandle = RTLD_NEXT;
-#define DLCALL(name, args...) ({ \
- static typeof (&name) name##_real; \
- if (name##_real == NULL) { \
- name##_real = (typeof (&name))(dlsym (_dlhandle, #name)); \
- if (name##_real == NULL && _dlhandle == RTLD_NEXT) { \
- _dlhandle = dlopen ("libcairo." SHARED_LIB_EXT, RTLD_LAZY); \
- name##_real = (typeof (&name))(dlsym (_dlhandle, #name)); \
- assert (name##_real != NULL); \
- } \
- } \
- (*name##_real) (args); \
-})
-
-#ifndef ARRAY_LENGTH
-#define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0])))
-#endif
-
-#if SIZEOF_VOID_P == 4
-#define PTR_SHIFT 2
-#elif SIZEOF_VOID_P == 8
-#define PTR_SHIFT 3
-#else
-#error Unexpected pointer size
-#endif
-#define BUCKET(b, ptr) (((unsigned long) (ptr) >> PTR_SHIFT) % ARRAY_LENGTH (b))
-
-#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
-#define _BOOLEAN_EXPR(expr) \
- __extension__ ({ \
- int _boolean_var_; \
- if (expr) \
- _boolean_var_ = 1; \
- else \
- _boolean_var_ = 0; \
- _boolean_var_; \
-})
-#define LIKELY(expr) (__builtin_expect (_BOOLEAN_EXPR(expr), 1))
-#define UNLIKELY(expr) (__builtin_expect (_BOOLEAN_EXPR(expr), 0))
-#else
-#define LIKELY(expr) (expr)
-#define UNLIKELY(expr) (expr)
-#endif
-
-typedef struct _object Object;
-typedef struct _type Type;
-
-struct _object {
- const void *addr;
- Type *type;
- unsigned long int token;
- int width, height;
- cairo_bool_t foreign;
- cairo_bool_t defined;
- cairo_bool_t unknown;
- int operand;
- void *data;
- void (*destroy)(void *);
- Object *next, *prev;
-};
-
-struct _type {
- const char *name;
-
- enum operand_type {
- NONE,
- SURFACE,
- CONTEXT,
- FONT_FACE,
- PATTERN,
- SCALED_FONT,
- _N_OP_TYPES
- } op_type;
- const char *op_code;
-
- pthread_mutex_t mutex;
- struct _bitmap {
- unsigned long int min;
- unsigned long int count;
- unsigned int map[64];
- struct _bitmap *next;
- } map;
- Object *objects[607];
- Type *next;
-};
-
-static struct _type_table {
- pthread_mutex_t mutex;
- Type *op_types[_N_OP_TYPES];
-} Types;
-
-static FILE *logfile;
-static cairo_bool_t _flush;
-static cairo_bool_t _error;
-static cairo_bool_t _line_info;
-static cairo_bool_t _mark_dirty;
-static const cairo_user_data_key_t destroy_key;
-static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-static pthread_key_t counter_key;
-
-static void _init_trace (void);
-
-#define INIT_TRACE_ONCE() pthread_once (&once_control, _init_trace)
-
-#if __GNUC__ >= 3 && defined(__ELF__) && !defined(__sun)
-# define _enter_trace() INIT_TRACE_ONCE ()
-# define _exit_trace() do { } while (0)
-# define _should_trace() 1
-# define USE_ENTER_EXIT 0
-#else
-static void _enter_trace (void);
-static void _exit_trace (void);
-static cairo_bool_t _should_trace (void);
-# define USE_ENTER_EXIT 1
-#endif
-
-#if HAVE_BUILTIN_RETURN_ADDRESS && CAIRO_HAS_SYMBOL_LOOKUP
-#define _emit_line_info() do { \
- if (_line_info && _write_lock ()) { \
- void *addr = __builtin_return_address(0); \
- char caller[1024]; \
- _trace_printf ("%% %s() called by %s\n", __FUNCTION__, \
- lookup_symbol (caller, sizeof (caller), addr)); \
- _write_unlock (); \
- } \
-} while (0)
-#else
-#define _emit_line_info()
-#endif
-
-static void
-_type_release_token (Type *t, unsigned long int token)
-{
- struct _bitmap *b, **prev = NULL;
-
- b = &t->map;
- while (b != NULL) {
- if (token < b->min + sizeof (b->map) * CHAR_BIT) {
- unsigned int bit, elem;
-
- token -= b->min;
- elem = token / (sizeof (b->map[0]) * CHAR_BIT);
- bit = token % (sizeof (b->map[0]) * CHAR_BIT);
- b->map[elem] &= ~(1 << bit);
- if (! --b->count && prev) {
- *prev = b->next;
- free (b);
- }
- return;
- }
- prev = &b->next;
- b = b->next;
- }
-}
-
-static unsigned long int
-_type_next_token (Type *t)
-{
- struct _bitmap *b, *bb, **prev = NULL;
- unsigned long int min = 0;
-
- b = &t->map;
- while (b != NULL) {
- if (b->min != min)
- break;
-
- if (b->count < sizeof (b->map) * CHAR_BIT) {
- unsigned int n, m, bit;
- for (n = 0; n < ARRAY_LENGTH (b->map); n++) {
- if (b->map[n] == (unsigned int) -1)
- continue;
-
- for (m=0, bit=1; m<sizeof (b->map[0])*CHAR_BIT; m++, bit<<=1) {
- if ((b->map[n] & bit) == 0) {
- b->map[n] |= bit;
- b->count++;
- return n * sizeof (b->map[0])*CHAR_BIT + m + b->min;
- }
- }
- }
- }
- min += sizeof (b->map) * CHAR_BIT;
-
- prev = &b->next;
- b = b->next;
- }
-
- bb = malloc (sizeof (struct _bitmap));
- *prev = bb;
- bb->next = b;
- bb->min = min;
- bb->count = 1;
- bb->map[0] = 0x1;
- memset (bb->map + 1, 0, sizeof (bb->map) - sizeof (bb->map[0]));
-
- return min;
-}
-
-static void
-_object_destroy (Object *obj)
-{
- int bucket;
-
- pthread_mutex_lock (&obj->type->mutex);
- bucket = BUCKET (obj->type->objects, obj->addr);
- _type_release_token (obj->type, obj->token);
-
- if (obj->prev != NULL)
- obj->prev->next = obj->next;
- else
- obj->type->objects[bucket] = obj->next;
-
- if (obj->next != NULL)
- obj->next->prev = obj->prev;
- pthread_mutex_unlock (&obj->type->mutex);
-
- if (obj->data != NULL && obj->destroy != NULL)
- obj->destroy (obj->data);
-
- free (obj);
-}
-
-static void
-_type_create (const char *typename,
- enum operand_type op_type,
- const char *op_code)
-{
- Type *t;
-
- pthread_mutex_lock (&Types.mutex);
-
- t = malloc (sizeof (Type));
- t->name = typename;
- t->op_type = op_type;
- t->op_code = op_code;
-
- pthread_mutex_init (&t->mutex, NULL);
-
- t->map.min = 0;
- t->map.count = 0;
- memset (t->map.map, 0, sizeof (t->map.map));
- t->map.next = NULL;
-
- memset (t->objects, 0, sizeof (t->objects));
-
- t->next = NULL;
-
- Types.op_types[op_type] = t;
- pthread_mutex_unlock (&Types.mutex);
-}
-
-static Type *
-_get_type (enum operand_type type)
-{
- return Types.op_types[type];
-}
-
-static void
-_type_destroy (Type *t)
-{
- int n;
- struct _bitmap *b;
-
- for (n = 0; n < ARRAY_LENGTH (t->objects); n++) {
- Object *obj = t->objects[n];
- while (obj != NULL) {
- Object *next = obj->next;
- _object_destroy (obj);
- obj = next;
- }
- }
-
- b = t->map.next;
- while (b != NULL) {
- struct _bitmap *next = b->next;
- free (b);
- b = next;
- }
-
- pthread_mutex_destroy (&t->mutex);
- free (t);
-}
-
-static Object *
-_type_get_object (Type *type, const void *ptr)
-{
- Object *obj;
- int bucket = BUCKET (type->objects, ptr);
-
- for (obj = type->objects[bucket]; obj != NULL; obj = obj->next) {
- if (obj->addr == ptr) {
- if (obj->prev != NULL) { /* mru */
- obj->prev->next = obj->next;
- if (obj->next != NULL)
- obj->next->prev = obj->prev;
- obj->prev = NULL;
- type->objects[bucket]->prev = obj;
- obj->next = type->objects[bucket];
- type->objects[bucket] = obj;
- }
- return obj;
- }
- }
-
- return NULL;
-}
-
-static Object *
-_object_create (Type *type, const void *ptr)
-{
- Object *obj;
- int bucket = BUCKET (type->objects, ptr);
-
- obj = malloc (sizeof (Object));
- obj->unknown = TRUE;
- obj->defined = FALSE;
- obj->foreign = FALSE;
- obj->operand = -1;
- obj->type = type;
- obj->addr = ptr;
- obj->token = _type_next_token (type);
- obj->data = NULL;
- obj->destroy = NULL;
- obj->prev = NULL;
- obj->next = type->objects[bucket];
- if (type->objects[bucket] != NULL)
- type->objects[bucket]->prev = obj;
- type->objects[bucket] = obj;
-
- return obj;
-}
-
-#if USE_ENTER_EXIT
-static int *
-_get_counter (void)
-{
- int *counter = pthread_getspecific (counter_key);
- if (counter == NULL) {
- counter = calloc(1, sizeof(int));
- pthread_setspecific (counter_key, counter);
- }
- return counter;
-}
-
-static void
-_enter_trace (void)
-{
- INIT_TRACE_ONCE ();
- _get_counter ()[0]++;
-}
-
-static void
-_exit_trace (void)
-{
- _get_counter ()[0]--;
-}
-
-static cairo_bool_t
-_should_trace (void)
-{
- return _get_counter ()[0] <= 1;
-}
-#endif /* USE_ENTER_EXIT */
-
-static void
-_init_trace (void)
-{
- pthread_mutex_init (&Types.mutex, NULL);
- pthread_key_create (&counter_key, free);
-
- _type_create ("unclassed", NONE, "");
- _type_create ("cairo_t", CONTEXT, "c");
- _type_create ("cairo_font_face_t", FONT_FACE, "f");
- _type_create ("cairo_pattern_t", PATTERN, "p");
- _type_create ("cairo_scaled_font_t", SCALED_FONT, "sf");
- _type_create ("cairo_surface_t", SURFACE, "s");
-}
-
-static void
-_close_trace (void)
-{
- if (logfile != NULL) {
- fclose (logfile);
- logfile = NULL;
- }
-}
-
-static void __attribute__ ((destructor))
-_fini_trace (void)
-{
- int n;
-
- _close_trace ();
-
- for (n = 0; n < ARRAY_LENGTH (Types.op_types); n++) {
- if (Types.op_types[n]) {
- _type_destroy (Types.op_types[n]);
- Types.op_types[n] = NULL;
- }
- }
-
- pthread_mutex_destroy (&Types.mutex);
-}
-
-/* Format a double in a locale independent way and trim trailing
- * zeros. Based on code from Alex Larson <alexl@redhat.com>.
- * http://mail.gnome.org/archives/gtk-devel-list/2001-October/msg00087.html
- *
- * The code in the patch is copyright Red Hat, Inc under the LGPL.
- */
-#define SIGNIFICANT_DIGITS_AFTER_DECIMAL 6
-static void
-_trace_dtostr (char *buffer, size_t size, double d)
-{
- struct lconv *locale_data;
- const char *decimal_point;
- int decimal_point_len;
- char *p;
- int decimal_len;
- int num_zeros, decimal_digits;
-
- /* Omit the minus sign from negative zero. */
- if (d == 0.0)
- d = 0.0;
-
- locale_data = localeconv ();
- decimal_point = locale_data->decimal_point;
- decimal_point_len = strlen (decimal_point);
-
- /* Using "%f" to print numbers less than 0.1 will result in
- * reduced precision due to the default 6 digits after the
- * decimal point.
- *
- * For numbers is < 0.1, we print with maximum precision and count
- * the number of zeros between the decimal point and the first
- * significant digit. We then print the number again with the
- * number of decimal places that gives us the required number of
- * significant digits. This ensures the number is correctly
- * rounded.
- */
- if (fabs (d) >= 0.1) {
- snprintf (buffer, size, "%f", d);
- } else {
- snprintf (buffer, size, "%.18f", d);
- p = buffer;
-
- if (*p == '+' || *p == '-')
- p++;
-
- while (isdigit (*p))
- p++;
-
- if (strncmp (p, decimal_point, decimal_point_len) == 0)
- p += decimal_point_len;
-
- num_zeros = 0;
- while (*p++ == '0')
- num_zeros++;
-
- decimal_digits = num_zeros + SIGNIFICANT_DIGITS_AFTER_DECIMAL;
-
- if (decimal_digits < 18)
- snprintf (buffer, size, "%.*f", decimal_digits, d);
- }
- p = buffer;
-
- if (*p == '+' || *p == '-')
- p++;
-
- while (isdigit (*p))
- p++;
-
- if (strncmp (p, decimal_point, decimal_point_len) == 0) {
- *p = '.';
- decimal_len = strlen (p + decimal_point_len);
- memmove (p + 1, p + decimal_point_len, decimal_len);
- p[1 + decimal_len] = 0;
-
- /* Remove trailing zeros and decimal point if possible. */
- for (p = p + decimal_len; *p == '0'; p--)
- *p = 0;
-
- if (*p == '.') {
- *p = 0;
- p--;
- }
- }
-}
-
-enum {
- LENGTH_MODIFIER_LONG = 0x100
-};
-
-/* Here's a limited reimplementation of printf. The reason for doing
- * this is primarily to special case handling of doubles. We want
- * locale independent formatting of doubles and we want to trim
- * trailing zeros. This is handled by dtostr() above, and the code
- * below handles everything else by calling snprintf() to do the
- * formatting. This functionality is only for internal use and we
- * only implement the formats we actually use.
- */
-static void CAIRO_PRINTF_FORMAT(1, 0)
-_trace_vprintf (const char *fmt, va_list ap)
-{
-#define SINGLE_FMT_BUFFER_SIZE 32
- char buffer[512], single_fmt[SINGLE_FMT_BUFFER_SIZE];
- int single_fmt_length;
- char *p;
- const char *f, *start;
- int length_modifier, width;
- cairo_bool_t var_width;
- int ret_ignored;
-
- assert (_should_trace ());
-
- f = fmt;
- p = buffer;
- while (*f != '\0') {
- if (*f != '%') {
- *p++ = *f++;
- continue;
- }
-
- start = f;
- f++;
-
- if (*f == '0')
- f++;
-
- var_width = 0;
- if (*f == '*') {
- var_width = 1;
- f++;
- }
-
- while (isdigit (*f))
- f++;
-
- length_modifier = 0;
- if (*f == 'l') {
- length_modifier = LENGTH_MODIFIER_LONG;
- f++;
- }
-
- /* The only format strings exist in the cairo implementation
- * itself. So there's an internal consistency problem if any
- * of them is larger than our format buffer size. */
- single_fmt_length = f - start + 1;
-
- /* Reuse the format string for this conversion. */
- memcpy (single_fmt, start, single_fmt_length);
- single_fmt[single_fmt_length] = '\0';
-
- /* Flush contents of buffer before snprintf()'ing into it. */
- ret_ignored = fwrite (buffer, 1, p-buffer, logfile);
-
- /* We group signed and unsigned together in this switch, the
- * only thing that matters here is the size of the arguments,
- * since we're just passing the data through to sprintf(). */
- switch (*f | length_modifier) {
- case '%':
- buffer[0] = *f;
- buffer[1] = 0;
- break;
- case 'd':
- case 'u':
- case 'o':
- case 'x':
- case 'X':
- if (var_width) {
- width = va_arg (ap, int);
- snprintf (buffer, sizeof buffer,
- single_fmt, width, va_arg (ap, int));
- } else {
- snprintf (buffer, sizeof buffer, single_fmt, va_arg (ap, int));
- }
- break;
- case 'd' | LENGTH_MODIFIER_LONG:
- case 'u' | LENGTH_MODIFIER_LONG:
- case 'o' | LENGTH_MODIFIER_LONG:
- case 'x' | LENGTH_MODIFIER_LONG:
- case 'X' | LENGTH_MODIFIER_LONG:
- if (var_width) {
- width = va_arg (ap, int);
- snprintf (buffer, sizeof buffer,
- single_fmt, width, va_arg (ap, long int));
- } else {
- snprintf (buffer, sizeof buffer,
- single_fmt, va_arg (ap, long int));
- }
- break;
- case 's':
- snprintf (buffer, sizeof buffer,
- single_fmt, va_arg (ap, const char *));
- break;
- case 'f':
- case 'g':
- _trace_dtostr (buffer, sizeof buffer, va_arg (ap, double));
- break;
- case 'c':
- buffer[0] = va_arg (ap, int);
- buffer[1] = 0;
- break;
- default:
- break;
- }
- p = buffer + strlen (buffer);
- f++;
- }
-
- ret_ignored = fwrite (buffer, 1, p-buffer, logfile);
- (void)ret_ignored;
-}
-
-static void CAIRO_PRINTF_FORMAT(1, 2)
-_trace_printf (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- _trace_vprintf (fmt, ap);
- va_end (ap);
-}
-
-static void
-get_prog_name (char *buf, int length)
-{
- char *slash;
- FILE *file;
-
- memset (buf, 0, length);
- if (length == 0)
- return;
-
- file = fopen ("/proc/self/cmdline", "rb");
- if (file != NULL) {
- slash = fgets (buf, length, file);
- fclose (file);
-
- if (slash == NULL)
- return;
- } else {
- char const *name = getenv ("CAIRO_TRACE_PROG_NAME");
- if (name != NULL) {
- strncpy (buf, name, length-1);
- }
- }
-
- slash = strrchr (buf, '/');
- if (slash != NULL) {
- size_t len = strlen (slash+1);
- memmove (buf, slash+1, len+1);
- }
-}
-
-static void
-_emit_header (void)
-{
- char name[4096] = "";
-
- get_prog_name (name, sizeof (name));
-
- _trace_printf ("%%!CairoScript - %s\n", name);
-}
-
-static cairo_bool_t
-_init_logfile (void)
-{
- static cairo_bool_t initialized;
- char buf[4096];
- const char *filename;
- const char *env;
-
- if (initialized)
- return logfile != NULL;
-
- initialized = TRUE;
-
- env = getenv ("CAIRO_TRACE_FLUSH");
- if (env != NULL)
- _flush = atoi (env);
-
- _line_info = TRUE;
- env = getenv ("CAIRO_TRACE_LINE_INFO");
- if (env != NULL)
- _line_info = atoi (env);
-
- _mark_dirty = TRUE;
- env = getenv ("CAIRO_TRACE_MARK_DIRTY");
- if (env != NULL)
- _mark_dirty = atoi (env);
-
- filename = getenv ("CAIRO_TRACE_FD");
- if (filename != NULL) {
- int fd = atoi (filename);
- if (fd == -1)
- return FALSE;
-
- logfile = fdopen (fd, "w");
- if (logfile == NULL) {
- fprintf (stderr, "Failed to open trace file descriptor '%s': %s\n",
- filename, strerror (errno));
- return FALSE;
- }
-
- setenv ("CAIRO_TRACE_FD", "-1", 1);
- goto done;
- }
-
- filename = getenv ("CAIRO_TRACE_OUTFILE_EXACT");
- if (filename == NULL) {
- char name[4096] = "";
-
- filename = getenv ("CAIRO_TRACE_OUTDIR");
- if (filename == NULL)
- filename = CAIRO_TRACE_OUTDIR;
-
- get_prog_name (name, sizeof (name));
- if (*name == '\0')
- strcpy (name, "cairo-trace.dat");
-
- snprintf (buf, sizeof (buf), "%s/%s.%d.trace",
- filename, name, getpid());
-
- filename = buf;
- } else {
- setenv ("CAIRO_TRACE_FD", "-1", 1);
- }
-
- logfile = fopen (filename, "wb");
- if (logfile == NULL) {
- fprintf (stderr, "Failed to open trace file '%s': %s\n",
- filename, strerror (errno));
- return FALSE;
- }
-
- fprintf (stderr, "cairo-trace: Recording cairo trace data to %s\n",
- filename);
-
-done:
- atexit (_close_trace);
- _emit_header ();
- return TRUE;
-}
-
-static cairo_bool_t
-_write_lock (void)
-{
- if (_error)
- return FALSE;
-
- if (! _should_trace ())
- return FALSE;
-
- if (! _init_logfile ())
- return FALSE;
-
-#if HAVE_FLOCKFILE && HAVE_FUNLOCKFILE
- flockfile (logfile);
-#endif
- return TRUE;
-}
-
-static void
-_write_unlock (void)
-{
- if (logfile == NULL)
- return;
-
-#if HAVE_FLOCKFILE && HAVE_FUNLOCKFILE
- funlockfile (logfile);
-#endif
-
- if (_flush)
- fflush (logfile);
-}
-
-
-static Object *
-_type_object_create (enum operand_type op_type, const void *ptr)
-{
- Type *type;
- Object *obj;
-
- type = _get_type (op_type);
-
- pthread_mutex_lock (&type->mutex);
- obj = _object_create (type, ptr);
- pthread_mutex_unlock (&type->mutex);
-
- return obj;
-}
-
-static Object *
-_get_object (enum operand_type op_type, const void *ptr)
-{
- Type *type;
- Object *obj;
-
- type = _get_type (op_type);
- pthread_mutex_lock (&type->mutex);
- obj = _type_get_object (type, ptr);
- pthread_mutex_unlock (&type->mutex);
-
- return obj;
-}
-
-static Object *current_object[2048]; /* XXX limit operand stack */
-static int current_stack_depth;
-
-static void
-dump_stack(const char *func)
-{
-#if DEBUG_STACK
- int n;
-
- _trace_printf ("%% %s: stack[%d] = [", func, current_stack_depth);
- fflush (logfile);
- for (n = 0; n < current_stack_depth; n++) {
- Object *obj = current_object[n];
- assert(obj && obj->type);
- _trace_printf (" %s%s%ld",
- obj->defined ? "" : "*",
- obj->type->op_code, obj->token);
- fflush (logfile);
- }
- _trace_printf (" ]\n");
- fflush (logfile);
-#endif
-}
-
-static void
-ensure_operands (int num_operands)
-{
- if (current_stack_depth < num_operands) {
- int n;
-
- fprintf (stderr, "Operand stack underflow!\n");
- for (n = 0; n < current_stack_depth; n++) {
- Object *obj = current_object[n];
-
- fprintf (stderr, " [%3d] = %s%ld\n",
- n, obj->type->op_code, obj->token);
- }
-
- abort ();
- }
-}
-
-static void
-_consume_operand (bool discard)
-{
- Object *obj;
-
- ensure_operands (1);
- obj = current_object[--current_stack_depth];
- if (!discard && ! obj->defined) {
- _trace_printf ("dup /%s%ld exch def\n",
- obj->type->op_code,
- obj->token);
- obj->defined = TRUE;
- }
- obj->operand = -1;
-}
-
-static void
-_exch_operands (void)
-{
- Object *tmp;
-
- ensure_operands (2);
- tmp = current_object[current_stack_depth-1];
- tmp->operand--;
- current_object[current_stack_depth-1] = current_object[current_stack_depth-2];
- current_object[current_stack_depth-2] = tmp;
- tmp = current_object[current_stack_depth-1];
- tmp->operand++;
-}
-
-static cairo_bool_t
-_pop_operands_to_depth (int depth)
-{
- if (depth < 0)
- return FALSE;
-
- assert(current_stack_depth >= depth);
- if (current_stack_depth == depth)
- return TRUE;
-
- while (current_stack_depth > depth + 1) {
- Object *c_obj;
-
- ensure_operands (1);
- c_obj = current_object[--current_stack_depth];
-
- assert(c_obj);
- assert(c_obj->type);
-
- if (! c_obj->defined) {
- current_stack_depth++;
- return FALSE;
- }
-
- _trace_printf ("pop %% %s%ld\n",
- c_obj->type->op_code, c_obj->token);
- c_obj->operand = -1;
- }
-
- _exch_operands ();
- _trace_printf ("exch\n");
-
- dump_stack(__func__);
- return TRUE;
-}
-
-static cairo_bool_t
-_pop_operands_to_object (Object *obj)
-{
- if (!obj)
- return FALSE;
-
- if (obj->operand == -1)
- return FALSE;
-
- if (obj->operand == current_stack_depth - 1)
- return TRUE;
-
- if (obj->operand == current_stack_depth - 2) {
- _exch_operands ();
- _trace_printf ("exch ");
- return TRUE;
- }
-
- return _pop_operands_to_depth (obj->operand + 1);
-}
-
-static cairo_bool_t
-_pop_operands_to (enum operand_type t, const void *ptr)
-{
- return _pop_operands_to_object (_get_object (t, ptr));
-}
-
-static cairo_bool_t
-_is_current_object (Object *obj, int depth)
-{
- if (current_stack_depth <= depth)
- return FALSE;
- return current_object[current_stack_depth-depth-1] == obj;
-}
-
-static cairo_bool_t
-_is_current (enum operand_type type, const void *ptr, int depth)
-{
- return _is_current_object (_get_object (type, ptr), depth);
-}
-
-static void
-_push_object(Object *obj)
-{
- assert(obj->operand == -1);
-
- if (current_stack_depth == ARRAY_LENGTH (current_object)) {
- int n;
-
- fprintf (stderr, "Operand stack overflow!\n");
- for (n = 0; n < current_stack_depth; n++) {
- obj = current_object[n];
-
- fprintf (stderr, " [%3d] = %s%ld\n",
- n, obj->type->op_code, obj->token);
- }
-
- abort ();
- }
-
- obj->operand = current_stack_depth;
- current_object[current_stack_depth++] = obj;
-}
-
-static void
-_push_operand (enum operand_type t, const void *ptr)
-{
- _push_object(_get_object(t, ptr));
-}
-
-static void
-_object_remove (Object *obj)
-{
- if (obj->operand != -1) {
- ensure_operands (1);
- if (obj->operand == current_stack_depth - 1) {
- _trace_printf ("pop %% %s%ld destroyed\n",
- obj->type->op_code, obj->token);
- } else if (obj->operand == current_stack_depth - 2) {
- _exch_operands ();
- _trace_printf ("exch pop %% %s%ld destroyed\n",
- obj->type->op_code, obj->token);
- } else {
- int n;
-
- _trace_printf ("%d -1 roll pop %% %s%ld destroyed\n",
- current_stack_depth - obj->operand,
- obj->type->op_code, obj->token);
-
- for (n = obj->operand; n < current_stack_depth - 1; n++) {
- current_object[n] = current_object[n+1];
- current_object[n]->operand = n;
- }
- }
- obj->operand = -1;
-
- current_stack_depth--;
- dump_stack(__func__);
- }
-}
-
-static void
-_object_undef (void *ptr)
-{
- Object *obj = ptr;
-
- if (_write_lock ()) {
- _object_remove (obj);
-
- if (obj->defined) {
- _trace_printf ("/%s%ld undef\n",
- obj->type->op_code, obj->token);
- }
-
- _write_unlock ();
- }
-
- _object_destroy (obj);
-}
-
-static long
-_create_context_id (cairo_t *cr)
-{
- Object *obj;
-
- obj = _get_object (CONTEXT, cr);
- if (obj == NULL) {
- obj = _type_object_create (CONTEXT, cr);
- DLCALL (cairo_set_user_data,
- cr, &destroy_key, obj, _object_undef);
- }
-
- return obj->token;
-}
-
-static long
-_get_id (enum operand_type op_type, const void *ptr)
-{
- Object *obj;
-
- obj = _get_object (op_type, ptr);
- if (obj == NULL) {
- if (logfile != NULL) {
- _trace_printf ("%% Unknown object of type %s, trace is incomplete.",
- _get_type (op_type)->name);
- }
- _error = TRUE;
- return -1;
- }
-
- return obj->token;
-}
-
-static cairo_bool_t
-_has_id (enum operand_type op_type, const void *ptr)
-{
- return _get_object (op_type, ptr) != NULL;
-}
-
-static long
-_create_font_face_id (cairo_font_face_t *font_face)
-{
- Object *obj;
-
- obj = _get_object (FONT_FACE, font_face);
- if (obj == NULL) {
- obj = _type_object_create (FONT_FACE, font_face);
- DLCALL (cairo_font_face_set_user_data,
- font_face, &destroy_key, obj, _object_undef);
- }
-
- return obj->token;
-}
-
-static long
-_get_font_face_id (cairo_font_face_t *font_face)
-{
- return _get_id (FONT_FACE, font_face);
-}
-
-static void
-_emit_font_face_id (cairo_font_face_t *font_face)
-{
- Object *obj = _get_object (FONT_FACE, font_face);
- if (obj == NULL) {
- _trace_printf ("null ");
- } else {
- if (obj->defined) {
- _trace_printf ("f%ld ", obj->token);
- } else {
- _trace_printf ("%d index ", current_stack_depth - obj->operand - 1);
- }
- }
-}
-
-static cairo_bool_t
-_has_pattern_id (cairo_pattern_t *pattern)
-{
- return _has_id (PATTERN, pattern);
-}
-
-static long
-_create_pattern_id (cairo_pattern_t *pattern)
-{
- Object *obj;
-
- obj = _get_object (PATTERN, pattern);
- if (obj == NULL) {
- obj = _type_object_create (PATTERN, pattern);
- DLCALL (cairo_pattern_set_user_data,
- pattern, &destroy_key, obj, _object_undef);
- }
-
- return obj->token;
-}
-
-static void
-_emit_pattern_id (cairo_pattern_t *pattern)
-{
- Object *obj = _get_object (PATTERN, pattern);
- if (obj == NULL) {
- _trace_printf ("null ");
- } else {
- if (obj->defined) {
- _trace_printf ("p%ld ", obj->token);
- } else {
- _trace_printf ("%d index ",
- current_stack_depth - obj->operand - 1);
- }
- }
-}
-
-static void
-_emit_scaled_font_id (const cairo_scaled_font_t *scaled_font)
-{
- Object *obj = _get_object (SCALED_FONT, scaled_font);
- if (obj == NULL) {
- _trace_printf ("null ");
- } else {
- if (obj->defined) {
- _trace_printf ("sf%ld ", obj->token);
- } else {
- _trace_printf ("%d index ",
- current_stack_depth - obj->operand - 1);
- }
- }
-}
-
-static long
-_create_scaled_font_id (cairo_scaled_font_t *font)
-{
- Object *obj;
-
- assert(_get_object (SCALED_FONT, font) == NULL);
- obj = _type_object_create (SCALED_FONT, font);
- DLCALL (cairo_scaled_font_set_user_data,
- font, &destroy_key, obj, _object_undef);
-
- return obj->token;
-}
-
-static cairo_bool_t
-_has_scaled_font_id (const cairo_scaled_font_t *font)
-{
- return _has_id (SCALED_FONT, font);
-}
-
-static Object *
-_create_surface (cairo_surface_t *surface)
-{
- Object *obj;
-
- obj = _get_object (SURFACE, surface);
- if (obj == NULL) {
- obj = _type_object_create (SURFACE, surface);
- DLCALL (cairo_surface_set_user_data,
- surface, &destroy_key, obj, _object_undef);
- }
-
- return obj;
-}
-
-static long
-_get_surface_id (cairo_surface_t *surface)
-{
- return _get_id (SURFACE, surface);
-}
-
-static cairo_bool_t
-_matrix_is_identity (const cairo_matrix_t *m)
-{
- return m->xx == 1. && m->yx == 0. &&
- m->xy == 0. && m->yy == 1. &&
- m->x0 == 0. && m->y0 == 0.;
-}
-
-#define BUFFER_SIZE 16384
-struct _data_stream {
- z_stream zlib_stream;
- unsigned char zin_buf[BUFFER_SIZE];
- unsigned char zout_buf[BUFFER_SIZE];
- unsigned char four_tuple[4];
- int base85_pending;
-};
-
-static void
-_write_zlib_data_start (struct _data_stream *stream)
-{
- stream->zlib_stream.zalloc = Z_NULL;
- stream->zlib_stream.zfree = Z_NULL;
- stream->zlib_stream.opaque = Z_NULL;
-
- deflateInit (&stream->zlib_stream, Z_DEFAULT_COMPRESSION);
-
- stream->zlib_stream.next_in = stream->zin_buf;
- stream->zlib_stream.avail_in = 0;
- stream->zlib_stream.next_out = stream->zout_buf;
- stream->zlib_stream.avail_out = BUFFER_SIZE;
-}
-
-static void
-_write_base85_data_start (struct _data_stream *stream)
-{
- stream->base85_pending = 0;
-}
-
-static cairo_bool_t
-_expand_four_tuple_to_five (unsigned char four_tuple[4],
- unsigned char five_tuple[5])
-{
- uint32_t value;
- int digit, i;
- cairo_bool_t all_zero = TRUE;
-
- value = four_tuple[0] << 24 |
- four_tuple[1] << 16 |
- four_tuple[2] << 8 |
- four_tuple[3] << 0;
- for (i = 0; i < 5; i++) {
- digit = value % 85;
- if (digit != 0 && all_zero)
- all_zero = FALSE;
- five_tuple[4-i] = digit + 33;
- value = value / 85;
- }
-
- return all_zero;
-}
-
-static void
-_write_base85_data (struct _data_stream *stream,
- const unsigned char *data,
- unsigned long length)
-{
- unsigned char five_tuple[5];
- int ret;
-
- assert (_should_trace ());
-
- while (length--) {
- stream->four_tuple[stream->base85_pending++] = *data++;
- if (stream->base85_pending == 4) {
- if (_expand_four_tuple_to_five (stream->four_tuple, five_tuple))
- ret = fwrite ("z", 1, 1, logfile);
- else
- ret = fwrite (five_tuple, 5, 1, logfile);
- (void)ret;
- stream->base85_pending = 0;
- }
- }
-}
-
-static void
-_write_zlib_data (struct _data_stream *stream, cairo_bool_t flush)
-{
- cairo_bool_t finished;
-
- do {
- int ret = deflate (&stream->zlib_stream, flush ? Z_FINISH : Z_NO_FLUSH);
- if (flush || stream->zlib_stream.avail_out == 0) {
- _write_base85_data (stream,
- stream->zout_buf,
- BUFFER_SIZE - stream->zlib_stream.avail_out);
- stream->zlib_stream.next_out = stream->zout_buf;
- stream->zlib_stream.avail_out = BUFFER_SIZE;
- }
-
- finished = TRUE;
- if (stream->zlib_stream.avail_in != 0)
- finished = FALSE;
- if (flush && ret != Z_STREAM_END)
- finished = FALSE;
- } while (! finished);
-
- stream->zlib_stream.next_in = stream->zin_buf;
-}
-
-static void
-_write_data_start (struct _data_stream *stream, uint32_t len)
-{
- _write_zlib_data_start (stream);
- _write_base85_data_start (stream);
-
- _trace_printf ("<|");
- len = to_be32 (len);
- _write_base85_data (stream, (unsigned char *) &len, sizeof (len));
-}
-
-static void
-_write_data (struct _data_stream *stream,
- const void *data,
- unsigned int length)
-{
- unsigned int count;
- const unsigned char *p = data;
-
- while (length) {
- count = length;
- if (count > BUFFER_SIZE - stream->zlib_stream.avail_in)
- count = BUFFER_SIZE - stream->zlib_stream.avail_in;
- memcpy (stream->zin_buf + stream->zlib_stream.avail_in, p, count);
- p += count;
- stream->zlib_stream.avail_in += count;
- length -= count;
-
- if (stream->zlib_stream.avail_in == BUFFER_SIZE)
- _write_zlib_data (stream, FALSE);
- }
-}
-
-static void
-_write_zlib_data_end (struct _data_stream *stream)
-{
- _write_zlib_data (stream, TRUE);
- deflateEnd (&stream->zlib_stream);
-
-}
-
-static void
-_write_base85_data_end (struct _data_stream *stream)
-{
- unsigned char five_tuple[5];
- int ret;
-
- assert (_should_trace ());
-
- if (stream->base85_pending) {
- memset (stream->four_tuple + stream->base85_pending,
- 0, 4 - stream->base85_pending);
- _expand_four_tuple_to_five (stream->four_tuple, five_tuple);
- ret = fwrite (five_tuple, stream->base85_pending+1, 1, logfile);
- (void) ret;
- }
-}
-
-static void
-_write_data_end (struct _data_stream *stream)
-{
- _write_zlib_data_end (stream);
- _write_base85_data_end (stream);
-
- _trace_printf ("~>");
-}
-
-static void
-_emit_data (const void *data, unsigned int length)
-{
- struct _data_stream stream;
-
- _write_data_start (&stream, length);
- _write_data (&stream, data, length);
- _write_data_end (&stream);
-}
-
-static const char *
-_format_to_string (cairo_format_t format)
-{
-#define f(name) case CAIRO_FORMAT_ ## name: return #name
- switch (format) {
- f(INVALID);
- f(ARGB32);
- f(RGB30);
- f(RGB24);
- f(RGB16_565);
- f(A8);
- f(A1);
- }
-#undef f
- return "UNKNOWN_FORMAT";
-}
-
-static const char *
-_format_to_content_string (cairo_format_t format)
-{
- switch (format) {
- case CAIRO_FORMAT_INVALID:
- return "INVALID";
- case CAIRO_FORMAT_ARGB32:
- return "COLOR_ALPHA";
- case CAIRO_FORMAT_RGB30:
- case CAIRO_FORMAT_RGB24:
- case CAIRO_FORMAT_RGB16_565:
- return "COLOR";
- case CAIRO_FORMAT_A8:
- case CAIRO_FORMAT_A1:
- return "ALPHA";
- }
- return "UNKNOWN";
-}
-
-static const char *
-_status_to_string (cairo_status_t status)
-{
-#define f(name) case CAIRO_STATUS_ ## name: return "STATUS_" #name
- switch (status) {
- f(SUCCESS);
- f(NO_MEMORY);
- f(INVALID_RESTORE);
- f(INVALID_POP_GROUP);
- f(NO_CURRENT_POINT);
- f(INVALID_MATRIX);
- f(INVALID_STATUS);
- f(NULL_POINTER);
- f(INVALID_STRING);
- f(INVALID_PATH_DATA);
- f(READ_ERROR);
- f(WRITE_ERROR);
- f(SURFACE_FINISHED);
- f(SURFACE_TYPE_MISMATCH);
- f(PATTERN_TYPE_MISMATCH);
- f(INVALID_CONTENT);
- f(INVALID_FORMAT);
- f(INVALID_VISUAL);
- f(FILE_NOT_FOUND);
- f(INVALID_DASH);
- f(INVALID_DSC_COMMENT);
- f(INVALID_INDEX);
- f(CLIP_NOT_REPRESENTABLE);
- f(TEMP_FILE_ERROR);
- f(INVALID_STRIDE);
- f(FONT_TYPE_MISMATCH);
- f(USER_FONT_IMMUTABLE);
- f(USER_FONT_ERROR);
- f(NEGATIVE_COUNT);
- f(INVALID_CLUSTERS);
- f(INVALID_SLANT);
- f(INVALID_WEIGHT);
- f(INVALID_SIZE);
- f(USER_FONT_NOT_IMPLEMENTED);
- f(DEVICE_TYPE_MISMATCH);
- f(DEVICE_ERROR);
- f(INVALID_MESH_CONSTRUCTION);
- f(DEVICE_FINISHED);
- f(JBIG2_GLOBAL_MISSING);
- case CAIRO_STATUS_LAST_STATUS:
- break;
- }
- return "UNKNOWN_STATUS";
-#undef f
-}
-
-static void CAIRO_PRINTF_FORMAT(2, 3)
-_emit_image (cairo_surface_t *image,
- const char *info,
- ...)
-{
- int stride, row, width, height;
- uint32_t len;
- cairo_format_t format;
- uint8_t row_stack[BUFFER_SIZE];
- uint8_t *rowdata;
- uint8_t *data;
- struct _data_stream stream;
- cairo_status_t status;
-
- status = DLCALL (cairo_surface_status, image);
- if (status) {
- _trace_printf ("<< /status //%s >> image",
- _status_to_string (status));
- return;
- }
-
- width = DLCALL (cairo_image_surface_get_width, image);
- height = DLCALL (cairo_image_surface_get_height, image);
- stride = DLCALL (cairo_image_surface_get_stride, image);
- format = DLCALL (cairo_image_surface_get_format, image);
- data = DLCALL (cairo_image_surface_get_data, image);
-
- _trace_printf ("dict\n"
- " /width %d set\n"
- " /height %d set\n"
- " /format //%s set\n",
- width, height,
- _format_to_string (format));
- if (info != NULL) {
- va_list ap;
-
- va_start (ap, info);
- _trace_vprintf (info, ap);
- va_end (ap);
- }
-
- if (DLCALL (cairo_version) >= CAIRO_VERSION_ENCODE (1, 9, 0)) {
- const char *mime_types[] = {
- CAIRO_MIME_TYPE_JPEG,
- CAIRO_MIME_TYPE_JP2,
- CAIRO_MIME_TYPE_PNG,
- NULL
- }, **mime_type;
-
- for (mime_type = mime_types; *mime_type; mime_type++) {
- const unsigned char *mime_data;
- unsigned long mime_length;
-
- DLCALL (cairo_surface_get_mime_data,
- image, *mime_type, &mime_data, &mime_length);
- if (mime_data != NULL) {
- _trace_printf (" /mime-type (%s) set\n"
- " /source <~",
- *mime_type);
- _write_base85_data_start (&stream);
- _write_base85_data (&stream, mime_data, mime_length);
- _write_base85_data_end (&stream);
- _trace_printf ("~> set\n"
- " image");
- return;
- }
- }
- }
-
- switch (format) {
- case CAIRO_FORMAT_A1: len = (width + 7)/8; break;
- case CAIRO_FORMAT_A8: len = width; break;
- case CAIRO_FORMAT_RGB16_565: len = 2*width; break;
- case CAIRO_FORMAT_RGB24: len = 3*width; break;
- default:
- case CAIRO_FORMAT_RGB30:
- case CAIRO_FORMAT_INVALID:
- case CAIRO_FORMAT_ARGB32: len = 4*width; break;
- }
-
- _trace_printf (" /source ");
- _write_data_start (&stream, len * height);
-
-#ifdef WORDS_BIGENDIAN
- switch (format) {
- case CAIRO_FORMAT_A1:
- for (row = height; row--; ) {
- _write_data (&stream, data, (width+7)/8);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_A8:
- for (row = height; row--; ) {
- _write_data (&stream, data, width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_RGB16_565:
- for (row = height; row--; ) {
- _write_data (&stream, data, 2*width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_RGB24:
- for (row = height; row--; ) {
- int col;
- rowdata = data;
- for (col = width; col--; ) {
- _write_data (&stream, rowdata, 3);
- rowdata+=4;
- }
- data += stride;
- }
- break;
- case CAIRO_FORMAT_RGB30:
- case CAIRO_FORMAT_ARGB32:
- for (row = height; row--; ) {
- _write_data (&stream, data, 4*width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_INVALID:
- default:
- break;
- }
-#else
- if (stride > ARRAY_LENGTH (row_stack)) {
- rowdata = malloc (stride);
- if (rowdata == NULL)
- goto BAIL;
- } else
- rowdata = row_stack;
-
- switch (format) {
- case CAIRO_FORMAT_A1:
- for (row = height; row--; ) {
- int col;
- for (col = 0; col < (width + 7)/8; col++)
- rowdata[col] = CAIRO_BITSWAP8 (data[col]);
- _write_data (&stream, rowdata, (width+7)/8);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_A8:
- for (row = height; row--; ) {
- _write_data (&stream, rowdata, width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_RGB16_565: /* XXX endianness */
- for (row = height; row--; ) {
- uint16_t *src = (uint16_t *) data;
- uint16_t *dst = (uint16_t *)rowdata;
- int col;
- for (col = 0; col < width; col++)
- dst[col] = bswap_16 (src[col]);
- _write_data (&stream, rowdata, 2*width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_RGB24:
- for (row = height; row--; ) {
- uint8_t *src = data;
- int col;
- for (col = 0; col < width; col++) {
- rowdata[3*col+2] = *src++;
- rowdata[3*col+1] = *src++;
- rowdata[3*col+0] = *src++;
- src++;
- }
- _write_data (&stream, rowdata, 3*width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_RGB30:
- case CAIRO_FORMAT_ARGB32:
- for (row = height; row--; ) {
- uint32_t *src = (uint32_t *) data;
- uint32_t *dst = (uint32_t *) rowdata;
- int col;
- for (col = 0; col < width; col++)
- dst[col] = bswap_32 (src[col]);
- _write_data (&stream, rowdata, 4*width);
- data += stride;
- }
- break;
- case CAIRO_FORMAT_INVALID:
- default:
- break;
- }
- if (rowdata != row_stack)
- free (rowdata);
-
-BAIL:
- _write_data_end (&stream);
-#endif
- _trace_printf (" set\n image");
-}
-
-static void
-_encode_string_literal (char *out, int max,
- const char *utf8, int len)
-{
- char c;
- const char *end;
-
- *out++ = '(';
- max--;
-
- if (utf8 == NULL)
- goto DONE;
-
- if (len < 0)
- len = strlen (utf8);
- end = utf8 + len;
-
- while (utf8 < end) {
- if (max < 5)
- break;
-
- switch ((c = *utf8++)) {
- case '\n':
- *out++ = '\\';
- *out++ = 'n';
- max -= 2;
- break;
- case '\r':
- *out++ = '\\';
- *out++ = 'r';
- max -= 2;
- case '\t':
- *out++ = '\\';
- *out++ = 't';
- max -= 2;
- break;
- case '\b':
- *out++ = '\\';
- *out++ = 'b';
- max -= 2;
- break;
- case '\f':
- *out++ = '\\';
- *out++ = 'f';
- max -= 2;
- break;
- case '\\':
- case '(':
- case ')':
- *out++ = '\\';
- *out++ = c;
- max -= 2;
- break;
- default:
- if (isprint (c) || isspace (c)) {
- *out++ = c;
- } else {
- int octal = 0;
- while (c) {
- octal *= 10;
- octal += c&7;
- c /= 8;
- }
- octal = snprintf (out, max, "\\%03d", octal);
- out += octal;
- max -= octal;
- }
- break;
- }
- }
-DONE:
- *out++ = ')';
- *out = '\0';
-}
-
-static void
-to_octal (int value, char *buf, size_t size)
-{
- do {
- buf[--size] = '0' + (value & 7);
- value >>= 3;
- } while (size);
-}
-
-static void
-_emit_string_literal (const char *utf8, int len)
-{
- char c;
- const char *end;
-
- if (utf8 == NULL) {
- _trace_printf ("()");
- return;
- }
-
- if (len < 0)
- len = strlen (utf8);
- end = utf8 + len;
-
- _trace_printf ("(");
- while (utf8 < end) {
- switch ((c = *utf8++)) {
- case '\n':
- c = 'n';
- goto ESCAPED_CHAR;
- case '\r':
- c = 'r';
- goto ESCAPED_CHAR;
- case '\t':
- c = 't';
- goto ESCAPED_CHAR;
- case '\b':
- c = 'b';
- goto ESCAPED_CHAR;
- case '\f':
- c = 'f';
- goto ESCAPED_CHAR;
- case '\\':
- case '(':
- case ')':
-ESCAPED_CHAR:
- _trace_printf ("\\%c", c);
- break;
- default:
- if (isprint (c) || isspace (c)) {
- _trace_printf ("%c", c);
- } else {
- char buf[4] = { '\\' };
- int ret_ignored;
-
- to_octal (c, buf+1, 3);
- ret_ignored = fwrite (buf, 4, 1, logfile);
- (void)ret_ignored;
- }
- break;
- }
- }
- _trace_printf (")");
-}
-
-static void
-_emit_current (Object *obj)
-{
- if (obj != NULL && ! _pop_operands_to_object (obj)) {
- if (obj->operand != -1) {
- int n;
-
- _trace_printf ("%d -1 roll %% %s%ld\n",
- current_stack_depth - obj->operand,
- obj->type->op_code, obj->token);
-
- for (n = obj->operand; n < current_stack_depth - 1; n++) {
- current_object[n] = current_object[n+1];
- current_object[n]->operand = n;
- }
- obj->operand = -1;
- current_stack_depth--;
- } else {
- assert(obj->defined);
- _trace_printf ("%s%ld\n", obj->type->op_code, obj->token);
- }
-
- _push_object (obj);
- dump_stack(__func__);
- }
-}
-
-static void
-_emit_context (cairo_t *cr)
-{
- _emit_current (_get_object (CONTEXT, cr));
-}
-
-static void
-_emit_pattern (cairo_pattern_t *pattern)
-{
- _emit_current (_get_object (PATTERN, pattern));
-}
-
-static void
-_emit_surface (cairo_surface_t *surface)
-{
- _emit_current (_get_object (SURFACE, surface));
-}
-
-static void CAIRO_PRINTF_FORMAT(2, 3)
-_emit_cairo_op (cairo_t *cr, const char *fmt, ...)
-{
- va_list ap;
-
- if (cr == NULL || ! _write_lock ())
- return;
-
- _emit_context (cr);
-
- va_start (ap, fmt);
- _trace_vprintf ( fmt, ap);
- va_end (ap);
-
- _write_unlock ();
-}
-
-cairo_t *
-cairo_create (cairo_surface_t *target)
-{
- cairo_t *ret;
- long surface_id;
- long context_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_create, target);
- context_id = _create_context_id (ret);
-
- _emit_line_info ();
- if (target != NULL && _write_lock ()) {
- surface_id = _get_surface_id (target);
- if (surface_id != -1) {
- _get_object (SURFACE, target)->foreign = FALSE;
-
- /* we presume that we will continue to use the context */
- if (_pop_operands_to (SURFACE, target)){
- _consume_operand (false);
- } else {
- _trace_printf ("s%ld ", surface_id);
- }
- _trace_printf ("context %% c%ld\n", context_id);
- _push_operand (CONTEXT, ret);
- dump_stack(__func__);
- }
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_save (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "save\n");
- DLCALL (cairo_save, cr);
- _exit_trace ();
-}
-
-void
-cairo_restore (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "restore\n");
- DLCALL (cairo_restore, cr);
- _exit_trace ();
-}
-
-void
-cairo_push_group (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "//COLOR_ALPHA push-group\n");
- DLCALL (cairo_push_group, cr);
- _exit_trace ();
-}
-
-static const char *
-_content_to_string (cairo_content_t content)
-{
- switch (content) {
- case CAIRO_CONTENT_ALPHA: return "ALPHA";
- case CAIRO_CONTENT_COLOR: return "COLOR";
- default:
- case CAIRO_CONTENT_COLOR_ALPHA: return "COLOR_ALPHA";
- }
-}
-
-void
-cairo_push_group_with_content (cairo_t *cr, cairo_content_t content)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "//%s push-group\n", _content_to_string (content));
- DLCALL (cairo_push_group_with_content, cr, content);
- _exit_trace ();
-}
-
-cairo_pattern_t *
-cairo_pop_group (cairo_t *cr)
-{
- cairo_pattern_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pop_group, cr);
-
- _emit_line_info ();
- _emit_cairo_op (cr, "pop-group %% p%ld\n", _create_pattern_id (ret));
- _push_operand (PATTERN, ret);
- dump_stack(__func__);
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_pop_group_to_source (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "pop-group set-source\n");
- DLCALL (cairo_pop_group_to_source, cr);
- _exit_trace ();
-}
-
-static const char *
-_operator_to_string (cairo_operator_t op)
-{
-#define f(name) case CAIRO_OPERATOR_ ## name: return #name
- switch (op) {
- f(OVER);
- f(SOURCE);
- f(CLEAR);
- f(IN);
- f(OUT);
- f(ATOP);
- f(DEST);
- f(DEST_OVER);
- f(DEST_IN);
- f(DEST_OUT);
- f(DEST_ATOP);
- f(XOR);
- f(ADD);
- f(SATURATE);
- f(MULTIPLY);
- f(SCREEN);
- f(OVERLAY);
- f(DARKEN);
- f(LIGHTEN);
- case CAIRO_OPERATOR_COLOR_DODGE: return "DODGE";
- case CAIRO_OPERATOR_COLOR_BURN: return "BURN";
- f(HARD_LIGHT);
- f(SOFT_LIGHT);
- f(DIFFERENCE);
- f(EXCLUSION);
- f(HSL_HUE);
- f(HSL_SATURATION);
- f(HSL_COLOR);
- f(HSL_LUMINOSITY);
- }
-#undef f
- return "UNKNOWN_OPERATOR";
-}
-
-void
-cairo_set_operator (cairo_t *cr, cairo_operator_t op)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "//%s set-operator\n", _operator_to_string (op));
- DLCALL (cairo_set_operator, cr, op);
- _exit_trace ();
-}
-
-void
-cairo_set_source_rgb (cairo_t *cr, double red, double green, double blue)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g %g %g set-source-rgb\n", red, green, blue);
- DLCALL (cairo_set_source_rgb, cr, red, green, blue);
- _exit_trace ();
-}
-
-void
-cairo_set_source_rgba (cairo_t *cr, double red, double green, double blue, double alpha)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g %g %g %g set-source-rgba\n",
- red, green, blue, alpha);
- DLCALL (cairo_set_source_rgba, cr, red, green, blue, alpha);
- _exit_trace ();
-}
-
-static void
-_emit_source_image (cairo_surface_t *surface)
-{
- Object *obj;
- cairo_surface_t *image;
- cairo_t *cr;
-
- obj = _get_object (SURFACE, surface);
- if (obj == NULL)
- return;
-
- image = DLCALL (cairo_image_surface_create,
- CAIRO_FORMAT_ARGB32,
- obj->width,
- obj->height);
- cr = DLCALL (cairo_create, image);
- DLCALL (cairo_set_source_surface, cr, surface, 0, 0);
- DLCALL (cairo_paint, cr);
- DLCALL (cairo_destroy, cr);
-
- _emit_image (image, NULL);
- _trace_printf (" set-source-image ");
- DLCALL (cairo_surface_destroy, image);
-
- obj->foreign = FALSE;
-}
-
-static void
-_emit_source_image_rectangle (cairo_surface_t *surface,
- int x, int y,
- int width, int height)
-{
- Object *obj;
- cairo_surface_t *image;
- cairo_t *cr;
-
- obj = _get_object (SURFACE, surface);
- if (obj == NULL)
- return;
-
- if (obj->foreign) {
- _emit_source_image (surface);
- return;
- }
-
- image = DLCALL (cairo_image_surface_create,
- CAIRO_FORMAT_ARGB32,
- width,
- height);
- cr = DLCALL (cairo_create, image);
- DLCALL (cairo_set_source_surface, cr, surface, x, y);
- DLCALL (cairo_paint, cr);
- DLCALL (cairo_destroy, cr);
-
- _emit_image (image, NULL);
- _trace_printf (" %d %d set-device-offset set-source-image ",
- x, y);
- DLCALL (cairo_surface_destroy, image);
-}
-
-void
-cairo_set_source_surface (cairo_t *cr, cairo_surface_t *surface, double x, double y)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && surface != NULL && _write_lock ()) {
- Object *obj = _get_object (SURFACE, surface);
-
- if (_is_current (SURFACE, surface, 0) &&
- _is_current (CONTEXT, cr, 1))
- {
- _consume_operand (false);
- }
- else if (_is_current (SURFACE, surface, 1) &&
- _is_current (CONTEXT, cr, 0) &&
- obj->defined)
- {
- _trace_printf ("exch ");
- _exch_operands ();
- _consume_operand (false);
- } else if (obj->defined) {
- _emit_context (cr);
- _trace_printf ("s%ld ", obj->token);
- } else {
- _emit_context (cr);
- _trace_printf ("%d index ",
- current_stack_depth - obj->operand - 1);
- }
-
- if (obj->foreign)
- _emit_source_image (surface);
-
- _trace_printf ("pattern");
- if (x != 0. || y != 0.)
- _trace_printf (" %g %g translate", -x, -y);
-
- _trace_printf (" set-source\n");
- _write_unlock ();
- }
-
- DLCALL (cairo_set_source_surface, cr, surface, x, y);
- _exit_trace ();
-}
-
-void
-cairo_set_source (cairo_t *cr, cairo_pattern_t *source)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && source != NULL && _write_lock ()) {
- Object *obj = _get_object (PATTERN, source);
- cairo_bool_t need_context_and_pattern = TRUE;
-
- if (_is_current (PATTERN, source, 0) &&
- _is_current (CONTEXT, cr, 1))
- {
- if (obj->defined) {
- _consume_operand (false);
- } else {
- _trace_printf ("exch 1 index ");
- _exch_operands ();
- }
- need_context_and_pattern = FALSE;
- }
- else if (_is_current (PATTERN, source, 1) &&
- _is_current (CONTEXT, cr, 0))
- {
- if (obj->defined) {
- _trace_printf ("exch ");
- _exch_operands ();
- _consume_operand (false);
- need_context_and_pattern = FALSE;
- }
- }
-
- if (need_context_and_pattern) {
- _emit_context (cr);
- _emit_pattern_id (source);
- }
-
- _trace_printf ("set-source %% p%ld\n", obj->token);
- _write_unlock ();
- }
-
- DLCALL (cairo_set_source, cr, source);
- _exit_trace ();
-}
-
-cairo_pattern_t *
-cairo_get_source (cairo_t *cr)
-{
- cairo_pattern_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_get_source, cr);
-
- if (! _has_pattern_id (ret)) {
- _emit_cairo_op (cr, "/source get /p%ld exch def\n",
- _create_pattern_id (ret));
- _get_object (PATTERN, ret)->defined = TRUE;
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_set_tolerance (cairo_t *cr, double tolerance)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g set-tolerance\n", tolerance);
- DLCALL (cairo_set_tolerance, cr, tolerance);
- _exit_trace ();
-}
-
-static const char *
-_antialias_to_string (cairo_antialias_t antialias)
-{
-#define f(name) case CAIRO_ANTIALIAS_ ## name: return "ANTIALIAS_" #name
- switch (antialias) {
- f(DEFAULT);
-
- f(NONE);
- f(GRAY);
- f(SUBPIXEL);
-
- f(FAST);
- f(GOOD);
- f(BEST);
- };
-#undef f
- return "UNKNOWN_ANTIALIAS";
-}
-
-void
-cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr,
- "//%s set-antialias\n", _antialias_to_string (antialias));
- DLCALL (cairo_set_antialias, cr, antialias);
- _exit_trace ();
-}
-
-static const char *
-_fill_rule_to_string (cairo_fill_rule_t rule)
-{
-#define f(name) case CAIRO_FILL_RULE_ ## name: return #name
- switch (rule) {
- f(WINDING);
- f(EVEN_ODD);
- };
-#undef f
- return "UNKNOWN_FILL_RULE";
-}
-
-void
-cairo_set_fill_rule (cairo_t *cr, cairo_fill_rule_t fill_rule)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr,
- "//%s set-fill-rule\n", _fill_rule_to_string (fill_rule));
- DLCALL (cairo_set_fill_rule, cr, fill_rule);
- _exit_trace ();
-}
-
-void
-cairo_set_line_width (cairo_t *cr, double width)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g set-line-width\n", width);
- DLCALL (cairo_set_line_width, cr, width);
- _exit_trace ();
-}
-
-static const char *
-_line_cap_to_string (cairo_line_cap_t line_cap)
-{
-#define f(name) case CAIRO_LINE_CAP_ ## name: return "LINE_CAP_" #name
- switch (line_cap) {
- f(BUTT);
- f(ROUND);
- f(SQUARE);
- };
-#undef f
- return "UNKNOWN_LINE_CAP";
-}
-
-void
-cairo_set_line_cap (cairo_t *cr, cairo_line_cap_t line_cap)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "//%s set-line-cap\n", _line_cap_to_string (line_cap));
- DLCALL (cairo_set_line_cap, cr, line_cap);
- _exit_trace ();
-}
-
-static const char *
-_line_join_to_string (cairo_line_join_t line_join)
-{
-#define f(name) case CAIRO_LINE_JOIN_ ## name: return "LINE_JOIN_" #name
- switch (line_join) {
- f(MITER);
- f(ROUND);
- f(BEVEL);
- };
-#undef f
- return "UNKNOWN_LINE_JOIN";
-}
-
-void
-cairo_set_line_join (cairo_t *cr, cairo_line_join_t line_join)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr,
- "//%s set-line-join\n", _line_join_to_string (line_join));
- DLCALL (cairo_set_line_join, cr, line_join);
- _exit_trace ();
-}
-
-void
-cairo_set_dash (cairo_t *cr, const double *dashes, int num_dashes, double offset)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && _write_lock ()) {
- int n;
-
- _emit_context (cr);
-
- _trace_printf ("[");
- for (n = 0; n < num_dashes; n++) {
- if (n != 0)
- _trace_printf (" ");
- _trace_printf ("%g", dashes[n]);
- }
- _trace_printf ("] %g set-dash\n", offset);
-
- _write_unlock ();
- }
-
- DLCALL (cairo_set_dash, cr, dashes, num_dashes, offset);
- _exit_trace ();
-}
-
-void
-cairo_set_miter_limit (cairo_t *cr, double limit)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g set-miter-limit\n", limit);
- DLCALL (cairo_set_miter_limit, cr, limit);
- _exit_trace ();
-}
-
-void
-cairo_translate (cairo_t *cr, double tx, double ty)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g %g translate\n", tx, ty);
- DLCALL (cairo_translate, cr, tx, ty);
- _exit_trace ();
-}
-
-void
-cairo_scale (cairo_t *cr, double sx, double sy)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g %g scale\n", sx, sy);
- DLCALL (cairo_scale, cr, sx, sy);
- _exit_trace ();
-}
-
-void
-cairo_rotate (cairo_t *cr, double angle)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g rotate\n", angle);
- DLCALL (cairo_rotate, cr, angle);
- _exit_trace ();
-}
-
-void
-cairo_transform (cairo_t *cr, const cairo_matrix_t *matrix)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g %g %g %g %g %g matrix transform\n",
- matrix->xx, matrix->yx,
- matrix->xy, matrix->yy,
- matrix->x0, matrix->y0);
- DLCALL (cairo_transform, cr, matrix);
- _exit_trace ();
-}
-
-void
-cairo_set_matrix (cairo_t *cr, const cairo_matrix_t *matrix)
-{
- _enter_trace ();
- _emit_line_info ();
- if (_matrix_is_identity (matrix)) {
- _emit_cairo_op (cr, "identity set-matrix\n");
- } else {
- _emit_cairo_op (cr, "%g %g %g %g %g %g matrix set-matrix\n",
- matrix->xx, matrix->yx,
- matrix->xy, matrix->yy,
- matrix->x0, matrix->y0);
- }
- DLCALL (cairo_set_matrix, cr, matrix);
- _exit_trace ();
-}
-
-cairo_surface_t *
-cairo_get_target (cairo_t *cr)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_get_target, cr);
- if (cr != NULL) {
- Object *obj = _create_surface (ret);
-
- if (! obj->defined) {
- _emit_cairo_op (cr,
- "/target get /s%ld exch def\n",
- obj->token);
- obj->defined = TRUE;
- }
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_get_group_target (cairo_t *cr)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_get_group_target, cr);
- if (cr != NULL) {
- Object *obj = _create_surface (ret);
-
- if (! obj->defined) {
- _emit_cairo_op (cr,
- "/group-target get /s%ld exch def\n",
- obj->token);
- obj->defined = TRUE;
- }
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_identity_matrix (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "identity set-matrix\n");
- DLCALL (cairo_identity_matrix, cr);
- _exit_trace ();
-}
-
-void
-cairo_new_path (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "n ");
- DLCALL (cairo_new_path, cr);
- _exit_trace ();
-}
-
-void
-cairo_move_to (cairo_t *cr, double x, double y)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g m ", x, y);
- DLCALL (cairo_move_to, cr, x, y);
- _exit_trace ();
-}
-
-void
-cairo_new_sub_path (cairo_t *cr)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "N ");
- DLCALL (cairo_new_sub_path, cr);
- _exit_trace ();
-}
-
-void
-cairo_line_to (cairo_t *cr, double x, double y)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g l ", x, y);
- DLCALL (cairo_line_to, cr, x, y);
- _exit_trace ();
-}
-
-void
-cairo_curve_to (cairo_t *cr, double x1, double y1, double x2, double y2, double x3, double y3)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g %g %g %g %g c ", x1, y1, x2, y2, x3, y3);
- DLCALL (cairo_curve_to, cr, x1, y1, x2, y2, x3, y3);
- _exit_trace ();
-}
-
-void
-cairo_arc (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g %g %g %g arc\n", xc, yc, radius, angle1, angle2);
- DLCALL (cairo_arc, cr, xc, yc, radius, angle1, angle2);
- _exit_trace ();
-}
-
-void
-cairo_arc_negative (cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g %g %g %g arc-\n",
- xc, yc, radius, angle1, angle2);
- DLCALL (cairo_arc_negative, cr, xc, yc, radius, angle1, angle2);
- _exit_trace ();
-}
-
-void
-cairo_rel_move_to (cairo_t *cr, double dx, double dy)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g M ", dx, dy);
- DLCALL (cairo_rel_move_to, cr, dx, dy);
- _exit_trace ();
-}
-
-void
-cairo_rel_line_to (cairo_t *cr, double dx, double dy)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g L ", dx, dy);
- DLCALL (cairo_rel_line_to, cr, dx, dy);
- _exit_trace ();
-}
-
-void
-cairo_rel_curve_to (cairo_t *cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g %g %g %g %g C ",
- dx1, dy1, dx2, dy2, dx3, dy3);
- DLCALL (cairo_rel_curve_to, cr, dx1, dy1, dx2, dy2, dx3, dy3);
- _exit_trace ();
-}
-
-void
-cairo_rectangle (cairo_t *cr, double x, double y, double width, double height)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "%g %g %g %g rectangle\n", x, y, width, height);
- DLCALL (cairo_rectangle, cr, x, y, width, height);
- _exit_trace ();
-}
-
-void
-cairo_close_path (cairo_t *cr)
-{
- _enter_trace ();
- _emit_cairo_op (cr, "h\n");
- DLCALL (cairo_close_path, cr);
- _exit_trace ();
-}
-
-void
-cairo_paint (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "paint\n");
- DLCALL (cairo_paint, cr);
- _exit_trace ();
-}
-
-void
-cairo_paint_with_alpha (cairo_t *cr, double alpha)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g paint-with-alpha\n", alpha);
- DLCALL (cairo_paint_with_alpha, cr, alpha);
- _exit_trace ();
-}
-
-void
-cairo_mask (cairo_t *cr, cairo_pattern_t *pattern)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && pattern != NULL && _write_lock ()) {
- Object *obj = _get_object (PATTERN, pattern);
- cairo_bool_t need_context_and_pattern = TRUE;
-
- if (_is_current (PATTERN, pattern, 0) &&
- _is_current (CONTEXT, cr, 1))
- {
- if (obj->defined) {
- _consume_operand (false);
- need_context_and_pattern = FALSE;
- }
- }
- else if (_is_current (PATTERN, pattern, 1) &&
- _is_current (CONTEXT, cr, 0))
- {
- if (obj->defined) {
- _trace_printf ("exch ");
- _exch_operands ();
- _consume_operand (false);
- need_context_and_pattern = FALSE;
- }
- }
-
- if (need_context_and_pattern) {
- _emit_context (cr);
- _emit_pattern_id (pattern);
- }
-
- _trace_printf (" mask\n");
- _write_unlock ();
- }
- DLCALL (cairo_mask, cr, pattern);
- _exit_trace ();
-}
-
-void
-cairo_mask_surface (cairo_t *cr, cairo_surface_t *surface, double x, double y)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && surface != NULL && _write_lock ()) {
- Object *obj = _get_object (SURFACE, surface);
- if (_is_current (SURFACE, surface, 0) &&
- _is_current (CONTEXT, cr, 1))
- {
- _consume_operand (false);
- }
- else if (_is_current (SURFACE, surface, 1) &&
- _is_current (CONTEXT, cr, 0))
- {
- _trace_printf ("exch ");
- _exch_operands ();
- _consume_operand (false);
- } else if (obj->defined){
- _emit_context (cr);
- _trace_printf ("s%ld ", obj->token);
- } else {
- _emit_context (cr);
- _trace_printf ("%d index ",
- current_stack_depth - obj->operand - 1);
- }
- _trace_printf ("pattern");
-
- if (x != 0. || y != 0.)
- _trace_printf (" %g %g translate", -x, -y);
-
- _trace_printf (" mask\n");
- _write_unlock ();
- }
-
- DLCALL (cairo_mask_surface, cr, surface, x, y);
- _exit_trace ();
-}
-
-void
-cairo_stroke (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "stroke\n");
- DLCALL (cairo_stroke, cr);
- _exit_trace ();
-}
-
-void
-cairo_stroke_preserve (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "stroke+\n");
- DLCALL (cairo_stroke_preserve, cr);
- _exit_trace ();
-}
-
-void
-cairo_fill (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "fill\n");
- DLCALL (cairo_fill, cr);
- _exit_trace ();
-}
-
-void
-cairo_fill_preserve (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "fill+\n");
- DLCALL (cairo_fill_preserve, cr);
- _exit_trace ();
-}
-
-void
-cairo_copy_page (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "copy-page\n");
- DLCALL (cairo_copy_page, cr);
- _exit_trace ();
-}
-
-void
-cairo_show_page (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "show-page\n");
- DLCALL (cairo_show_page, cr);
- _exit_trace ();
-}
-
-void
-cairo_clip (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "clip\n");
- DLCALL (cairo_clip, cr);
- _exit_trace ();
-}
-
-void
-cairo_clip_preserve (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "clip+\n");
- DLCALL (cairo_clip_preserve, cr);
- _exit_trace ();
-}
-
-void
-cairo_reset_clip (cairo_t *cr)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "reset-clip\n");
- DLCALL (cairo_reset_clip, cr);
- _exit_trace ();
-}
-
-
-static const char *
-_slant_to_string (cairo_font_slant_t font_slant)
-{
-#define f(name) case CAIRO_FONT_SLANT_ ## name: return "SLANT_" #name
- switch (font_slant) {
- f(NORMAL);
- f(ITALIC);
- f(OBLIQUE);
- };
-#undef f
- return "UNKNOWN_SLANT";
-}
-
-static const char *
-_weight_to_string (cairo_font_weight_t font_weight)
-{
-#define f(name) case CAIRO_FONT_WEIGHT_ ## name: return "WEIGHT_" #name
- switch (font_weight) {
- f(NORMAL);
- f(BOLD);
- };
-#undef f
- return "UNKNOWN_WEIGHT";
-}
-
-void
-cairo_select_font_face (cairo_t *cr, const char *family, cairo_font_slant_t slant, cairo_font_weight_t weight)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && _write_lock ()) {
- _emit_context (cr);
- _emit_string_literal (family, -1);
- _trace_printf (" //%s //%s select-font-face\n",
- _slant_to_string (slant),
- _weight_to_string (weight));
- _write_unlock ();
- }
- DLCALL (cairo_select_font_face, cr, family, slant, weight);
- _exit_trace ();
-}
-
-cairo_font_face_t *
-cairo_get_font_face (cairo_t *cr)
-{
- cairo_font_face_t *ret;
- long font_face_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_get_font_face, cr);
- font_face_id = _create_font_face_id (ret);
-
- _emit_cairo_op (cr, "/font-face get %% f%ld\n", font_face_id);
- _push_operand (FONT_FACE, ret);
- dump_stack(__func__);
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_set_font_face (cairo_t *cr, cairo_font_face_t *font_face)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && font_face != NULL && _write_lock ()) {
- if (_is_current (FONT_FACE, font_face, 0) &&
- _is_current (CONTEXT, cr, 1))
- {
- _consume_operand (false);
- }
- else if (_is_current (FONT_FACE, font_face, 1) &&
- _is_current (CONTEXT, cr, 0))
- {
- _trace_printf ("exch ");
- _exch_operands ();
- _consume_operand (false);
- }
- else
- {
- _emit_context (cr);
- _emit_font_face_id (font_face);
- }
-
- _trace_printf ("set-font-face\n");
- _write_unlock ();
- }
-
- DLCALL (cairo_set_font_face, cr, font_face);
- _exit_trace ();
-}
-
-void
-cairo_set_font_size (cairo_t *cr, double size)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g set-font-size\n", size);
- DLCALL (cairo_set_font_size, cr, size);
- _exit_trace ();
-}
-
-void
-cairo_set_font_matrix (cairo_t *cr, const cairo_matrix_t *matrix)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_cairo_op (cr, "%g %g %g %g %g %g matrix set-font-matrix\n",
- matrix->xx, matrix->yx,
- matrix->xy, matrix->yy,
- matrix->x0, matrix->y0);
- DLCALL (cairo_set_font_matrix, cr, matrix);
- _exit_trace ();
-}
-
-static const char *
-_subpixel_order_to_string (cairo_subpixel_order_t subpixel_order)
-{
-#define f(name) case CAIRO_SUBPIXEL_ORDER_ ## name: return "SUBPIXEL_ORDER_" #name
- switch (subpixel_order) {
- f(DEFAULT);
- f(RGB);
- f(BGR);
- f(VRGB);
- f(VBGR);
- };
-#undef f
- return "UNKNOWN_SUBPIXEL_ORDER";
-}
-
-static const char *
-_hint_style_to_string (cairo_hint_style_t hint_style)
-{
-#define f(name) case CAIRO_HINT_STYLE_ ## name: return "HINT_STYLE_" #name
- switch (hint_style) {
- f(DEFAULT);
- f(NONE);
- f(SLIGHT);
- f(MEDIUM);
- f(FULL);
- };
-#undef f
- return "UNKNOWN_HINT_STYLE";
-}
-
-static const char *
-_hint_metrics_to_string (cairo_hint_metrics_t hint_metrics)
-{
-#define f(name) case CAIRO_HINT_METRICS_ ## name: return "HINT_METRICS_" #name
- switch (hint_metrics) {
- f(DEFAULT);
- f(OFF);
- f(ON);
- };
-#undef f
- return "UNKNOWN_HINT_METRICS";
-}
-
-static void
-_emit_font_options (const cairo_font_options_t *options)
-{
- cairo_antialias_t antialias;
- cairo_subpixel_order_t subpixel_order;
- cairo_hint_style_t hint_style;
- cairo_hint_metrics_t hint_metrics;
-
- _trace_printf ("<<");
-
- antialias = DLCALL (cairo_font_options_get_antialias, options);
- if (antialias != CAIRO_ANTIALIAS_DEFAULT) {
- _trace_printf (" /antialias //%s",
- _antialias_to_string (antialias));
- }
-
- subpixel_order = DLCALL (cairo_font_options_get_subpixel_order, options);
- if (subpixel_order != CAIRO_SUBPIXEL_ORDER_DEFAULT) {
- _trace_printf (" /subpixel-order //%s",
- _subpixel_order_to_string (subpixel_order));
- }
-
- hint_style = DLCALL (cairo_font_options_get_hint_style, options);
- if (hint_style != CAIRO_HINT_STYLE_DEFAULT) {
- _trace_printf (" /hint-style //%s",
- _hint_style_to_string (hint_style));
- }
-
- hint_metrics = DLCALL (cairo_font_options_get_hint_metrics, options);
- if (hint_metrics != CAIRO_HINT_METRICS_DEFAULT) {
- _trace_printf (" /hint-metrics //%s",
- _hint_metrics_to_string (hint_metrics));
- }
-
- _trace_printf (" >>");
-}
-
-void
-cairo_set_font_options (cairo_t *cr, const cairo_font_options_t *options)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && options != NULL && _write_lock ()) {
- _emit_context (cr);
- _emit_font_options (options);
- _trace_printf (" set-font-options\n");
- _write_unlock ();
- }
-
- DLCALL (cairo_set_font_options, cr, options);
- _exit_trace ();
-}
-
-cairo_scaled_font_t *
-cairo_get_scaled_font (cairo_t *cr)
-{
- cairo_scaled_font_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_get_scaled_font, cr);
-
- if (cr != NULL && ! _has_scaled_font_id (ret)) {
- _emit_cairo_op (cr, "/scaled-font get /sf%ld exch def\n",
- _create_scaled_font_id (ret));
- _get_object (SCALED_FONT, ret)->defined = TRUE;
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_set_scaled_font (cairo_t *cr, const cairo_scaled_font_t *scaled_font)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && scaled_font != NULL && _write_lock ()) {
- Object *obj = _get_object (SCALED_FONT, scaled_font);
- cairo_bool_t need_context_and_font = TRUE;
-
- if (_is_current (SCALED_FONT, scaled_font, 0) &&
- _is_current (CONTEXT, cr, 1))
- {
- if (obj->defined) {
- _consume_operand (false);
- } else {
- _trace_printf ("exch 1 index ");
- _exch_operands ();
- }
- need_context_and_font = FALSE;
- }
- else if (_is_current (SCALED_FONT, scaled_font, 1) &&
- _is_current (CONTEXT, cr, 0))
- {
- if (obj->defined) {
- _trace_printf ("exch ");
- _exch_operands ();
- _consume_operand (false);
- need_context_and_font = FALSE;
- }
- }
-
- if (need_context_and_font) {
- _emit_context (cr);
- _emit_scaled_font_id (scaled_font);
- }
-
- _trace_printf ("set-scaled-font\n");
-
- _write_unlock ();
- }
- DLCALL (cairo_set_scaled_font, cr, scaled_font);
- _exit_trace ();
-}
-
-static void
-_emit_matrix (const cairo_matrix_t *m)
-{
- if (_matrix_is_identity(m))
- {
- _trace_printf ("identity");
- }
- else
- {
- _trace_printf ("%g %g %g %g %g %g matrix",
- m->xx, m->yx,
- m->xy, m->yy,
- m->x0, m->y0);
- }
-}
-
-cairo_scaled_font_t *
-cairo_scaled_font_create (cairo_font_face_t *font_face,
- const cairo_matrix_t *font_matrix,
- const cairo_matrix_t *ctm,
- const cairo_font_options_t *options)
-{
- cairo_scaled_font_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_scaled_font_create, font_face, font_matrix, ctm, options);
- if (_has_scaled_font_id (ret))
- goto out;
-
- _emit_line_info ();
- if (font_face != NULL &&
- font_matrix != NULL &&
- ctm != NULL &&
- options != NULL
- && _write_lock ())
- {
- Object *obj;
-
- obj = _type_object_create (SCALED_FONT, ret);
- DLCALL (cairo_scaled_font_set_user_data,
- ret, &destroy_key, obj, _object_undef);
-
- if (_pop_operands_to (FONT_FACE, font_face))
- _consume_operand (false);
- else
- _trace_printf ("f%ld ", _get_font_face_id (font_face));
-
- _emit_matrix (font_matrix);
- _trace_printf (" ");
-
- _emit_matrix (ctm);
- _trace_printf (" ");
-
- _emit_font_options (options);
-
- _trace_printf (" scaled-font /sf%ld exch def\n",
- obj->token);
- obj->defined = TRUE;
-
- _write_unlock ();
- }
-
-out:
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_show_text (cairo_t *cr, const char *utf8)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && _write_lock ()) {
- _emit_context (cr);
- _emit_string_literal (utf8, -1);
- _trace_printf (" show-text\n");
- _write_unlock ();
- }
- DLCALL (cairo_show_text, cr, utf8);
- _exit_trace ();
-}
-
-static void
-_glyph_advance (cairo_scaled_font_t *font,
- const cairo_glyph_t *glyph,
- double *x, double *y)
-{
- cairo_text_extents_t extents;
-
- DLCALL (cairo_scaled_font_glyph_extents, font, glyph, 1, &extents);
- *x += extents.x_advance;
- *y += extents.y_advance;
-}
-
-#define TOLERANCE 1e-5
-static void
-_emit_glyphs (cairo_scaled_font_t *font,
- const cairo_glyph_t *glyphs,
- int num_glyphs)
-{
- double x,y;
- int n;
-
- if (num_glyphs == 0) {
- _trace_printf ("[]");
- return;
- }
-
- for (n = 0; n < num_glyphs; n++) {
- if (glyphs[n].index > 255)
- break;
- }
-
- x = glyphs->x;
- y = glyphs->y;
- if (n < num_glyphs) { /* need full glyph range */
- cairo_bool_t first;
-
- _trace_printf ("[%g %g [", x, y);
- first = TRUE;
- while (num_glyphs--) {
- if (fabs (glyphs->x - x) > TOLERANCE ||
- fabs (glyphs->y - y) > TOLERANCE)
- {
- x = glyphs->x;
- y = glyphs->y;
- _trace_printf ("] %g %g [", x, y);
- first = TRUE;
- }
-
- if (! first)
- _trace_printf (" ");
- _trace_printf ("%lu", glyphs->index);
- first = FALSE;
-
- _glyph_advance (font, glyphs, &x, &y);
- glyphs++;
- }
- _trace_printf ("]]");
- } else {
- struct _data_stream stream;
-
- if (num_glyphs == 1) {
- _trace_printf ("[%g %g <%02lx>]", x, y, glyphs->index);
- } else {
- _trace_printf ("[%g %g <~", x, y);
- _write_base85_data_start (&stream);
- while (num_glyphs--) {
- unsigned char c;
-
- if (fabs (glyphs->x - x) > TOLERANCE ||
- fabs (glyphs->y - y) > TOLERANCE)
- {
- x = glyphs->x;
- y = glyphs->y;
- _write_base85_data_end (&stream);
- _trace_printf ("~> %g %g <~", x, y);
- _write_base85_data_start (&stream);
- }
-
- c = glyphs->index;
- _write_base85_data (&stream, &c, 1);
-
- _glyph_advance (font, glyphs, &x, &y);
- glyphs++;
- }
- _write_base85_data_end (&stream);
- _trace_printf ("~>]");
- }
- }
-}
-
-void
-cairo_show_glyphs (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && glyphs != NULL && _write_lock ()) {
- cairo_scaled_font_t *font;
-
- _emit_context (cr);
- font = DLCALL (cairo_get_scaled_font, cr);
-
- _emit_glyphs (font, glyphs, num_glyphs);
- _trace_printf (" show-glyphs\n");
- _write_unlock ();
- }
-
- DLCALL (cairo_show_glyphs, cr, glyphs, num_glyphs);
- _exit_trace ();
-}
-
-static const char *
-_direction_to_string (cairo_bool_t backward)
-{
- const char *names[] = {
- "FORWARD",
- "BACKWARD"
- };
- return names[!!backward];
-}
-
-void
-cairo_show_text_glyphs (cairo_t *cr,
- const char *utf8,
- int utf8_len,
- const cairo_glyph_t *glyphs,
- int num_glyphs,
- const cairo_text_cluster_t *clusters,
- int num_clusters,
- cairo_text_cluster_flags_t backward)
-{
- cairo_scaled_font_t *font;
-
- _enter_trace ();
-
- font = DLCALL (cairo_get_scaled_font, cr);
-
- _emit_line_info ();
- if (cr != NULL && glyphs != NULL && clusters != NULL && _write_lock ()) {
- int n;
-
- _emit_context (cr);
-
- _emit_string_literal (utf8, utf8_len);
-
- _emit_glyphs (font, glyphs, num_glyphs);
- _trace_printf (" [");
- for (n = 0; n < num_clusters; n++) {
- _trace_printf (" %d %d",
- clusters[n].num_bytes,
- clusters[n].num_glyphs);
- }
- _trace_printf (" ] //%s show-text-glyphs\n",
- _direction_to_string (backward));
-
- _write_unlock ();
- }
-
- DLCALL (cairo_show_text_glyphs, cr,
- utf8, utf8_len,
- glyphs, num_glyphs,
- clusters, num_clusters,
- backward);
- _exit_trace ();
-}
-
-void
-cairo_text_path (cairo_t *cr, const char *utf8)
-{
- _enter_trace ();
- _emit_line_info ();
- if (cr != NULL && _write_lock ()) {
- _emit_context (cr);
- _emit_string_literal (utf8, -1);
- _trace_printf (" text-path\n");
- _write_unlock ();
- }
- DLCALL (cairo_text_path, cr, utf8);
- _exit_trace ();
-}
-
-void
-cairo_glyph_path (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs)
-{
- cairo_scaled_font_t *font;
-
- _enter_trace ();
-
- font = DLCALL (cairo_get_scaled_font, cr);
-
- _emit_line_info ();
- if (cr != NULL && glyphs != NULL && _write_lock ()) {
- _emit_context (cr);
- _emit_glyphs (font, glyphs, num_glyphs);
- _trace_printf (" glyph-path\n");
-
- _write_unlock ();
- }
-
- DLCALL (cairo_glyph_path, cr, glyphs, num_glyphs);
- _exit_trace ();
-}
-
-void
-cairo_append_path (cairo_t *cr, const cairo_path_t *path)
-{
- /* XXX no support for named paths, so manually reconstruct */
- int i;
- cairo_path_data_t *p;
-
- _enter_trace ();
-
- _emit_line_info ();
- if (cr == NULL || path == NULL) {
- DLCALL (cairo_append_path, cr, path);
- _exit_trace ();
- return;
- }
-
- for (i=0; i < path->num_data; i += path->data[i].header.length) {
- p = &path->data[i];
- switch (p->header.type) {
- case CAIRO_PATH_MOVE_TO:
- if (p->header.length >= 2)
- cairo_move_to (cr, p[1].point.x, p[1].point.y);
- break;
- case CAIRO_PATH_LINE_TO:
- if (p->header.length >= 2)
- cairo_line_to (cr, p[1].point.x, p[1].point.y);
- break;
- case CAIRO_PATH_CURVE_TO:
- if (p->header.length >= 4)
- cairo_curve_to (cr,
- p[1].point.x, p[1].point.y,
- p[2].point.x, p[2].point.y,
- p[3].point.x, p[3].point.y);
- break;
- case CAIRO_PATH_CLOSE_PATH:
- if (p->header.length >= 1)
- cairo_close_path (cr);
- break;
- default:
- break;
- }
- }
- _exit_trace ();
-}
-
-cairo_surface_t *
-cairo_image_surface_create (cairo_format_t format, int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_image_surface_create, format, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
- const char *format_str = _format_to_string (format);
- const char *content_str = _format_to_content_string (format);
-
- _trace_printf ("dict\n"
- " /width %d set\n"
- " /height %d set\n"
- " /format //%s set\n"
- " /content //%s set\n"
- " image dup /s%ld exch def\n",
- width, height, format_str, content_str, obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_image_surface_create_for_data (unsigned char *data, cairo_format_t format, int width, int height, int stride)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_image_surface_create_for_data, data, format, width, height, stride);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- /* cairo_image_surface_create_for_data() is both used to supply
- * foreign pixel data to cairo and in order to read pixels back.
- * Defer grabbing the pixel contents until we have to, but only for
- * "large" images, for small images the overhead of embedding pixels
- * is negligible.
- *
- * Choose 32x32 as that captures most icons which thanks to GdkPixbuf
- * are frequently reloaded.
- */
- if (width * height < 32*32) {
- _emit_image (ret, NULL);
- _trace_printf (" dup /s%ld exch def\n",
- obj->token);
- } else {
- _trace_printf ("dict\n"
- " /width %d set\n"
- " /height %d set\n"
- " /format //%s set\n"
- " image dup /s%ld exch def\n",
- width, height,
- _format_to_string (format),
- obj->token);
-
- obj->foreign = TRUE;
- }
-
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-unsigned char *
-cairo_image_surface_get_data (cairo_surface_t *surface)
-{
- unsigned char *ptr;
-
- /* Just leave some breadcrumbs */
- _enter_trace ();
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- _trace_printf ("%% s%ld get-data\n", _get_surface_id (surface));
- _write_unlock ();
- }
- ptr = DLCALL (cairo_image_surface_get_data, surface);
- _exit_trace ();
-
- return ptr;
-}
-
-cairo_pattern_t *
-cairo_pattern_create_raster_source (void *data, cairo_content_t content, int width, int height)
-{
- cairo_pattern_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pattern_create_raster_source, data, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- long pattern_id = _create_pattern_id (ret);
- cairo_format_t format;
- cairo_surface_t *image;
- cairo_t *cr;
-
- /* Impossible to accurately record the interaction with this custom
- * pattern so just suck all the data into an image upfront */
- switch (content) {
- case CAIRO_CONTENT_ALPHA: format = CAIRO_FORMAT_A8; break;
- case CAIRO_CONTENT_COLOR: format = CAIRO_FORMAT_RGB24; break;
- default:
- case CAIRO_CONTENT_COLOR_ALPHA: format = CAIRO_FORMAT_ARGB32; break;
- }
-
- _trace_printf ("%% raster-source\n");
-
- image = DLCALL (cairo_image_surface_create, format, width, height);
- cr = DLCALL (cairo_create, image);
- DLCALL (cairo_set_source, cr, ret);
- DLCALL (cairo_paint, cr);
- DLCALL (cairo_destroy, cr);
-
- _emit_image (image, NULL);
- DLCALL (cairo_surface_destroy, image);
- _trace_printf (" pattern dup /s%ld exch def\n",
- pattern_id);
-
- _push_operand (PATTERN, ret);
- _get_object (PATTERN, ret)->defined = TRUE;
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_surface_create_similar (cairo_surface_t *other,
- cairo_content_t content,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_surface_create_similar, other, content, width, height);
-
- _emit_line_info ();
- if (other != NULL && _write_lock ()) {
- Object *other_obj = _get_object(SURFACE, other);
- Object *new_obj = _create_surface (ret);
-
- if (other_obj->operand != -1) {
- if (current_stack_depth == other_obj->operand + 1)
- _trace_printf ("dup ");
- else
- _trace_printf ("%d index ",
- current_stack_depth - other_obj->operand - 1);
- } else {
- assert(other_obj->defined);
- _trace_printf ("s%ld ", other_obj->token);
- }
-
- _trace_printf ("%d %d //%s similar dup /s%ld exch def\n",
- width, height,
- _content_to_string (content),
- new_obj->token);
-
- new_obj->width = width;
- new_obj->height = height;
- new_obj->defined = TRUE;
-
- _push_object (new_obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_surface_create_similar_image (cairo_surface_t *other,
- cairo_format_t format,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_surface_create_similar_image,
- other, format, width, height);
-
- _emit_line_info ();
- if (other != NULL && _write_lock ()) {
- Object *other_obj = _get_object(SURFACE, other);
- Object *new_obj = _create_surface (ret);
-
- if (other_obj->defined)
- _trace_printf ("s%ld ", other_obj->token);
- else if (current_stack_depth == other_obj->operand + 1)
- _trace_printf ("dup ");
- else
- _trace_printf ("%d index ",
- current_stack_depth - other_obj->operand - 1);
- _trace_printf ("//%s %d %d similar-image %% s%ld\n",
- _format_to_string (format),
- width, height,
- new_obj->token);
- new_obj->width = width;
- new_obj->height = height;
-
- _push_object (new_obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_surface_map_to_image (cairo_surface_t *surface,
- const cairo_rectangle_int_t *extents)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_surface_map_to_image, surface, extents);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _emit_surface (surface);
- if (extents) {
- _trace_printf ("[%d %d %d %d] map-to-image %% s%ld\n",
- extents->x, extents->y,
- extents->width, extents->height,
- obj->token);
- obj->width = extents->width;
- obj->height = extents->height;
- } else {
- _trace_printf ("[ ] map-to-image %% s%ld\n", obj->token);
- }
-
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_surface_unmap_image (cairo_surface_t *surface,
- cairo_surface_t *image)
-{
- _enter_trace ();
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *s = _get_object (SURFACE, surface);
- Object *i = _get_object (SURFACE, image);
- if (!(s->operand == current_stack_depth - 2 &&
- i->operand == current_stack_depth - 1)) {
- if (i->operand != s->operand + 1 || ! _pop_operands_to_depth (i->operand + 1)) {
- _emit_surface (surface);
- _emit_surface (image);
- }
- }
- _trace_printf ("unmap-image\n");
- _consume_operand (true);
- _write_unlock ();
- }
-
- DLCALL (cairo_surface_unmap_image, surface, image);
-
- _exit_trace ();
-}
-
-cairo_surface_t *
-cairo_surface_create_for_rectangle (cairo_surface_t *target,
- double x, double y,
- double width, double height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_surface_create_for_rectangle, target, x, y, width, height);
-
- _emit_line_info ();
- if (target != NULL && _write_lock ()) {
- Object *target_obj = _get_object (SURFACE, target);
- Object *child_obj = _create_surface (ret);
-
- if (target_obj->defined)
- _trace_printf ("s%ld ", target_obj->token);
- else if (current_stack_depth == target_obj->operand + 1)
- _trace_printf ("dup ");
- else
- _trace_printf ("%d index ", current_stack_depth - target_obj->operand - 1);
- _trace_printf ("%f %f %f %f subsurface %% s%ld\n",
- x, y, width, height,
- child_obj->token);
-
- _push_object (child_obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-static void CAIRO_PRINTF_FORMAT(2, 3)
-_emit_surface_op (cairo_surface_t *surface, const char *fmt, ...)
-{
- va_list ap;
-
- if (surface == NULL || ! _write_lock ())
- return;
-
- _emit_surface (surface);
-
- va_start (ap, fmt);
- _trace_vprintf ( fmt, ap);
- va_end (ap);
-
- _write_unlock ();
-}
-
-void
-cairo_surface_finish (cairo_surface_t *surface)
-{
- _enter_trace ();
- _emit_line_info ();
- DLCALL (cairo_surface_finish, surface);
- _exit_trace ();
-}
-
-void
-cairo_surface_flush (cairo_surface_t *surface)
-{
- _enter_trace ();
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- _trace_printf ("%% s%ld flush\n", _get_surface_id (surface));
- _write_unlock ();
- }
- DLCALL (cairo_surface_flush, surface);
- _exit_trace ();
-}
-
-void
-cairo_surface_mark_dirty (cairo_surface_t *surface)
-{
- _enter_trace ();
- _emit_line_info ();
-
- /* Call cairo before emitting the trace since _emit_surface() might cause
- * snapshots to be creates while mark_dirty assert()s that there are none.
- */
- DLCALL (cairo_surface_mark_dirty, surface);
-
- if (surface != NULL && _write_lock ()) {
- if (_mark_dirty) {
- _emit_surface (surface);
- _trace_printf ("%% mark-dirty\n");
- _emit_source_image (surface);
- } else
- _trace_printf ("%% s%ld mark-dirty\n", _get_surface_id (surface));
- _write_unlock ();
- }
- _exit_trace ();
-}
-
-void
-cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
- int x, int y, int width, int height)
-{
- _enter_trace ();
-
- /* Call cairo before emitting the trace since _emit_surface() might cause
- * snapshots to be creates while mark_dirty assert()s that there are none.
- */
- DLCALL (cairo_surface_mark_dirty_rectangle, surface, x, y, width, height);
-
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- if (_mark_dirty) {
- _emit_surface (surface);
- _trace_printf ("%% %d %d %d %d mark-dirty-rectangle\n",
- x, y, width, height);
- _emit_source_image_rectangle (surface, x,y, width, height);
- } else
- _trace_printf ("%% s%ld %d %d %d %d mark-dirty-rectangle\n",
- _get_surface_id (surface), x, y, width, height);
- _write_unlock ();
- }
- _exit_trace ();
-}
-
-void
-cairo_surface_set_device_offset (cairo_surface_t *surface, double x_offset, double y_offset)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_surface_op (surface, "%g %g set-device-offset\n",
- x_offset, y_offset);
- DLCALL (cairo_surface_set_device_offset, surface, x_offset, y_offset);
- _exit_trace ();
-}
-
-void
-cairo_surface_set_device_scale (cairo_surface_t *surface, double x_offset, double y_offset)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_surface_op (surface, "%g %g set-device-scale\n",
- x_offset, y_offset);
- DLCALL (cairo_surface_set_device_scale, surface, x_offset, y_offset);
- _exit_trace ();
-}
-
-
-void
-cairo_surface_set_fallback_resolution (cairo_surface_t *surface, double x_pixels_per_inch, double y_pixels_per_inch)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_surface_op (surface, "%g %g set-fallback-resolution\n",
- x_pixels_per_inch, y_pixels_per_inch);
- DLCALL (cairo_surface_set_fallback_resolution, surface, x_pixels_per_inch, y_pixels_per_inch);
- _exit_trace ();
-}
-
-void
-cairo_surface_copy_page (cairo_surface_t *surface)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_surface_op (surface, "copy-page\n");
- DLCALL (cairo_surface_copy_page, surface);
- _exit_trace ();
-}
-
-void
-cairo_surface_show_page (cairo_surface_t *surface)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_surface_op (surface, "show-page\n");
- DLCALL (cairo_surface_show_page, surface);
- _exit_trace ();
-}
-
-cairo_status_t
-cairo_surface_set_mime_data (cairo_surface_t *surface,
- const char *mime_type,
- const unsigned char *data,
- unsigned long length,
- cairo_destroy_func_t destroy,
- void *closure)
-{
- cairo_status_t ret;
- _enter_trace ();
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- _emit_surface (surface);
- _emit_string_literal (mime_type, -1);
- _trace_printf (" ");
- _emit_data (data, length);
- _trace_printf (" /deflate filter set-mime-data\n");
-
- _write_unlock ();
- }
-
- ret = DLCALL (cairo_surface_set_mime_data,
- surface,
- mime_type,
- data, length,
- destroy,
- closure);
- _exit_trace ();
- return ret;
-}
-
-#if CAIRO_HAS_PNG_FUNCTIONS
-cairo_status_t
-cairo_surface_write_to_png (cairo_surface_t *surface, const char *filename)
-{
- cairo_status_t ret;
- _enter_trace ();
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- _trace_printf ("%% s%ld ", _get_surface_id (surface));
- _emit_string_literal (filename, -1);
- _trace_printf (" write-to-png pop\n");
- _write_unlock ();
- }
- ret = DLCALL (cairo_surface_write_to_png, surface, filename);
- _exit_trace ();
- return ret;
-}
-
-cairo_status_t
-cairo_surface_write_to_png_stream (cairo_surface_t *surface,
- cairo_write_func_t write_func,
- void *data)
-{
- cairo_status_t ret;
- _enter_trace ();
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- char symbol[1024];
-
- _trace_printf ("%% s%ld ", _get_surface_id (surface));
-#if CAIRO_HAS_SYMBOL_LOOKUP
- lookup_symbol (symbol, sizeof (symbol), write_func);
-#else
- symbol[0] = '\0';
-#endif
- _emit_string_literal (symbol, -1);
- _trace_printf (" write-to-png-stream pop\n");
- _write_unlock ();
- }
- ret = DLCALL (cairo_surface_write_to_png_stream,
- surface, write_func, data);
- _exit_trace ();
- return ret;
-}
-#endif
-
-static void CAIRO_PRINTF_FORMAT(2, 3)
-_emit_pattern_op (cairo_pattern_t *pattern, const char *fmt, ...)
-{
- va_list ap;
-
- if (pattern == NULL || ! _write_lock ())
- return;
-
- _emit_pattern (pattern);
-
- va_start (ap, fmt);
- _trace_vprintf (fmt, ap);
- va_end (ap);
-
- _write_unlock ();
-}
-
-cairo_pattern_t *
-cairo_pattern_create_rgb (double red, double green, double blue)
-{
- cairo_pattern_t *ret;
- long pattern_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pattern_create_rgb, red, green, blue);
- pattern_id = _create_pattern_id (ret);
-
- _emit_line_info ();
- if (_write_lock ()) {
- _trace_printf ("/p%ld %g %g %g rgb def\n",
- pattern_id, red, green, blue);
- _get_object (PATTERN, ret)->defined = TRUE;
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_pattern_t *
-cairo_pattern_create_rgba (double red, double green, double blue, double alpha)
-{
- cairo_pattern_t *ret;
- long pattern_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pattern_create_rgba, red, green, blue, alpha);
- pattern_id = _create_pattern_id (ret);
-
- _emit_line_info ();
- if (_write_lock ()) {
- _trace_printf ("/p%ld %g %g %g %g rgba def\n",
- pattern_id, red, green, blue, alpha);
- _get_object (PATTERN, ret)->defined = TRUE;
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_pattern_t *
-cairo_pattern_create_for_surface (cairo_surface_t *surface)
-{
- cairo_pattern_t *ret;
- long pattern_id;
- long surface_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pattern_create_for_surface, surface);
- pattern_id = _create_pattern_id (ret);
-
- _emit_line_info ();
- if (surface != NULL && _write_lock ()) {
- surface_id = _get_surface_id (surface);
-
- if (_pop_operands_to (SURFACE, surface)) {
- _consume_operand (false);
- } else {
- _trace_printf ("s%ld ", surface_id);
- }
-
- if (_get_object (SURFACE, surface)->foreign)
- _emit_source_image (surface);
-
- _trace_printf ("pattern %% p%ld\n", pattern_id);
- _push_operand (PATTERN, ret);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_pattern_t *
-cairo_pattern_create_linear (double x0, double y0, double x1, double y1)
-{
- cairo_pattern_t *ret;
- long pattern_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pattern_create_linear, x0, y0, x1, y1);
- pattern_id = _create_pattern_id (ret);
-
- _emit_line_info ();
- if (_write_lock ()) {
- _trace_printf ("%g %g %g %g linear %% p%ld\n",
- x0, y0, x1, y1, pattern_id);
- _push_operand (PATTERN, ret);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_pattern_t *
-cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1)
-{
- cairo_pattern_t *ret;
- long pattern_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pattern_create_radial,
- cx0, cy0, radius0,
- cx1, cy1, radius1);
- pattern_id = _create_pattern_id (ret);
-
- _emit_line_info ();
- if (_write_lock ()) {
- _trace_printf ("%g %g %g %g %g %g radial %% p%ld\n",
- cx0, cy0, radius0, cx1, cy1, radius1,
- pattern_id);
- _push_operand (PATTERN, ret);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_pattern_add_color_stop_rgb (cairo_pattern_t *pattern, double offset, double red, double green, double blue)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_pattern_op (pattern,
- "%g %g %g %g 1 add-color-stop\n",
- offset, red, green, blue);
- DLCALL (cairo_pattern_add_color_stop_rgb, pattern, offset, red, green, blue);
- _exit_trace ();
-}
-
-void
-cairo_pattern_add_color_stop_rgba (cairo_pattern_t *pattern, double offset, double red, double green, double blue, double alpha)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_pattern_op (pattern,
- "%g %g %g %g %g add-color-stop\n",
- offset, red, green, blue, alpha);
- DLCALL (cairo_pattern_add_color_stop_rgba, pattern, offset, red, green, blue, alpha);
- _exit_trace ();
-}
-
-void
-cairo_pattern_set_matrix (cairo_pattern_t *pattern, const cairo_matrix_t *matrix)
-{
- _enter_trace ();
- _emit_line_info ();
- if (_matrix_is_identity (matrix)) {
- _emit_pattern_op (pattern, "identity set-matrix\n");
- } else {
- _emit_pattern_op (pattern,
- "%g %g %g %g %g %g matrix set-matrix\n",
- matrix->xx, matrix->yx,
- matrix->xy, matrix->yy,
- matrix->x0, matrix->y0);
- }
- DLCALL (cairo_pattern_set_matrix, pattern, matrix);
- _exit_trace ();
-}
-
-static const char *
-_filter_to_string (cairo_filter_t filter)
-{
-#define f(name) case CAIRO_FILTER_ ## name: return "FILTER_" #name
- switch (filter) {
- f(FAST);
- f(GOOD);
- f(BEST);
- f(NEAREST);
- f(BILINEAR);
- f(GAUSSIAN);
- };
-#undef f
- return "UNKNOWN_FILTER";
-}
-
-void
-cairo_pattern_set_filter (cairo_pattern_t *pattern, cairo_filter_t filter)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_pattern_op (pattern, "//%s set-filter\n", _filter_to_string (filter));
- DLCALL (cairo_pattern_set_filter, pattern, filter);
- _exit_trace ();
-}
-
-static const char *
-_extend_to_string (cairo_extend_t extend)
-{
-#define f(name) case CAIRO_EXTEND_ ## name: return "EXTEND_" #name
- switch (extend) {
- f(NONE);
- f(REPEAT);
- f(REFLECT);
- f(PAD);
- };
-#undef f
- return "UNKNOWN_EXTEND";
-}
-
-void
-cairo_pattern_set_extend (cairo_pattern_t *pattern, cairo_extend_t extend)
-{
- _enter_trace ();
- _emit_line_info ();
- _emit_pattern_op (pattern, "//%s set-extend\n", _extend_to_string (extend));
- DLCALL (cairo_pattern_set_extend, pattern, extend);
- _exit_trace ();
-}
-
-#if CAIRO_HAS_FT_FONT
-#if CAIRO_HAS_FC_FONT
-cairo_font_face_t *
-cairo_ft_font_face_create_for_pattern (FcPattern *pattern)
-{
- cairo_font_face_t *ret;
- long font_face_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_ft_font_face_create_for_pattern, pattern);
- font_face_id = _create_font_face_id (ret);
-
- _emit_line_info ();
- if (pattern != NULL && _write_lock ()) {
- Object *obj;
-
- obj = _get_object (FONT_FACE, ret);
- if (obj->unknown) {
- FcPattern *copy;
- FcChar8 *unparsed;
-
- copy = DLCALL (FcPatternDuplicate, pattern);
- if (copy)
- {
- DLCALL (FcPatternDel, copy, FC_LANG);
- DLCALL (FcPatternDel, copy, FC_CHARSET);
- DLCALL (FcPatternDel, copy, FC_CAPABILITY);
- }
- else
- copy = pattern;
-
- unparsed = DLCALL (FcNameUnparse, copy);
- _trace_printf ("dict\n"
- " /type 42 set\n"
- " /pattern ");
- _emit_string_literal ((char *) unparsed, -1);
- _trace_printf (" set\n"
- " font %% f%ld\n",
- font_face_id);
- obj->unknown = FALSE;
- _push_operand (FONT_FACE, ret);
- dump_stack(__func__);
-
- if (copy != pattern)
- DLCALL (FcPatternDestroy, copy);
- free (unparsed);
- }
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif /* CAIRO_HAS_FC_FONT*/
-
-typedef struct _ft_face_data {
- unsigned long index;
- unsigned long size;
- void *data;
-} FtFaceData;
-
-static void
-_ft_face_data_destroy (void *arg)
-{
- FtFaceData *data = arg;
- free (data->data);
- free (data);
-}
-
-cairo_font_face_t *
-cairo_ft_font_face_create_for_ft_face (FT_Face face, int load_flags)
-{
- cairo_font_face_t *ret;
- Object *obj;
- FtFaceData *data;
- long font_face_id;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_ft_font_face_create_for_ft_face, face, load_flags);
- font_face_id = _create_font_face_id (ret);
-
- if (face == NULL) {
- _exit_trace ();
- return ret;
- }
-
- obj = _get_object (NONE, face);
- data = obj->data;
- if (data == NULL) {
- _exit_trace ();
- return ret;
- }
-
- _emit_line_info ();
- if (_write_lock ()) {
- obj = _get_object (FONT_FACE, ret);
- if (obj->operand != -1)
- _object_remove (obj);
-
- _trace_printf ("<< /type 42 /source ");
- _emit_data (data->data, data->size);
- _trace_printf (" /index %lu /flags %d >> font %% f%ld\n",
- data->index, load_flags, font_face_id);
- _push_operand (FONT_FACE, ret);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-static cairo_bool_t
-_ft_read_file (FtFaceData *data, const char *path)
-{
- char buf[8192];
- FILE *file;
-
- file = fopen (path, "rb");
- if (file != NULL) {
- size_t ret;
- unsigned long int allocated = sizeof (buf);
- data->data = malloc (allocated);
- do {
- ret = fread (buf, 1, sizeof (buf), file);
- if (ret == 0)
- break;
- memcpy ((char *) data->data + data->size, buf, ret);
- data->size += ret;
- if (ret != sizeof (buf))
- break;
-
- if (data->size == allocated) {
- allocated *= 2;
- data->data = realloc (data->data, allocated);
- }
- } while (TRUE);
- fclose (file);
- }
-
- return file != NULL;
-}
-
-FT_Error
-FT_New_Face (FT_Library library, const char *pathname, FT_Long index, FT_Face *face)
-{
- FT_Error ret;
-
- _enter_trace ();
-
- ret = DLCALL (FT_New_Face, library, pathname, index, face);
- if (ret == 0) {
- Object *obj = _type_object_create (NONE, *face);
- FtFaceData *data = malloc (sizeof (FtFaceData));
- data->index = index;
- data->size = 0;
- data->data = NULL;
- _ft_read_file (data, pathname);
- obj->data = data;
- obj->destroy = _ft_face_data_destroy;
- }
-
- _exit_trace ();
- return ret;
-}
-
-FT_Error
-FT_New_Memory_Face (FT_Library library, const FT_Byte *mem, FT_Long size, FT_Long index, FT_Face *face)
-{
- FT_Error ret;
-
- _enter_trace ();
-
- ret = DLCALL (FT_New_Memory_Face, library, mem, size, index, face);
- if (ret == 0) {
- Object *obj = _type_object_create (NONE, *face);
- FtFaceData *data = malloc (sizeof (FtFaceData));
- data->index = index;
- data->size = size;
- data->data = malloc (size);
- memcpy (data->data, mem, size);
- obj->data = data;
- obj->destroy = _ft_face_data_destroy;
- }
-
- _exit_trace ();
- return ret;
-}
-
-/* XXX
- * FT_New_Memory_Face() and FT_New_Face() appear to wrap FT_Open_Face() so we
- * get a redundant call to FT_Open_Face() from those paths (no PLT hiding
- * within FT, naughty library!) but we do not intercept a direct call to
- * FT_Open_Face(). So far this has not caused any issues, but it will one
- * day...
- */
-FT_Error
-FT_Open_Face (FT_Library library, const FT_Open_Args *args, FT_Long index, FT_Face *face)
-{
- FT_Error ret;
-
- _enter_trace ();
-
- ret = DLCALL (FT_Open_Face, library, args, index, face);
- if (ret == 0) {
- Object *obj = _get_object (NONE, *face);
- if (obj == NULL) {
- FtFaceData *data;
-
- data = malloc (sizeof (FtFaceData));
- data->index = index;
- if (args->flags & FT_OPEN_MEMORY) {
- data->size = args->memory_size;
- data->data = malloc (args->memory_size);
- memcpy (data->data, args->memory_base, args->memory_size);
- } else if (args->flags & FT_OPEN_STREAM) {
- fprintf (stderr, "FT_Open_Face (stream, %ld) = %p\n",
- index, *face);
- abort ();
- } else if (args->flags & FT_OPEN_PATHNAME) {
- data->size = 0;
- data->data = NULL;
- _ft_read_file (data, args->pathname);
- }
-
- obj = _type_object_create (NONE, *face);
- obj->data = data;
- obj->destroy = _ft_face_data_destroy;
- }
- }
-
- _exit_trace ();
- return ret;
-}
-
-FT_Error
-FT_Done_Face (FT_Face face)
-{
- FT_Error ret;
- _enter_trace ();
-
- _object_destroy (_get_object (NONE, face));
-
- ret = DLCALL (FT_Done_Face, face);
- _exit_trace ();
- return ret;
-}
-#endif
-
-static void
-_surface_object_set_size (cairo_surface_t *surface, int width, int height)
-{
- Object *obj;
-
- obj = _get_object (SURFACE, surface);
- obj->width = width;
- obj->height = height;
-}
-
-static void
-_surface_object_set_size_from_surface (cairo_surface_t *surface)
-{
- _surface_object_set_size (surface,
- DLCALL (cairo_image_surface_get_width, surface),
- DLCALL (cairo_image_surface_get_height, surface));
-}
-
-#if CAIRO_HAS_PS_SURFACE
-#include<cairo-ps.h>
-
-cairo_surface_t *
-cairo_ps_surface_create (const char *filename, double width_in_points, double height_in_points)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_ps_surface_create, filename, width_in_points, height_in_points);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /PS set\n"
- " /filename ");
- _emit_string_literal (filename, -1);
- _trace_printf (" set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface %% s%ld\n",
- width_in_points,
- height_in_points,
- obj->token);
- obj->width = width_in_points;
- obj->height = height_in_points;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_ps_surface_create_for_stream (cairo_write_func_t write_func, void *closure, double width_in_points, double height_in_points)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_ps_surface_create_for_stream, write_func, closure, width_in_points, height_in_points);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /PS set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface %% s%ld\n",
- width_in_points,
- height_in_points,
- obj->token);
- obj->width = width_in_points;
- obj->height = height_in_points;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_ps_surface_set_size (cairo_surface_t *surface, double width_in_points, double height_in_points)
-{
- _enter_trace ();
- _emit_line_info ();
- DLCALL (cairo_ps_surface_set_size, surface, width_in_points, height_in_points);
- _exit_trace ();
-}
-
-#endif
-
-#if CAIRO_HAS_PDF_SURFACE
-#include <cairo-pdf.h>
-
-cairo_surface_t *
-cairo_pdf_surface_create (const char *filename, double width_in_points, double height_in_points)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pdf_surface_create, filename, width_in_points, height_in_points);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /PDF set\n"
- " /filename ");
- _emit_string_literal (filename, -1);
- _trace_printf (" set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface %% s%ld\n",
- width_in_points,
- height_in_points,
- obj->token);
- obj->width = width_in_points;
- obj->height = height_in_points;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_pdf_surface_create_for_stream (cairo_write_func_t write_func, void *closure, double width_in_points, double height_in_points)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_pdf_surface_create_for_stream, write_func, closure, width_in_points, height_in_points);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /PDF set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface %% s%ld\n",
- width_in_points,
- height_in_points,
- obj->token);
- obj->width = width_in_points;
- obj->height = height_in_points;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
- _exit_trace ();
- return ret;
-}
-
-void
-cairo_pdf_surface_set_size (cairo_surface_t *surface, double width_in_points, double height_in_points)
-{
- _enter_trace ();
- _emit_line_info ();
- DLCALL (cairo_pdf_surface_set_size, surface, width_in_points, height_in_points);
- _exit_trace ();
-}
-#endif
-
-#if CAIRO_HAS_SVG_SURFACE
-#include <cairo-svg.h>
-
-cairo_surface_t *
-cairo_svg_surface_create (const char *filename, double width, double height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_svg_surface_create, filename, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /SVG set\n"
- " /filename ");
- _emit_string_literal (filename, -1);
- _trace_printf (" set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface %% s%ld\n",
- width,
- height,
- obj->token);
- obj->width = width;
- obj->height = height;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_svg_surface_create_for_stream (cairo_write_func_t write_func, void *closure, double width, double height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_svg_surface_create_for_stream, write_func, closure, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /SVG set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface %% s%ld\n",
- width,
- height,
- obj->token);
- obj->width = width;
- obj->height = height;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#endif
-
-#if CAIRO_HAS_PNG_FUNCTIONS
-cairo_surface_t *
-cairo_image_surface_create_from_png (const char *filename)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_image_surface_create_from_png, filename);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
- char filename_string[4096];
-
- _encode_string_literal (filename_string, sizeof (filename_string),
- filename, -1);
- _emit_image (ret, " /filename %s set\n", filename_string);
- _trace_printf (" dup /s%ld exch def\n", obj->token);
- _surface_object_set_size_from_surface (ret);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_image_surface_create_from_png_stream (cairo_read_func_t read_func, void *closure)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_image_surface_create_from_png_stream, read_func, closure);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _emit_image (ret, NULL);
- _trace_printf (" dup /s%ld exch def\n",
- obj->token);
-
- _surface_object_set_size_from_surface (ret);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-
-static const char *
-_content_from_surface (cairo_surface_t *surface)
-{
- return _content_to_string (DLCALL (cairo_surface_get_content, surface));
-}
-
-#if CAIRO_HAS_TEE_SURFACE
-#include <cairo-tee.h>
-
-cairo_surface_t *
-cairo_tee_surface_create (cairo_surface_t *master)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_tee_surface_create, master);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /tee set\n"
- " /master s%ld set\n"
- " surface dup /s%ld exch def\n",
- _get_object (SURFACE, master)->token,
- obj->token);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#endif
-
-#if CAIRO_HAS_XLIB_SURFACE
-#include <cairo-xlib.h>
-
-cairo_surface_t *
-cairo_xlib_surface_create (Display *dpy,
- Drawable drawable,
- Visual *visual,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_xlib_surface_create,
- dpy, drawable, visual, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /xlib set\n"
- " /drawable 16!%lx set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- drawable,
- _content_from_surface (ret),
- width, height,
- obj->token);
- obj->defined = TRUE;
- obj->width = width;
- obj->height = height;
- obj->foreign = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_xlib_surface_create_for_bitmap (Display *dpy,
- Pixmap bitmap,
- Screen *screen,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_xlib_surface_create_for_bitmap,
- dpy, bitmap, screen, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /xlib set\n"
- " /drawable 16!%lx set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " /depth 1 set\n"
- " surface dup /s%ld exch def\n",
- bitmap,
- _content_from_surface (ret),
- width, height,
- obj->token);
- obj->defined = TRUE;
- obj->width = width;
- obj->height = height;
- obj->foreign = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#if CAIRO_HAS_XLIB_XRENDER_SURFACE
-#include <cairo-xlib-xrender.h>
-cairo_surface_t *
-cairo_xlib_surface_create_with_xrender_format (Display *dpy,
- Drawable drawable,
- Screen *screen,
- XRenderPictFormat *format,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_xlib_surface_create_with_xrender_format,
- dpy, drawable, screen, format, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /xrender set\n"
- " /drawable 16!%lx set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " /depth %d set\n"
- " surface dup /s%ld exch def\n",
- drawable,
- _content_from_surface (ret),
- width, height,
- format->depth,
- obj->token);
- obj->defined = TRUE;
- obj->width = width;
- obj->height = height;
- obj->foreign = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-#endif
-
-#if CAIRO_HAS_SCRIPT_SURFACE
-#include <cairo-script.h>
-cairo_surface_t *
-cairo_script_surface_create (cairo_device_t *device,
- cairo_content_t content,
- double width,
- double height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_script_surface_create, device, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /script set\n"
- " /content %s set\n"
- " /width %g set\n"
- " /height %g set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_script_surface_create_for_target (cairo_device_t *device,
- cairo_surface_t *target)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_script_surface_create_for_target, device, target);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /script set\n"
- " surface dup /s%ld exch def\n",
- obj->token);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-
-#if CAIRO_HAS_TEST_SURFACES
-#include <test-paginated-surface.h>
-cairo_surface_t *
-_cairo_test_paginated_surface_create (cairo_surface_t *surface)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (_cairo_test_paginated_surface_create, surface);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- /* XXX store initial data? */
- _trace_printf ("dict\n"
- " /type /test-paginated set\n"
- " /target s%ld set\n"
- " surface dup /s%ld exch def\n",
- _get_surface_id (surface),
- obj->token);
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#include <test-compositor-surface.h>
-
-cairo_surface_t *
-_cairo_test_fallback_compositor_surface_create (cairo_content_t content, int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (_cairo_test_fallback_compositor_surface_create, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /test-fallback-compositor set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-_cairo_test_mask_compositor_surface_create (cairo_content_t content, int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (_cairo_test_mask_compositor_surface_create, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /test-mask-compositor set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-_cairo_test_spans_compositor_surface_create (cairo_content_t content, int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (_cairo_test_spans_compositor_surface_create, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /test-spans-compositor set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-_cairo_test_traps_compositor_surface_create (cairo_content_t content, int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (_cairo_test_traps_compositor_surface_create, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /test-traps-compositor set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#endif
-
-cairo_surface_t *
-cairo_recording_surface_create (cairo_content_t content,
- const cairo_rectangle_t *extents)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_recording_surface_create, content, extents);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- if (extents) {
- _trace_printf ("//%s [ %f %f %f %f ] record dup /s%ld exch def\n",
- _content_to_string (content),
- extents->x, extents->y,
- extents->width, extents->height,
- obj->token);
- obj->width = extents->width;
- obj->height = extents->height;
- } else {
- _trace_printf ("//%s [ ] record dup /s%ld exch def\n",
- _content_to_string (content),
- obj->token);
- }
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#if CAIRO_HAS_VG_SURFACE
-#include <cairo-vg.h>
-cairo_surface_t *
-cairo_vg_surface_create (cairo_vg_context_t *context,
- cairo_content_t content,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_vg_surface_create, context, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /vg set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_vg_surface_create_for_image (cairo_vg_context_t *context,
- VGImage image,
- VGImageFormat format,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_vg_surface_create_for_image,
- context, image, format, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
- cairo_content_t content;
-
- content = DLCALL (cairo_surface_get_content, ret);
- _trace_printf ("dict\n"
- " /type /vg set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-
-#if CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLESV2_SURFACE
-#include <cairo-gl.h>
-cairo_surface_t *
-cairo_gl_surface_create (cairo_device_t *abstract_device,
- cairo_content_t content,
- int width,
- int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_gl_surface_create, abstract_device, content, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /gl set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-cairo_surface_t *
-cairo_gl_surface_create_for_texture (cairo_device_t *abstract_device,
- cairo_content_t content,
- unsigned int tex,
- int width,
- int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_gl_surface_create_for_texture, abstract_device, content, tex, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /gl set\n"
- " /content //%s set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- _content_to_string (content),
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-
-#if CAIRO_HAS_GLX_FUNCTIONS
-cairo_surface_t *
-cairo_gl_surface_create_for_window (cairo_device_t *device,
- Window win,
- int width, int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_gl_surface_create_for_window, device, win, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /gl set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-
-#if CAIRO_HAS_WGL_FUNCTIONS
-cairo_surface_t *
-cairo_gl_surface_create_for_dc (cairo_device_t *device,
- HDC dc,
- int width,
- int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_gl_surface_create_for_dc, device, dc, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /gl set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-
-#if CAIRO_HAS_EGL_FUNCTIONS
-cairo_surface_t *
-cairo_gl_surface_create_for_egl (cairo_device_t *device,
- EGLSurface egl,
- int width,
- int height)
-{
- cairo_surface_t *ret;
-
- _enter_trace ();
-
- ret = DLCALL (cairo_gl_surface_create_for_egl, device, egl, width, height);
-
- _emit_line_info ();
- if (_write_lock ()) {
- Object *obj = _create_surface (ret);
-
- _trace_printf ("dict\n"
- " /type /gl set\n"
- " /width %d set\n"
- " /height %d set\n"
- " surface dup /s%ld exch def\n",
- width, height,
- obj->token);
- obj->width = width;
- obj->height = height;
- obj->defined = TRUE;
- _push_object (obj);
- dump_stack(__func__);
- _write_unlock ();
- }
-
- _exit_trace ();
- return ret;
-}
-#endif
-#endif